J'ai un tableau qui s'étend sur plusieurs pages et je souhaite savoir si certaines cellules ne sont pas renseignées. Comment faire cette vérification par macro ?

Ce qu'il faut savoir, c'est qu'une cellule vide est composée d'une marque de paragraphe codé en VBA par Chr(13) suivie par le caractère ANSI (7) codé en VBA par Chr(7). Quand on sait ça, il suffit d'analyser chaque cellule du tableau avec une boucle, afin de trouver celles qui contiennent ces deux caractères.

Comment on sait que ce sont ces deux caractères ?

Effectivement, ce n'est pas évident car c'est invisible. Voici une macro qui affiche dans la fenêtre Exécution le contenu de la première cellule d'un tableau qu'on a volontairement laissée vide :

Sub cellule()
For Each caract In ActiveDocument.Tables(1).Rows(1).Cells(1).Range.Characters
Debug.Print caract
Next
End Sub
 

Il suffit ensuite de faire l'inverse, c'est-à-dire de copier coller ce qu'on a récupéré dans la fenêtre exécution dans un document vide et de lancer la macro :

 Sub caract()
MsgBox ActiveDocument.Range.Characters.Count
For Each caract In ActiveDocument.Range.Characters
MsgBox Asc(caract)
Next
End Sub

Cette macro nous donne le codage Chr(13) et Chr(7) que nous allons réutiliser dans la macro suivante pour savoir quelles cellules sont restées vides dans ce grand tableau :

Sub cellules_vides()
Dim cellule As Cell, ligne As Row
For Each ligne In ActiveDocument.Tables(1).Rows
For Each cellule In ligne.Cells
If cellule.Range.Text = Chr(13& Chr(7Then
MsgBox "la cellule ligne " & cellule.RowIndex & ", colonne " & cellule.ColumnIndex & ", est vide."
End If
Next
Next ligne
End Sub

Et donc, on peut simplifier cette macro puisqu'en réalité il suffit de tester si la cellule contient uniquement 2 caractères :

Sub cellules_vides()
Dim cellule As Cell, ligne As Row
For Each ligne In ActiveDocument.Tables(1).Rows
For Each cellule In ligne.Cells
If Len(cellule.Range.Text) = 2 Then
MsgBox "la cellule (ligne " & cellule.RowIndex & ", colonne " & cellule.ColumnIndex & "), est vide."
End If
Next
Next ligne
End Sub