Lire le contenu d'un signet dans un document word

Résolu
Melancolie2010_2015 Messages postés 24 Statut Membre -  
 Utilisateur anonyme -
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

  1. Utilisateur anonyme
     
    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
    1. Melancolie2010_2015 Messages postés 24 Statut Membre 1
       
      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
  2. Utilisateur anonyme
     
    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
  3. Melancolie2010_2015 Messages postés 24 Statut Membre 1
     
    Merci Whismeril
    Tout marche à merveille après quelques aménagements
    0