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 :
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 |
Partager