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

jordane45 20570 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 21 avril 2018 Dernière intervention - 27 août 2010 à 11:32 - Dernière réponse : jordane45 20570 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 21 avril 2018 Dernière intervention
- 27 août 2010 à 14:19
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
Afficher la suite 

1 réponse

Répondre au sujet
jordane45 20570 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 21 avril 2018 Dernière intervention - 27 août 2010 à 14:19
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.