Menu
Donnez votre avis

Excel - Mises en forme conditionnelles illimitées

Posez votre question

Mises en Forme Conditionnelles Illimitées



Introduction

La Mise en Forme Conditionelle (ou MFC) permet d'appliquer, à une cellule ou à plusieurs cellules sélectionnées, différents formats qui changeront automatiquement en fonction de la valeur (ou du résultat obtenu par la formule) qu'elles contiennent.

Pour les versions d'Excel antérieures à 2007, le nombre de MFC est limité à 3, ce qui est peu. Ayant vu beaucoup de demandes pour repousser cette limite, je me suis amusé à écrire une Macro qui permet de le faire, sans avoir besoin de la modifier. Elle fonctionne donc à la demande selon les besoins.

Principe

La macro va récupérer les formats à appliquer dans une Feuille nommée MFC, la cellule A1 de cette même feuille est utilisée pour appliquer le format par défaut.
La macro est déclenchée par la saisie d'une cellule, elle applique la MFC sur cette cellule. Mais pour qu'elle applique les formats sur les cellules voulues et, pour ne pas à avoir à modifier la macro pour définir les différentes plages, on programme une MFC dans la cellule avec une Formule : =Ma_MFC.
Cette macro permet aussi d'effectuer des Formats selon des paliers de valeurs.

Code

Voici le code à placer dans le module ThisWorkbook.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Integer, j As Long, Mfc As FormatCondition, c As Range, Ws1 As Worksheet
On Error GoTo fin ' en cas de mauvaise manipulation, ça plante sur l'ordre suivant
Application.EnableEvents = False
Set Ws1 = Sheets("MFC")
For i = 1 To Target.FormatConditions.Count
Set Mfc = Target.FormatConditions(i)
If UCase(Left(Mfc.Formula1, 7)) = "=MA_MFC" Then
Ws1.Range("A1").Value = Target.Value
Set c = Nothing
For j = 2 To Ws1.Range("A65536").End(xlUp).Row
If Ws1.Range("A" & j) = True Then
Set c = Ws1.Range("A" & j)
Exit For
End If
Next j
If c Is Nothing Then Set c = Ws1.Range("A1")
c.Copy
Target.PasteSpecial (xlPasteFormats)
Application.CutCopyMode = False
End If
Next i
Application.EnableEvents = True
fin:
On Error GoTo 0
End Sub
Jean-François Pillou

Cet article est régulièrement mis à jour par des experts sous la direction de Jean-François Pillou, fondateur de CommentCaMarche et directeur délégué au développement numérique du groupe Figaro.

En savoir plus sur l'équipe CCM