Word Mise en forme conditionnelle dans un tableau

CISCO

XLDnaute Barbatruc
Bonjour à tous

Deux petites questions :
1) Est-ce que par un heureux hasard vous auriez une astuce pour griser automatiquement les cellules vides d'un tableau dans Word ?

2) Dans la réalité, ce tableau est rempli par publipostage. Est-ce qu'on peut appliquer la même mise en forme conditionnelle que précédemment (griser uniquement les cellules vides c.-à-d. sans résultat) ?

Merci d'avance.

@ plus
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, salut CISCO

Pas d'astuces simples, mais une macro
VB:
Sub Griser_Vides()
''Macro quand il y a plusieurs tableaux dans le document actif
Dim tablo As Table, c As Cell
For Each tablo In ActiveDocument.Range.Tables
    For Each c In tablo.Range.Cells
        If Len(c.Range.Text) < 3 Then
        c.Range.Shading.BackgroundPatternColor = -603923969
        End If
    Next
Next
End Sub
Sub Griser_Vide_UnTableau()
'Macro quand il y a qu'un seul tableau dans le document actif
Dim c As Cell
For Each c In ActiveDocument.Range.Tables(1).Range.Cells
If Len(c.Range.Text) < 3 Then
c.Range.Shading.BackgroundPatternColor = -603923969
End If
Next
End Sub
 

CISCO

XLDnaute Barbatruc
Bonjour Staple1600

Merci pour cette petite macro. Ca fonctionne nickel. Je me disais bien que c'était faisable avec une macro, mais, vu mon niveau en VBA...

Au passage, pourrais-tu me dire pourquoi tu as mis la ligne If Len(c.Range.Text) < 3 ? Pourquoi 3 ?

@ plus
 

Staple1600

XLDnaute Barbatruc
Re

Parce que dans une cellule vide d'un tableau Word contient semble t'il au moins deux caractères*

*: Il s'agit en fait d'un marqueur de fin de cellule
(constitué de deux caractères Chr(13) & Chr(7))

Fais ce test sur un tableau avec des cellules vides et tu verras
VB:
Sub Test_TableauA()
Dim c As Cell
For Each c In ActiveDocument.Range.Tables(1).Range.Cells
MsgBox Len(c.Range.Text)
Next
End Sub
Ou celui-ci (à tester plutôt sur un petit tableau avec peu de cellules vides ;) )
VB:
Sub Test_TableauB()
Dim c As Cell, Vides$
For Each c In ActiveDocument.Tables(1).Range.Cells
If c.Range.Characters.Count = 1 Then
Vides = Vides & Chr(13) & vbTab & "Cellule: (" & c.Row.Index & "," & c.Column.Index & ")"
End If
Next
MsgBox "Les cellules suivantes:" & Vides & Chr(13) & "sont vides."
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 713
Messages
2 081 806
Membres
101 819
dernier inscrit
lukumubarth