Bonjour à toutes et tous,
Lorsque je regarde dans les différents newsgroup, blogs, forums, etc ...
C'est très compliqués de parcourir les tableaux Word (surtout si les cellules sont fusionnées).
Cela fait une semaine que je travaille dessus. et j'aimerais partager mon travail (pour ne pas réinventer la roue).
Pour ceux que cela intéresse :
J'ai crées un procédure qui retourne un tableau ayant le même nombre de rangée et de colonnes ainsi qu'un autre petit tableau qui retourne uniquement le nombre de ligne et de colonne.
Remarques importantes:
Vu qu'il n'existe pas d'instructions pour savoir si une cellule est fusionnée ou non, il faut donc traiter les erreurs.
Exemple:
Observez le tableau en haut à gauche. toutes les cellules en bleu sont fusionnées.
Le tableau juste en-dessous, c'est le résultat de la procédure écrite ci-dessous.
Là ou vous voyez un '1', la cellule est accessible. Un '0' non.
Attention, Je mets que la cellule est "accessible".
Cela ne veut pas dire que le contenu au coordonnée : rangée / colonne correspond au réelle coordonnée "vue à l'écran".
Pour preuve. Voyez le contenu du tableau en haut à droite. C'est le contenu du tableau en "mémoire".
La où les cellules sont bleues, se sont les données. le blanc, "rien n'existe".
Lorsque vous fusionnez deux cellules horizontalement, le système déplace toutes les cellules de droite, d'un cran sur la gauche.
Donc: pour la ligne "Teste ligne 13", vous voyez que "toto" est directement suivi de "Y" et la 5ème colonne à disparue. Elle n'existe pas!
Pour l'utiliser
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 Sub tableControl(tbl As Word.Table, tblResult As Variant, rec As Variant) ' tbl : tableau à contrôler ' tblResult : table ayant le même nombre de ligne et de colonne que le tableau ayant les valeurs suivantes: ' 0 : La cellule à la coordonnée rangée, colonne est innacessible ' 1 : La cellule à la coordonnée rangée, colonne est acessible ' Remarque importante: Si des cellules sont fusionnées horizontalement, les cellules suivantes sont shiftées vers la gauche ' ' rec : tableau contenant 2 valeurs ' rec(1,1) = nombre de ligne ' rec(1,2) = nombre de colonne ' -------------------------------------------------------------------------------------------------------------------------------------- Dim tCell As Word.cell Dim tableau() As Variant Dim data() As Variant Dim MaxCl As Integer Dim MaxRw As Integer On Error GoTo ErrHandler MaxCl = tbl.Columns.Count MaxRw = tbl.Rows.Count ReDim tableau(MaxRw, MaxCl) ReDim data(1, 2) data(1, 1) = MaxRw data(1, 2) = MaxCl For rw = 1 To MaxRw GoSub colonne Next rw Sortie: tblResult = tableau rec = data Exit Sub ErrHandler: Select Case Err Case 5941 tableau(rw, cl) = 0 Resume nxtColonne Case Else MsgBox "Error " & Err.Number & ": " & Err.Description Resume Sortie End Select colonne: For cl = 1 To MaxCl Set tCell = tbl.cell(rw, cl) tableau(rw, cl) = 1 nxtColonne: Next cl Return End SubN'hésitez pas à demander si vous avez des questions
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 Sub test() Dim nomfichier As String ' Nom du fichier Word à traiter Dim wordRange As Range ' Word.Range Dim PrevRow As Row ' Nombre de ligne dans le nouveau tableau AVANT l'ajout Dim NewRow As Row ' Nombre de ligne dans le nouveau tableau APRES l'ajout Dim t As Integer ' nombre de tableau dans le document Word Dim tr As Integer ' nombre de ligne dans le tableau en cours de traitement Dim tc As Integer ' nombre de colonne dans le tableau en cours de traitement Dim tCell As String ' Contenu de la cellule(tr,tc) du tableau en cours de traitement Dim nCell As String ' Nouveau contenu de la cellule(tr,tc) du tableau en cours de traitement Dim rwdst As Integer ' numéro de ligne dans le nouveau tableau où sera écrit les valeurs Dim ct As Integer ' numéro utilisé pour le compteur Dim nbCol As Integer ' Problème des cellules mergée Dim cl As Integer Dim ControlChar As String ' Caractères de contrôle Dim tblChck As Variant ' tableau contenant l'état des cellules du tableau: ' 0 : cellule innaccessible ' 1 : cellule accessible ' Attention: si des cellules sont fusionnées horizontalement, toutes les cellules suivantes ' sont shiftées sur la gauche. ' ----------------------------------------------------------------------------------------- Set wordDoc = ActiveDocument wordDoc.ActiveWindow.View.Type = wdNormalView tc = wordDoc.Tables.Count ' Nombre de tableau dans le document If tc > 0 Then For t = 1 To tc Call tableControl(tableau, tblChck, rec) For tr = 1 To rec(1, 1) ' nbre de ligne ' Placez votre traitement ici Next tr next t End if End Sub
Andre
Partager