Bonsoir tout le monde, le Forum.
Fabrice, ayant trouvé le sujet très intéressant, je me suis amusé à bricoler ton exemple, et me joins également à la fête...
Outre le fait qu'il convenait de permettre l'application de mises en forme conditionnelles non limitées à 3 options, je suis parti du principe qu'il serait intéressant de permettre la gestion du format "global" des cellules (police, bordures, couleurs de fond et d'écriture) et laisser l'utilisateur décider de ces formats et des valeurs associées de façon simple et sans avoir à modifier le code VBA.
J'ai donc rajouté un onglet "Prefs" dans lequel l'utilisateur peut modifier la liste des formats disponibles ou en rajouter à sa guise.
Pour gérer les cellules cibles, le code utilisé est le suivant :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim TabTemp As Variant
Dim L As Long
'Ne gère pas les sélections de plages
If Target.Cells.Count > 1 Then Exit Sub
'Vérifie la présence du format conditionnel "spécial"
If Target.FormatConditions.Count < 1 Then Exit Sub
If Target.FormatConditions(1).Formula1 = "=mDF" Then
With Sheets("Prefs")
'Charge les préférences dans un tableau variant temporaire
L = .Range("A65536").End(xlUp).Row
TabTemp = .Range(.Cells(1, 1), .Cells(L, 1)).Value
'Détermine le format à utiliser suivant la valeur de la cellule
If Target.Value = "" Then
L = 1
Else
For L = 2 To UBound(TabTemp, 1)
If Target.Value < TabTemp(L, 1) Then Exit For
Next L
End If
Application.EnableEvents = False
'Applique le format
.Cells(L, 2).Copy
Target.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Target.FormatConditions.Add Type:=xlExpression, Formula1:="=mDF"
Application.CutCopyMode = False
Application.EnableEvents = True
End With
End If
End Sub
Pour sélectionner les cellules "cibles", il suffit simplement de leur appliquer une mise en forme conditionnelle comme suit :
1/ Sélectionner la ou les cellule(s)
2/ Faire "Mise en forme conditionnelle..."
3/ Choisir dans la liste : "La formule est"
4/ Saisir "=mDF"
5/ Puis valider par "OK".
Cordialement,
Didier_mDF