Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Analyser les tableaux du document
Avec cette nouvelle
astuce , nous allons découvrir que le
VBA Word offre des
objets et
propriétés permettant de
parcourir les tableaux d'un document, mais aussi de les manipuler.
Document source
Pour la découverte de cette nouvelle
astuce , nous proposons de récupérer un
document Word gérant les
macros et offrant
quelques tableaux aux structures différentes.
Nous découvrons un document sobre. Il est constitué de trois tableaux vierges. Pour chacun, les nombres de lignes et de colonnes diffèrent.
Deux paragraphes de textes sont intercalés, simplement pour nourrir la présentation.
Procédure et variables
Pour entrer dans le vif du sujet directement, nous proposons de créer la
procédure de code destinée Ã
parcourir ces tableaux . Et pour cela, des
variables sont nécessaires, notamment pour mémoriser les
nombres de tableaux , ainsi que de
lignes et de
colonnes pour chacun.
Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Word ,
Dans l'explorateur de projet sur la gauche, double cliquer sur le dossier Modules ,
Puis, double cliquer sur le module nommé Module1 ,
Ainsi, nous affichons sa
feuille de code au centre de l'écran. Elle est vierge pour l'instant.
Dans cette feuille de code, créer la procédure compteLignes comme suit :
Sub compteLignes()
End Sub
Il s'agit d'un nom simple mais explicite.
...
Dim combien As Byte
Dim i As Byte: Dim L As Byte: Dim C As Byte
Dim nbLignes As Byte: Dim nbColonnes As Byte
...
Toutes ces variables sont déclarées comme des
entiers courts (Byte). La
variable combien doit servir à mémoriser le
nombre de tableaux contenus dans le document. C'est grâce à elle que nous pourrons initier une
boucle pour les parcourir tous. Et c'est la
variable i qui servira de compteur incrémenté dans cette boucle. A l'intérieur de cette
boucle , donc pour
chaque tableau , nous allons prélever les
nombres de lignes et de colonnes , que nous allons stocker temporairement et respectivement dans les
variables nbLignes et nbColonnes . Grâce à elles, nous allons pouvoir enclencher
deux boucles imbriquées pour parcourir chaque ligne de chaque colonne. Et cette fois, ce sont les
variables C et L qui doivent servir de compteurs incrémentés.
Nombre de tableaux dans le document
Tables est un
objet enfant de l'
objet parent ActiveDocument . Il renvoie la
collection des tableaux contenus dans le
document en cours . Cet objet offre naturellement des
propriétés et
méthodes . L'une de ses
propriétés renseigne sur le
nombre de tableaux .
Après les variables, ajouter les lignes VBA suivantes :
...
combien = ActiveDocument.Tables.Count
MsgBox "Le document propose " & combien & " tableaux"
...
C'est donc la
propriété Count de l'
objet Tables qui renvoie la
quantité de tableaux enfermés dans le
document actif . Ensuite, pour tester sa cohérence, nous affichons sa valeur dans une boîte de dialogue grâce à la
fonction MsgBox .
Enregistrer les modifications (CTRL + S),
Puis, exécuter le code VBA Word avec la touche F5 du clavier ,
Une boîte de dialogue apparaît aussitôt en effet. Et comme vous pouvez le voir, elle confirme que le document en cours propose
trois tableaux .
Cette information est bien sûr dynamique. Elle s'ajustera automatiquement si vous ajoutez ou supprimez des tableaux.
Cliquer sur le bouton Ok pour revenir dans l'éditeur VBA ,
Puis, passer la ligne du MsgBox en commentaire en la préfixant d'une apostrophe ('),
Parcourir les tableaux du document
Maintenant, il est question de
passer en revue chacun de ces tableaux. Pour cela, une simple
boucle for , correctement bornée, est nécessaire. Il suffit de partir du premier en initialisant notre
variable i que nous devons faire rejoindre le dernier grâce à notre
variable combien .
A la suite du code, créer la boucle For Next , comme suit :
...
For i = 1 To combien
Next i
...
A chaque passage, la
variable i va subir un
incrément d'une unité pour que le
code VBA puisse porter son attention sur le
prochain tableau , jusqu'Ã avoir atteint le dernier.
Nombres de lignes et de colonnes
Désormais, à l'intérieur de cette
boucle , pour que nous puissions
parcourir les lignes et les colonnes de chaque tableau, nous devons connaître leurs nombres respectifs. La
collection Tables permet aussi de pointer sur un
tableau précis . Pour cela, il suffit de lui passer le numéro ou la
position du tableau dans l'énumération. Et cette position est connue Ã
chaque passage dans la boucle . Elle est renseignée par la
variable i .
Dans la boucle , ajouter les instructions VBA suivantes :
...
nbLignes = ActiveDocument.Tables(i).Rows.Count
nbColonnes = ActiveDocument.Tables(i).Columns.Count
MsgBox "Le tableau " & i & " contient " & nbLignes & " lignes et " & nbColonnes & " colonnes."
...
Nous l'avons dit, l'
objet Tables offre un certain nombre de
propriétés et
méthodes . Les
propriétés Rows et
Columns sont elles aussi des
collections . Elles représentent respectivement les
lignes et les colonnes du tableau en cours d'analyse (Tables(i)). De fait, elles offrent elles aussi des
propriétés . Et c'est donc la
propriété Count qui renseigne sur ces quantités de rangées. Ensuite et à titre de vérification, nous affichons ces informations dans une boîte de dialogue, de nouveau avec la
fonction VBA MsgBox .
Enregistrer les modifications (CTRL + S) et exécuter le code (F5),
Comme vous pouvez l'apprécier, grâce à notre
boucle , tous les tableaux du document sont passés en revue. Il suffit de cliquer sur le bouton Ok des boîtes de dialogue qui se succèdent. Et pour chacun, les nombres de lignes et de colonnes sont parfaitement retournés.
Cliquer sur le bouton Ok de la dernière boîte de dialogue pour revenir dans l'éditeur VBA ,
Puis, préfixer la ligne du MsgBox d'une apostrophe pour la passer en commentaire,
Sa vocation n'était que de réaliser une vérification.
Parcourir les lignes et les colonnes
Maintenant, pour démontrer qu'il est possible de maîtriser les
tableaux d'un document Word dans les moindres détails, nous devons franchir un palier avec une
double boucle , elle-même incrustée dans la première, celle des tableaux. Il est question de
parcourir chaque ligne de chaque colonne et ce, pour
chaque tableau . Et pour démontrer le bon fonctionnement de la technique, nous proposons d'écrire dans
chaque cellule de chaque tableau , avec des informations contextuelles.
Dans la boucle , à la suite du code VBA, créer la double boucle suivante :
...
For C = 1 To nbColonnes
For L = 1 To nbLignes
ActiveDocument.Tables(i).Cell(L, C).Range.Text = "L:" & L & "C:" & C
Application.ScreenRefresh
Next L
Next C
...
Puisque nous sommes embarqués dans la
boucle des tableaux , cette première
nouvelle boucle (For C = 1 To nbColonnes) est destinée Ã
parcourir chaque colonne de chaque tableau . Celle qui lui est imbriquée (For L = 1 To nbLignes) permet alors de
parcourir chaque ligne de
chaque colonne passée en revue pour
chaque tableau . Dès lors, nous pointons sur chaque cellule ainsi parcourue grâce à la propriété Cell de l'
objet Tables . Comme avec l'
objets Cells en
VBA Excel , nous lui passons l'indice de ligne en cours d'analyse (L) ainsi que l'indice de colonne (C). Puis, nous descendons hiérarchiquement jusqu'à sa
propriété Text de manière à y incruster ces informations incrémentées à chaque passage. Enfin, nous exploitons la
méthode ScreenRefresh de l'
objet Application pour rafraîchir l'écran à chaque traitement réalisé par ces boucles. L'objectif est de visualiser l'inscription progressive des données dans
chaque cellule de
chaque tableau .
Enregistrer les modifications (CTRL + S) et basculer sur le document Word (ALT + Tab),
En haut de la fenêtre Word , cliquer sur l'onglet Développeur pour activer son ruban,
Tout à fait à gauche du ruban, cliquer alors que le bouton Macros ,
En bas de la boîte de dialogue qui suit, choisir le document en cours avec la liste déroulante,
Dans la zone centrale, cliquer ensuite sur la macro compteLignes pour la sélectionner,
Puis, cliquer sur le bouton Exécuter pour visualiser le traitement,
Comme vous pouvez l'apprécier visuellement, les
tableaux sont effectivement
passés en revue tour à tour . Et
chaque cellule de
chaque colonne est effectivement remplie des informations numériques contextuelles.
Le
code VBA Word complet que nous avons construit pour
parcourir chaque tableau du document et inscrire des informations dans
chaque cellule , est le suivant :
Sub compteLignes()
Dim combien As Byte
Dim i As Byte: Dim L As Byte: Dim C As Byte
Dim nbLignes As Byte: Dim nbColonnes As Byte
combien = ActiveDocument.Tables.Count
'MsgBox "Le document propose " & combien & " tableaux"
For i = 1 To combien
nbLignes = ActiveDocument.Tables(i).Rows.Count
nbColonnes = ActiveDocument.Tables(i).Columns.Count
'MsgBox "Le tableau " & i & " contient " & nbLignes & " lignes et " & nbColonnes & " colonnes."
For C = 1 To nbColonnes
For L = 1 To nbLignes
ActiveDocument.Tables(i).Cell(L, C).Range.Text = "L:" & L & "C:" & C
Application.ScreenRefresh
Next L
Next C
Next i
End Sub