VBA-MFC Problème lors du changement de la plage d'application
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:
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 |