Bonjour,

Je suis (très) novice dans le forum, puisque c'est mon 1er post, bien que je le consulte très régulièrement.

Je suis confronté à un problème lors de la création d'une MFC par VBA :

- j'en ai créé une 1ère, sur un tableau défini par des cellules pouvant varié : pas de problème, j'applique autant de règles que souhaité (5 FormatConditions en tout)
- ensuite, dans la même procédure, je modifie la plage d'application de mon tableau, pour insérer 2 autres MFC, et c'est là que ça coince : la 6ème FormatConditions s'applique à la règle n°1, et la 7ème FormatConditions s'applique à la règle n°2.
En conséquence, mes 2 MFC supplémentaires n'ont pas de mise en forme à appliquer.
Est-ce que quelqu'un a déjà rencontré le cas ?

Merci par avance,



NB. : Pour que ce soit plus clair, je vous joins le code en question :

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Sub MiseEnFormeConditionnelle()
 
'*******   NOTA : Pour une raison mystérieuse et inconnue, la sélection de la cellule active influence sur
'*******   la formule de FORMULA1 ; la solution est donc de rendre la formule "dynamique"... :
 
Dim L As Integer
Dim Tableau As Range
Dim CelluleDébut As Range
Dim CelluleFin As Range
 
Set CelluleDébut = Cells(ActiveSheet.Range("Début_Tableau").Row + 2, 3)    '=> prend en compte les valeurs à partir de la colonne n°3 (=C)
Set CelluleFin = Cells(ActiveSheet.Range("dernière_ligne").Row - 2, 9)     '=> prend en compte les valeurs jusqu'à la colonne n°9 (=I)
Set Tableau = Range(CelluleDébut, CelluleFin)
L = Selection.Row - (CelluleDébut.Row)
 
 
With Tableau
    'Supprime les MFC existantes
    .FormatConditions.Delete
 
'____________________________
    'Ajoute condition 1 : enlève les lignes en dehors du tableau
    .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($D" & 9 + L & "="""";$D" & 10 + L & "="""")"
                                       '=> équivalent à "=ET($D9="""";$D10="""")"  (pour palier le problème lors du changement de sélection courante
 
    With .FormatConditions(1)
        .Borders(xlLeft).LineStyle = xlNone
        .Borders(xlRight).LineStyle = xlNone
        .Borders(xlTop).LineStyle = xlNone
        .Borders(xlBottom).LineStyle = xlNone
        '.Font.ThemeColor = xlThemeColorDark1
    End With
'____________________________
    'Ajoute condition 2 : ferme le bas du tableau / met des lignes horizontales entre tableaux (interlignes vierges entre tableaux)
    .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($D" & 9 + L & "<>"""";$D" & 10 + L & "="""")"
 
    With .FormatConditions(2)
        .Borders(xlBottom).LineStyle = xlContinuous
        '.Font.ThemeColor = xlThemeColorDark1
        .StopIfTrue = False  '=> désactive "Interrompre si vraie"
    End With
'____________________________
    'Ajoute condition 3 : met en forme les titres de chapitres
    .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($C" & 10 + L & "="""";$D" & 10 + L & "<>"""")"
 
    With .FormatConditions(3)
        .Borders(xlTop).LineStyle = xlContinuous
        .Font.Bold = True
        With .Interior
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.14996795556505
        End With
    End With
'____________________________
    'Ajoute condition 4 et 5 : la dernière ligne remplie d'un tableau n'a pas d'interligne pointillée
    .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($D" & 10 + L & "<>"""";$D" & 11 + L & "="""")"
 
    With .FormatConditions(4)
        .Borders(xlBottom).LineStyle = xlNone
    End With
 
    .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($D" & 9 + L & "<>"""";$D" & 10 + L & "="""")"
 
    With .FormatConditions(5)
        .Borders(xlTop).LineStyle = xlNone
    End With
 
End With
 
'Mise en forme d'une autre partie isolée du tableau :
Set CelluleDébut = Cells(ActiveSheet.Range("Début_Tableau").Row + 2, 5)    '=> prend en compte les valeurs à partir de la colonne n°5 (=E)
Set CelluleFin = Cells(ActiveSheet.Range("dernière_ligne").Row - 2, 8)     '=> prend en compte les valeurs jusqu'à la colonne n°8 (=H)
Set Tableau = Range(CelluleDébut, CelluleFin)
 
 
With Tableau
 
'____________________________
    'Ajoute condition 6 : n'affiche pas ce qui se trouve dans les cellules de droite (dates et entreprise),
    'si rien n'est saisie dans les cellules de gauche (ligne vide) :
    .FormatConditions.Add Type:=xlExpression, Formula1:="=$D" & 10 + L & "="""""
 
    With .FormatConditions(6)
        .Font.ThemeColor = xlThemeColorDark1
    End With
'____________________________
    'Ajoute condition 7 : n'affiche pas ce qui se trouve dans les cellules de droite (dates et entreprise), si la ligne correspond à un titre
    .FormatConditions.Add Type:=xlExpression, Formula1:="=ET($C" & 10 + L & "="""";$D" & 10 + L & "<>"""")"
 
    With .FormatConditions(7)
        .Font.ThemeColor = xlThemeColorDark1
        .Font.TintAndShade = -0.149998474074526
    End With
 
End With
 
End Sub