VBA EXCEL WORD Gérer signet

Signaler
Messages postés
1
Date d'inscription
vendredi 2 mai 2014
Statut
Membre
Dernière intervention
2 mai 2014
-
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 :)