Bonjour,
J'utilise VBA depuis peu. Je dois compiler plusieurs fichiers Word qui contiennent un tableau, dans un même fichier excel. Après quelques recherches, j'ai trouvé une programmation qui semble bien marcher pour toutes les cellules qui contiennent des contrôles de formulaire (merci à son auteur). Cependant, dans le tableau word, il y a des cellules qui ne contiennent que du texte et n'apparaissent pas dans mon fichier excel. J'ai fais plusieurs essais mais sans succès. Comment faire pour exporter le contenu de toutes les cellules et ce, peu importe leur format?
Merci à l'avance
Voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93 'The complete VBA code to transfer data from Word forms into Excel: Sub getWordFormData() ' définir quelques variables Dim wdApp As New Word.Application Dim myDoc As Word.Document Dim FmFld As Word.FormField 'Dim CCtl As Word.ContentControls Dim myFolder As String, strFile As String Dim myWkSht As Worksheet, i As Long, j As Long ' i pour une procédure en loop ' donner le chemin d'accès du dossier ou ce trouve les documents word myFolder = "D:\Route et PM en vigueur\Changement huile test" Application.ScreenUpdating = False 'pour fermer la macro si le dossier est vide If myFolder = "" Then Exit Sub Set myWkSht = ActiveSheet 'effacer les données de la feuille, pour éviter d'avoir des doublons 'ActiveSheet.Cells.Clear 'inscrire les cellules et textes que l'on veux pour titre de colonnes Range("B1") = "No tâche" Range("B1").Font.Bold = True Range("C1") = "No équipement" Range("C1").Font.Bold = True Range("D1") = "No moteur" Range("D1").Font.Bold = True Range("E1") = "Titre" Range("E1").Font.Bold = True Range("F1") = "Emplacement" Range("F1").Font.Bold = True Range("G1") = "Secteur" Range("G1").Font.Bold = True Range("H1") = "fréquence" Range("H1").Font.Bold = True Range("I1") = "PM" Range("I1").Font.Bold = True Range("J1") = "Pd" Range("J1").Font.Bold = True Range("K1") = "MD" Range("K1").Font.Bold = True Range("L1") = "PCE" Range("L1").Font.Bold = True Range("M1") = "Route" Range("M1").Font.Bold = True Range("N1") = "Arret" Range("N1").Font.Bold = True Range("O1") = "Marche" Range("O1").Font.Bold = True Range("P1") = "Mecanique" Range("P1").Font.Bold = True Range("Q1") = "Menuisier" Range("Q1").Font.Bold = True Range("R1") = "Électro" Range("R1").Font.Bold = True Range("S1") = "Opérateur" Range("S1").Font.Bold = True Range("T1") = "Estimation" Range("T1").Font.Bold = True 'ca demande de compter le nb de ligne et colonne et de changer de ligne une fois la dernière colonne rempli i = myWkSht.Cells(myWkSht.Rows.Count, 2).End(xlUp).Row 'pour prendre tous les documents word dans le dossier strFile = Dir(myFolder & "\*.doc", vbNormal) 'une loop pour avoir toutes les données de tous les fichiers While strFile <> "" i = i + 1 Set myDoc = wdApp.Documents.Open(Filename:=myFolder & "\" & strFile, AddToRecentFiles:=False, Visible:=False) With myDoc j = 4 'pour dire de prendre tous les controles dans le fichier ContentControls For Each FmFld In .FormFields 'mets la valeur en colonne en débutant a celle spécifié par j= " " ici c'est 4 pour la 4eme colonne j = j + 1 myWkSht.Cells(i, j) = FmFld.Result Next 'pour que les colonnes s'ajuste au texte myWkSht.Columns.AutoFit End With 'pour fermer le fichier et sans faire de sauvegarde myDoc.Close SaveChanges:=False strFile = Dir() Wend 'pour fermer l'application word et purger les mémoires (vider presse papier) wdApp.Quit Set myDoc = Nothing: Set wdApp = Nothing: Set myWkSht = Nothing Application.ScreenUpdating = True End Sub






Répondre avec citation
Partager