Bonjour, je me décide à poster ceci après avoir perdu beaucoup de temps à trouver des informations concises et fiables sur le problème suivant : Comment modifier un signet dans un document Word depuis un classeur Excel.

Ci-dessous 3 méthodes testées (et vérifiées) avec en commentaire l'inconvénient éventuel. Le but de l'opération, dans cet exemple, est de modifier le contenu du signet d'un document Word nommé "sgDestNom" en lui ajoutant la date (ou le contenu d'une cellule du document Excel contenant le code, pourquoi pas...). Si vous testez ce code, veillez à créer d'abord un document Word avec un signet correctement nommé ET contenant une plage de caractères.

Méthode 1
Public Sub fWordTest()
'=== Avec cette méthode, le contenu du fichier est bien modifié
'=== MAIS le signet disparait de la liste des signets du document

Dim objW As New Word.Application
Dim objWDoc As Word.Document
pRepertoire = ActiveWorkbook.Path
pFichier = "Copie Doc. test.docm"
tDate = CStr(Date)
Set objWDoc = objW.Documents.Open(pRepertoire & "\" & pFichier)
t1 = objWDoc.Bookmarks("sgDestNom").Range.Text
objWDoc.Bookmarks("sgDestNom").Range.Text = t1 & " " & tDate
objWDoc.Close SaveChanges:=True
objW.Quit
End Sub
Méthode 2
Public Sub fWordTest_1()
'=== Avec cette méthode, le contenu du fichier est bien modifié
'=== ET le signet ne disparait pas de la liste des signets du document
'=== MAIS la longueur du signet n'est pas celle du texte final modifié

Dim objW As New Word.Application
Dim objWDoc As Word.Document
Dim objWBk As Word.bookmark
Dim objWRg As Word.Range
pRepertoire = ActiveWorkbook.Path
pFichier = "Copie Doc. test.docm"
tDate = CStr(Date)
Set objWDoc = objW.Documents.Open(pRepertoire & "\" & pFichier)
Set objWBk = objWDoc.Bookmarks("sgDestNom")
Set objWRg = objWBk.Range
BkNom = objWBk.Name
objWBk.Range.Text = objWBk.Range.Text & " " & tDate
objWBk.Range.Select
objWDoc.Bookmarks.Add Name:=BkNom, Range:=objWRg
objWDoc.Close SaveChanges:=True
objW.Quit
End Sub
Méthode 3
Public Sub fWordTest_2()
'=== Avec cette méthode, le contenu du fichier est bien modifié
'=== ET le signet ne disparait pas de la liste des signets du document
'=== ET la longueur du signet est celle du texte final modifié

Dim objW As New Word.Application
Dim objWDoc As Word.Document
Dim objWBk As Word.bookmark
Dim objWRg As Word.Range
pRepertoire = ActiveWorkbook.Path
pFichier = "Copie Doc. test.docm"
tDate = CStr(Date)
Set objWDoc = objW.Documents.Open(pRepertoire & "\" & pFichier)
Set objWBk = objWDoc.Bookmarks("sgDestNom")
BkNom = objWBk.Name
objWBk.Select
objW.Selection = objWBk.Range.Text & " " & tDate
objWDoc.Bookmarks.Add Name:=BkNom, Range:=objW.Selection
objWDoc.Close SaveChanges:=True
objW.Quit
End Sub

La méthode 3 est la méthode finalisée que je recherchais. Notez qu'également il ne reste aucune trace en mémoire de l'objet Word "temporaire" utilisé.

En espérant que ceci sera utile a beaucoup de personnes