VBA - Importer champs Word dans Excel [Résolu]

Signaler
Messages postés
32898
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 juin 2021
-
Messages postés
32898
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 juin 2021
-
Bonjour,

J'ai besoin de récuperer un certain nombre de champs d'un document Word dans Excel.

Pour l'instant j'ai ceci :

Sub ExtractionDonneesDansChampWord()
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    
    'ouvre session word
    Set WordApp = New Word.Application
    'ouvre document Word
    Set WordDoc = WordApp.Documents.Open("D:\mondocument.doc")
    'word est masqué pendant l'opération
    WordApp.Visible = False
    
    'Récupère le contenu d'un champ
    'Fields(1) : premier champ du document Word
    
    For i = 1 To WordDoc.Fields.Count
  
        If WordDoc.Fields(i).Result <> "" Then
            Debug.Print "I" & i & "> " & WordDoc.Fields(i).Result.Text
        End If
    Next
    'Ferme le document word
    WordDoc.Close False
    'ferme la session Word
    WordApp.Quit
End Sub



Le souci est que je n'arrive pas a lire les champs de type liste ou case à cocher.

Auriez vous une idée ?

Par avance merci.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI

1 réponse

Messages postés
32898
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 juin 2021
350
Bonjour,

Après quelques recherches plus poussées j'ai fini par trouver...;

Voici donc mon code "final" qui me permet de lire les champs (tous les champs) d'un document word depuis le VBA d'excel :

Sub ExtractionDonneesDansChampWord()
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim Valeur As Variant
    
    'ouvre session word
    Set WordApp = New Word.Application
    'ouvre document Word
    Set WordDoc = WordApp.Documents.Open("D:\MonDocument.doc")
    'word est masqué pendant l'opération
    WordApp.Visible = False
    
    'Récupère le contenu d'un champ
    'Fields(1) : premier champ du document Word
    
    For i = 1 To WordDoc.Fields.Count
        'recupération de la valeur du champ en fonction de son type
        TYP = WordDoc.Fields(i).Code
        Select Case TYP
            Case " FORMTEXT "
                Valeur = WordDoc.Fields(i).Result.Text
            Case " FORMDROPDOWN "
                Valeur = WordDoc.FormFields(i).DropDown.ListEntries(WordDoc.FormFields(i).DropDown.Value).Name
            Case " FORMCHECKBOX "
                On Error Resume Next
                Valeur = WordDoc.FormFields(i).CheckBox.Value
            Case Else
                Valeur = "Type Inconnu : " & TYP
        End Select
        
    'Affichage dans le debugeur
    Debug.Print "I" & i & " code: " & WordDoc.Fields(i).Code & "> " & Valeur
                 
     Next
    'Ferme le document word
    WordDoc.Close False
    'ferme la session Word
    WordApp.Quit
End Sub


Explications :
En fait, il a fallu que je décompose mon code en fonction du TYPE de champ utilisé : Champ TEXTE, CHECKBOX, Liste déroulante (DROPDOWN).

Je parcours donc le document, récupère le type de champ (avec la propriété CODE) puis en fonction du code j'en lis le contenu (chacun ayant une méthode déifférente pour obtenir sa valeur)...


En espérant que cela puisse vous servir...
Et merci à ceux qui auraient pris le temps de chercher à m'aider.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI