Lire le contenu d'un signet dans un document word

Résolu/Fermé
Melancolie2010_2015 Messages postés 24 Date d'inscription jeudi 18 mars 2021 Statut Membre Dernière intervention 3 mars 2022 - 4 mai 2021 à 12:08
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 - 6 mai 2021 à 17:09
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

Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 928
4 mai 2021 à 12:15
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

0
Melancolie2010_2015 Messages postés 24 Date d'inscription jeudi 18 mars 2021 Statut Membre Dernière intervention 3 mars 2022 1
4 mai 2021 à 12:53
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.
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 928
4 mai 2021 à 17:50
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
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 928
4 mai 2021 à 17:50
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
0
Melancolie2010_2015 Messages postés 24 Date d'inscription jeudi 18 mars 2021 Statut Membre Dernière intervention 3 mars 2022 1
6 mai 2021 à 16:38
Merci Whismeril
Tout marche à merveille après quelques aménagements
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 928
6 mai 2021 à 17:09
Tant mieux
0