Lire le contenu d'un signet dans un document word [Résolu]

Signaler
Messages postés
20
Date d'inscription
jeudi 18 mars 2021
Statut
Membre
Dernière intervention
6 mai 2021
-
Messages postés
15925
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 mai 2021
-
Bonjour,
J'ai un document word qui contient un signet nommé "TitreDoc". J'échoue à récupérer la valeur contenue dans un signet, c'est-à-dire le texte écrit à l'emplacement de ce signet

Le code de connexion à Ms Word:

Dim wrdApp As Microsoft.Office.Interop.Word.Application
Dim wrdDoc As Microsoft.Office.Interop.Word.Document

wrdApp = New Microsoft.Office.Interop.Word.Application
wrdDoc = wrdApp.Documents.Open(CheminDuDocumentWord)

Le code de récupération:
Dim M As String = wrdDoc.Bookmarks("TitreDoc").Range.Text

ou encore
Dim M As String = wrdDoc.Bookmarks(wrdDoc.Bookmarks("TitreDoc").Name).Range.Text

la variable "M" ramène la valeur "Nothing"

Je vous prie de me mettre sur la voie

4 réponses

Messages postés
15925
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 mai 2021
700
Bonjour

Y’a des années que j’ai pas utilisé l’api de word (c’est trop chiant à mon goût, je préfère écrire directement un docx depuis).
A l’époque j’avais posté un exemple qui marchait avec les signets

https://codes-sources.commentcamarche.net/source/51010-piloter-word-via-microsoft-office-interop-word

Messages postés
20
Date d'inscription
jeudi 18 mars 2021
Statut
Membre
Dernière intervention
6 mai 2021

Merci Whismeril
Je retiens ce code pour mes prochains projets.
Dans mon cas maintenant, j'ai des modèles de document word avec des entête et pieds de pages et une zone de signature pour la signature électronique (PKI racine). Sinon, je conviens avec vous que l'API de word n'est pas du tout aisé.
Je retiens dans le cadre de ma discussion qu'il est plus facile d'écrire dans les signets que de lire et récupérer ce qui y est écrit.
Messages postés
15925
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 mai 2021
700
Certes à l'époque je n'avais pas à lire le contenu d'un signet, mais à écrire des infos dans un modèle à l'emplacement de ces signets.

Mais, atteindre le signet, ce que tu fais en une seule ligne
Dim M As String = wrdDoc.Bookmarks("TitreDoc").Range.Text


Je l'avais décomposé en plusieurs, ce qui permettait de voir où ça ne marchait pas.
Public Function AtteindreSignet(ByVal NomSignet As String) As Boolean
    Dim Nom As Object = CObj(NomSignet)
    _MesSignets = _MonDocument.Bookmarks

    If _MesSignets.Exists(NomSignet) Then
        _MonSignet = _MesSignets.get_Item(Nom)
        _MonSignet.Select()
        _MonRange = _MonSignet.Range
        Return True
    Else
        MessageBox.Show(String.Format("Le signet {0} n'existe pas dans le fichier.", NomSignet), "Insertion impossible", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Return False
    End If
End Function


Parce que sur les noms de signets, il m'est arrivé de me faire avoir sur la casse ou un espace par exemple
Messages postés
15925
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 mai 2021
700
PS, pour que le code soit en couleur, il faut faire comme décrit là
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Messages postés
20
Date d'inscription
jeudi 18 mars 2021
Statut
Membre
Dernière intervention
6 mai 2021

Merci Whismeril
Tout marche à merveille après quelques aménagements
Messages postés
15925
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 mai 2021
700
Tant mieux