Fonctions de couleur et MFC
Il existe une possibilité en VBA pour récupérer la couleur affichée d'une cellule (en tenant compte des mises en forme conditionnelles) mais il n'est techniquement pas possible* de récupérer la couleur à l'aide d'une fonction personnalisée à insérer sur une feuille Excel.
Pour que les fonctions puissent malgré tout tenir compte de la couleur affichée d'une cellule (avec MFC), il faut donc trouver une solution en VBA qui soit complètement indépendante des fonctions insérées sur la feuille ...
Exemple de cas
Le tableau suivant contient des cellules colorées par MFC et l'objectif ici est d'obtenir le numéro de couleur de chaque cellule grâce à la fonction NO_COULEUR du pack de fonctions :
Sans surprise, vous pouvez constater que les couleurs appliquées par la mise en forme conditionnelle ont été ignorées.
Puisqu'une fonction sur une feuille ne peut pas tenir compte de la couleur affichée, une possibilité est d'utiliser l'événement Worksheet_Change (qui se déclenche après une modification dans la feuille) et de modifier la couleur de la cellule pour lui donner la valeur de celle affichée :
Private Sub Worksheet_Change(ByVal Target As Range)
'Si modification d'une plage de cellules qui peut influer sur la MFC => mettre à jour les couleurs
If Not Application.Intersect(Target, [B2:G7]) Is Nothing Then
Application.ScreenUpdating = False
'Copie des couleurs affichées
For Each c In [B2:G7]
c.Interior.Color = c.DisplayFormat.Interior.Color
Next
End If
End Sub
Grâce à cela, la couleur de la cellule sera la même que la couleur appliquée par la MFC et toutes les fonctions de couleur pourront donc ensuite l'utiliser normalement :
En cas de changement dans la plage B2 à G7, les couleurs seront automatiquement mises à jour :