Modifier le texte d'un signet word via Excel
Bonjour à tous,
Normalement je trouve toujours mes réponses en cherchant sur internet mais là je me suis inscrits et sollicite votre aide car je suis bloqué depuis quelques jours.
Je dois réaliser un outil sous Excel pour mon entreprise: générer des documents Word à partir des informations saisies dans Excel. Ex: nom client, coordonnées, version du document, etc. Les employés saisissent seulement les informations dans les cellules, puis cliquent sur un bouton pour générer le document. La macro va chercher le document Word modèle et les informations sont reportées directement vers des signets:
Code:
WordDoc.Bookmarks("date1").Range.Text = Sheets("Informaciones generales").Range("C12").Value
Je ne peux pas faire du publipostage puisque les documents sont différents selon les clients.
Jusque ici tout va bien, sauf que les documents évoluent. Ainsi ma macro va en permanence rechercher le dernier document Word créé. Sauf que lors de l'actualisation (ex: numéro de version changée), je me retrouve avec toutes les informations en double au niveau des signets. C'est à dire que le texte n'est pas modifié mais ajouté à droite du texte de l'ancienne version.
Après recherche il serait plus facile de passer par des champs:
Code:
WordDoc.Fields("date1").Result.Text = "valeur a reporter"
Sauf que je ne sais pas comment définir ce fameux "Fields" dans Word. Je sais que c'est un champ, ctrl+F9, mais je ne sais pas quoi mettre dedans.
J'ai également trouvé cette formule qui me renvoie des erreurs:
Code:
1 2 3 4 5 6
| Dim objRange As Range
Set objRange = ActiveDocument.Bookmarks.Item("date1").Range
objRange.Text = Sheets("Informaciones generales").Range("C12").Value
ActiveDocument.Bookmarks("date1").Range.Select
Selection.Text = Sheets("Informaciones generales").Range("C12").Value
objRange.Bookmarks.Add "date1" |
J'espère que j'ai été clair et que vous pourrez m'aider.
Merci d'avance
Macro fonctionnant 1 fois sur 2
Bonjour,
Je ne comprends rien car j'ai une macro qui ne fonctionne qu'une fois sur deux. Les codes me paraissent corrects.
Je change la valeur de la cellule "C12" par exemple, lance la macro test(), le document word s'ouvre, et j'ai une erreur '462' au niveau de la ligne en vert.
Je debug, ferme le document word, relance la macro Test(), et cela marche, le signet dans Word est bien modifié.
Code:
1 2 3 4 5 6 7 8 9
| Public Sub RemplirSignet(S As String, T As String)
Dim Place As Long
Place = ActiveDocument.Bookmarks(S).Range.Start
ActiveDocument.Bookmarks(S).Range.Text = T
ActiveDocument.Bookmarks.Add Name:=S, _
Range:=ActiveDocument.Range(Place, Place + Len(T))
End Sub |
Code:
1 2 3 4 5 6 7 8 9 10
| Sub test()
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Set WordApp = CreateObject("word.application")
Set WordDoc = WordApp.Documents.Open("C:\\\.docx") 'ouvre document Word
WordApp.Visible = True
RemplirSignet "date1", Sheets("Informaciones generales").Range("C12").Value
RemplirSignet "nombre_proyecto", Sheets("Informaciones generales").Range("C3").Value
End Sub |
Donc si quelqu'un voit une erreur dans le code car je n'y comprends rien. :?
Car la macro fonctionne vraiment 1 fois sur 2, j'ai testé une 20 de fois à la suite....
Merci