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
17483
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
- 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
17483
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
837
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

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
17483
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
837
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
17483
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
837
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

6 mai 2021 à 16:38
Merci Whismeril
Tout marche à merveille après quelques aménagements
0
Whismeril
Messages postés
17483
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
837
6 mai 2021 à 17:09
Tant mieux
0