Option Explicit
Sub ParcourirParagraphesTabMultiLignes()
Dim wdWapp As Object ' .......................................................................................... Application Word
Dim wdDoc As Document ' ......................................................................................... Le document word en cours d'analyse
Dim wdParagraphe As Paragraph ' ................................................................................. Chaque paragraphe du document Word en cours
' Compteur
Dim wdNbParagph As Long ' ....................................................................................... le numéro du paragraphe en cours
Dim wdNbLignesParagph As Long ' ................................................................................. le nombre de lignes de chaque paragraphe
Dim wdLigneIndex As Long ' ...................................................................................... l'index de la ligne en cours du paragraphe
Dim wdTexteLigne As String ' .................................................................................... Texte de la ligne
Dim wdWin As Long: wdWin = 1 ' .................................................................................. Numéro de la fenêtre Word (dans ce cas, la première fenêtre)
Dim wdNoPage As Long: wdNoPage = 1 ' ............................................................................ Numéro de la page Word (dans ce cas, la première page)
' Les tableaux
Dim wdTbl As Table ' ............................................................................................ Variable pour stocker une référence à un tableau dans le document Word
Dim wdCel As Cell ' ............................................................................................. Variable pour stocker une référence à une cellule dans un tableau dans le document Word
Set wdWapp = CreateObject("Word.Application") ' Créer une instance de l'application Word
wdWapp.Visible = True ' .................................................................................. Rendre l'application Word visible (facultatif)
' Ouvrir le document spécifié
Set wdDoc = wdWapp.Documents.Open("E:\00_17-04-2024\Module VBA - PDF to Word_2024-04-17\" _
& "Pour_Test_Images_Tableaux_Paragraphes Simple et MultilignesFacture.docx")
wdDoc.Range(0, 0).Select ' .................................................................................. Déplacer la sélection au début du document
' Parcourir chaque paragraphe dans le document
For Each wdParagraphe In wdDoc.Paragraphs
wdNbParagph = wdNbParagph + 1 ' ............................................................................. Vérifier si le paragraphe n'est pas vide
If Len(wdParagraphe.Range.Text) > 1 Then
' Si le paragraphe est dans un tableau Alors :
If wdParagraphe.Range.Information(wdWithInTable) Then
If wdParagraphe.Range.Cells.Count > 0 Then
Set wdTbl = wdParagraphe.Range.Tables.Item(1) ' ............................................. Obtenir le tableau
Set wdCel = wdParagraphe.Range.Cells(1) ' ............................................... Obtenir la première cellule
If wdCel.RowIndex = 1 And wdCel.ColumnIndex = 1 Then
'Debug.Print wdTbl.Cell(wdCel.RowIndex, wdCel.ColumnIndex).Range.Text ' ......... Afficher le texte de la cellule (du Tableau en cour)
wdTbl.Cell(wdCel.RowIndex, wdCel.ColumnIndex).Range.Select ' ........ Sélectionner le contenu de la cellule (du Tableau en cour)
' Comme le curseur est actuellement dans la premiére cellule du tableau
wdTbl.Select ' ...................................................... Sélectionne le premier tableau trouvé
' Bonus : debug.print de tableau à 2 dimensions
Dim Tb2d() As Variant
' Redimensionnez la variable tableau 2D en fonction de la taille du tableau Word
Dim regEx As Object
Set regEx = CreateObject("VBScript.RegExp")
regEx.Global = True
regEx.IgnoreCase = True
regEx.Pattern = "[\n\r\f\v]" ' Motif pour trouver les retours à la ligne, les retours chariot, etc.
ReDim Tb2d(1 To wdTbl.Rows.Count, 1 To wdTbl.Columns.Count)
Dim ligne As Long
Dim colonne As Long
Dim n As Variant
Dim maligne As String
' Boucle à travers chaque cellule du tableau Word et copiez-la dans la variable tableau 2D
For ligne = 1 To wdTbl.Rows.Count
maligne = ""
For colonne = 1 To wdTbl.Columns.Count
Tb2d(ligne, colonne) = regEx.Replace(wdTbl.Cell(ligne, colonne).Range.Text, "") ' Supprime les retours à la ligne
'maligne = maligne & Tb2d(ligne, colonne) & " "
maligne = maligne & Tb2d(ligne, colonne) & vbTab ' Ajoutez le contenu de la cellule avec un séparateur de tabulation
Next colonne
Debug.Print Left(maligne, Len(maligne) - 1)
Next ligne
ligne = Empty: colonne = Empty: n = Empty: maligne = Empty
' Non Utilisé ici.
' Car le tableau doit être selectionné qu'une seule fois dans la boucle (PARAGRAPHE !)
' Else
'vDebug.Print wdTbl.Cell(wdCel.RowIndex, wdCel.ColumnIndex).Range.Text ' ........ Afficher le texte de la cellule suivante (du Tableau en cour)
' wdTbl.Cell(wdCel.RowIndex, wdCel.ColumnIndex).Range.Select ' ....... Sélectionner le contenu de la cellule suivante (du Tableau en cour)
End If
End If
Else
' Si le Paragraphe n'est pas dans un tableau Alors :
wdNbLignesParagph = wdParagraphe.Range.ComputeStatistics(wdStatisticLines) ' ........................ Obtenir le nombre de lignes du paragraphe
If wdNbLignesParagph = 1 Then ' ................................................................. Si le paragraphe a une seule ligne
' Si le Paragraphe a une seule ligne Alors : ................................................ Sélectionner la ligne en cours
wdTexteLigne = wdParagraphe.Range.Text ' ................................................ Récupérer le texte de la ligne
Debug.Print wdTexteLigne ' .............................................................. Afficher le texte de la ligne dans la fenêtre de débogage
wdParagraphe.Range.Select ' ............................................................. Sélectionner la ligne
Else
'Si le Paragraphe comporte plusieurs lignes Alors : Sélectionner la ligne en cours
For wdLigneIndex = 1 To wdNbLignesParagph ' ............................................. Parcourir chaque ligne du paragraphe
Debug.Print wdWapp.Windows(wdWin).ActivePane.Pages(wdNoPage).Rectangles(wdNbParagph) _
.Lines(wdLigneIndex).Range.Text ' ....................................... Afficher le texte de la ligne en cours
wdWapp.Windows(wdWin).ActivePane.Pages(wdNoPage).Rectangles(wdNbParagph) _
.Lines(wdLigneIndex).Range.Select ' ..................................... Sélectionner la ligne
Next wdLigneIndex
End If
End If
End If
Next wdParagraphe
End Sub