Excel - Mises en forme conditionnelles illimitées

Décembre 2016


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

Fichier joint


Il est beaucoup plus simple de voir son utilisation avec un fichier exemple : Télécharger le fichier

A voir également :

Ce document intitulé «  Excel - Mises en forme conditionnelles illimitées  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.