Macro - Récupérer champs dans tables Word
Bonjour à tous,
J'aurai besoin de petit coup de pouce pour un problème qui jusqu'alors est resté insoluble pour moi.
Je m'explique: j'ai créée un document Word "standart" constitué de plusieurs tables à l'intérieur desquelles il y a soit des champs de type liste déroulante soit des champs texte.
Mon objectif est de récupérer une partie des informations contenues dans ces tables: toutes les valeurs choisies dans les listes déroulantes et une partie des champs texte. (et ce pour 70 documents en gros)
Pour le moment, j'utilise cette macro basique et pas très pratique pour ce que je souhaite faire (les copier coller sur excel me font une mise en page pas terrible et je ne sais pas a priori combien de copier coller je vais devoir faire) :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Sub Macro1()
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Set WordApp = CreateObject("word.application")
WordApp.Visible = False
Set WordDoc = WordApp.Documents.Open("Mondocument")
WordDoc.Tables().Rows().Cells().Range.Copy
Range("").PasteSpecial xlPasteValues
WordDoc.Close
WordApp.Quit
End Sub |
J'ai donc cherché à faire une macro plus "évoluée" et surtout plus adaptée mais pour le moment le résultat n'est pas concluant, j'aurai donc aimé savoir ce qui ne fonctionne pas dans ce code dont je me suis inspiré et que j'ai cherché à adapter à mon usage:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| Sub ImportWord()
Dim Wd As Word.Application
Dim filename As String
Dim i As Byte
'On affiche la boite de dialogue pour sélectionner le fichier
filename = Application.GetOpenFilename("Fichier Word (*.docx*),*.docx*", 1, "Sélectionnez un document Word", "Ouvrir", False)
'On vérifie qu'un fichier a été sélectionné
If filename <> "" Then
filename = LCase(filename)
'et qu'il s'agit d'un document word
If Right(filename, 3) = "doc" Or Right(filename, 4) = "docx" Then
'Créer une instance de word
Set Wd = New Word.Application
With Wd
'Empêche Word de s'afficher à l'ouverture
.Visible = False
'Ouverture du document
.Documents.Open (filename)
'Dévérouillage du document
ActiveDocument.Protect Type:=wdNoProtection
'Parcours de tous les champs de toutes les tables word du document
Dim Tbl As Table
Dim f As Field
For Each Tbl In ActiveDocument.Tables
For Each f In ActiveDocument.Fields
'Nom du champs
Cells(1, f.Index).Value = .ActiveDocument.FormFields(f.Index).Name
'Valeur du champs si case à cocher
If f.Type = 71 Then
Cells(2, f.Index).Value = .ActiveDocument.FormFields(f.Index).CheckBox.Value
Else 'autres champs
Cells(2, f.Index).Value = f.Result.Text
End If
Next f
Next Tbl
'Ferme le document Word
.Quit False
End With
'Destruction de l'objet word
Set Wd = Nothing
End If
End If
End Sub |