Signet dans word depuis Excel

Bonjour à tous,

J'ai quelques problème pour remplacer des signets word par des données d'excel. Pour certains signet ça fonctionne très bien, pour d'autre non alors que j'utilise la même méthode. J'ai bien vérifié, les signets existent et les cellules excel aussi.

ub word2()
Dim Rep As String, ndf As String, Logo As String, ndf2 As String
Dim i As Integer, j As Integer, x As Integer, y As Integer, dernligne As Integer, b As Integer, a As Integer
Dim Total As Single
Dim drnlgn As Byte
Dim drnlgn2 As Byte

    Lrg = Array(Array(1.8, 2.6, 6, 3, 4.5), Array(1.8, 3.5, 3.5))
    Alg = Array(Array(1, 1, 0, 1, 2), Array(1, 2, 2))
    On Error GoTo errhdlr
    Rep = Application.DefaultFilePath & "\Word\"
    If Not Exist_Rep(Rep) Then MkDir Rep

ndf2 = "C:\Users\AGSN2066\Downloads\Modèle mai 2016 v7.docx"
    Set WordApp = CreateObject("Word.Application")
    Set WordDoc = WordApp.Documents.Open(ndf2)
    ndf = Rep & "Fiche_" & Format(Now(), "yyyyMMdd_hhmm") & ".docx"

    WordDoc.Bookmarks("nb_annees_k_benefice_moyen").Range = Worksheets("Méthodes d'évaluation").Range("B26")

    WordDoc.Bookmarks("nb_année_k_ebe_corrigé").Range = Worksheets("Méthodes d'évaluation").Range("B32")

    WordDoc.Bookmarks("valo_financière").Range = Worksheets("Méthodes d'évaluation").Range("B47")
    WordDoc.Bookmarks("tx_renta_financière").Range = Worksheets("Méthodes d'évaluation").Range("B46")

    WordDoc.Bookmarks("valo_méthode_comparative").Range = Worksheets("Méthodes d'évaluation").Range("D59")

    WordDoc.Bookmarks("valo_droit_bail_solidarité").Range = Worksheets("Méthodes d'évaluation").Range("C71")

    WordDoc.Bookmarks("coef_droit_bail_solidarité").Range = Worksheets("Evaluation du fonds").Range("B12")

    WordDoc.Bookmarks("décote_surcote").Range = Worksheets("Evaluation du fonds").Range("B30")

    WordDoc.Bookmarks("valo_moyenne_fonds").Range = Worksheets("Evaluation du fonds").Range("B35")
    WordDoc.Bookmarks("Valo_fourch_basse_fd").Range = Worksheets("Evaluation du fonds").Range("B33")
    WordDoc.Bookmarks("Valo_fourch_haute_fd").Range = Worksheets("Evaluation du fonds").Range("B34")

    WordDoc.Bookmarks("Entreprise_2").Range = Worksheets("Compte de résultat").Range("D4")

    WordDoc.Bookmarks("date_bilan3").Range = Worksheets("Evaluation du fonds").Range("B12")

    WordDoc.Bookmarks("Valo_parts").Range = Worksheets("Sté-Evaluation parts sociales").Range("F36")
    WordDoc.Bookmarks("nb_parts").Range = Worksheets("Sté-Evaluation parts sociales").Range("F37")
    WordDoc.Bookmarks("valo_par_part").Range = Worksheets("Sté-Evaluation parts sociales").Range("F40")

    WordDoc.Bookmarks("valo_par_part").Range = Worksheets("Sté-Evaluation parts sociales").Range("F40")

    WordDoc.Bookmarks("Valo_fourch_haute_fd").Range = Worksheets("Evaluation du fonds").Range("B34")

    WordDoc.Bookmarks("Conseiller2").Range = Worksheets("Client").Range("B13")
    WordDoc.Bookmarks("Poste_conseiller2").Range = Worksheets("Client").Range("B14")
    WordDoc.Bookmarks("Téléphone2").Range = Worksheets("Client").Range("B15")
    WordDoc.Bookmarks("Mail2").Range = Worksheets("Client").Range("B16")

    WordDoc.Bookmarks("Conseiller2").Range = Worksheets("Client").Range("B13")
    WordDoc.Bookmarks("Conseiller2").Range = Worksheets("Client").Range("B13")

    WordDoc.Bookmarks("Date_étude3").Range = Worksheets("Client").Range("B8")

    WordDoc.Bookmarks("date_bilan").Range = Worksheets("Sté-Evaluation parts sociales").Range("B6")
    WordDoc.Bookmarks("date_bilan2").Range = Worksheets("Sté-Evaluation parts sociales").Range("B6")

    WordDoc.Bookmarks("Autres_elements_fd").Range = Worksheets("Sté-Evaluation parts sociales").Range("C7") + Worksheets("Sté-Evaluation parts sociales").Range("C9")
    WordDoc.Bookmarks("valo_actif_circulant").Range = Worksheets("Sté-Evaluation parts sociales").Range("C28")
    WordDoc.Bookmarks("valo_dettes").Range = Worksheets("Sté-Evaluation parts sociales").Range("F28")
    WordDoc.Bookmarks("valo_fonds").Range = Worksheets("Sté-Evaluation parts sociales").Range("B6")
    WordDoc.Bookmarks("valo_immo_global").Range = Worksheets("Sté-Evaluation parts sociales").Range("C13")
    WordDoc.Bookmarks("valo_immo_materiel").Range = Worksheets("Sté-Evaluation parts sociales").Range("C8")

    WordDoc.Application.ActiveDocument.SaveAs (ndf)
    WordApp.Visible = True  ' ou bien => WordApp.Application.Quit

    Set Rng = Nothing
    Set WordDoc = Nothing
    Set WordApp = Nothing

    MsgBox "Document Word généré!"
    Exit Sub

errhdlr:
    WordDoc.Application.ActiveDocument.SaveAs (ndf)
    MsgBox "Buggued"
    Set Rng = Nothing
    Set WordDoc = Nothing
    Set WordApp = Nothing
    Debug.Print Err.Description
End Sub

J'ai des erreurs d'incompatibilité de type.

Le plus surprenant c'est que par exemple pour cette ligne là :

WordDoc.Bookmarks("valo_méthode_comparative").Range = Worksheets("Méthodes d'évaluation").Range("D59")

Si je remplace D59 par D60 ça fonctionne, alors que les deux cellules existent bien.

Autre question, quand j'ai une erreur sur mon code ma trame est compromise, quand j'essaie de l'ouvrir ce n'est possible qu'en lecture seule. Je suis obligé à chaque fois de créer une copie. Auriez vous une solution pour ça ?

Bonjour,

Pourquoi essaies-tu de remplir 2 fois le même signet à plusieurs reprises ?

À quoi te servent tes array ?

Bonjour.
Effectivement à plusieurs endroits j’essaie de modifier le même signer ce qui cause un bug. C’est corrigé.

Pour mon problème de D59 qui ne fonctionne pas alors que D60 oui, j’ai ajouté.Text au après le range et ça fonctionne.

Les array probablement à rien, c’est un code que j’ai construit à partir d’autres codes pour arriver là ou je voulais. J’ai sans doute laisser des choses inutiles.

Mon code fonctionne maintenant. Mais je n’ai pas de solution pour ne pas corrompre ma trame en cas d’erreur.

Il me semblait aussi qu'enlever les répétitions devait suffire.

Je ne comprends pas ce que tu entends par ne pas corrompre la trame en cas d'erreur.

Bonjour,

Le code ouvre la trame et change tous les signets au fur et à mesure, mais sur la trame. A la fin du code j'enregistre sous un autre nom pour pouvoir ne pas écraser la trame. Mon problème c'est que si ça bug ça saute l'enregistrement et donc les signets restent changés dans la trame (même sans enregistrer). Quand j'ouvre la trame à part ça me propose de l'ouvrir en lecture seule. Et donc ma macro quand elle veut reprendre la trame pour un nouvel essai ça ne fonctionne plus. Je suis obliger de créer une copie de la trame.

Ce bug peut arriver quand la trame est déjà ouverte quand je lance la macro. Il faudrait que si le word est ouvert qu'il le ferme, ou je ne sais pas trop.

Bonjour,

Ah, je vois. Au lieu de travailler avec un fichier word normal, tu peux déjà créer un modèle (enregistrer sous, puis choisir modèle word dans la liste des formats). Ainsi, tu ouvriras une copie de ce fichier et ne modifieras pas ta base.

Il y a aussi effectivement moyen de vérifier si le fichier est ouvert ou non.

Bonjour,

Je ne connaissais pas la technique des modèles je vais creuser ça, merci.

Est ce qu'il est possible que le word suive l'excel ? Je dois diffuser l'outil, et pour le moment je dois modifier chez tout le monde le code pour mettre l'adresse de la trame pour bien aller chercher le fichier. Je vais changer mon code de tel sorte que je si le word et l'excel sont dans le même dossier il n'y ait pas de modif à faire mais est ce que je peux faire mieux que ça ?

Je ne pense pas que les modèles soient enregistrer dans le document mais plutôt sur le logiciel et que donc il faut toujours envoyer l'excel et le word ?

J'ai pensé aussi à écrire la trame directement dans vba pour non pas partir d'une trame mais créer le word directement via l'excel. Le problème étant que ça alourdirait le code, en plus taff que ça représente de tout mettre dans vba.

Rechercher des sujets similaires à "signet word"