Détecter mise en forme conditionnelle par une fonction SI_MFC

Bonjour tout le monde

pour verifier si la couleur de la cellule est appliqué par la mise en forme conditionnelle ou non j’ai essayé de créer cette fonction SI_MFC mais ça me renvoi l’erreur #valeur !

Et pourtant avec la macro SI_MFC_ ça fonctionne (voir sur la feuille f2 : sélectionner une cellule qu’on veut vérifier et cliquer sur le bouton « la selection est-elle colorée par MFC ? » ) et decrit exactement si la couleur est appliqué par MFC et qu’elle est la couleur initiale.

J’ai testé avec une autre fonction personnalisée SI_Rouge (sur la colonne B) et ça fonctionne mais avec la l’instruction « if cel_col.Interior.Color = 255 » et ne fonctionne pas avec l'instruction « If cel_col.DisplayFormat.Interior.Color = 255 »

La cellule A6 est mise en forme en rouge (255) par MFC et la fonction si_rouge ne la reconnaît pas mais la macro la reconnais!

La cellule A7 est mise en forme conditionnel en « aucune couleur » et la macro ne la reconnaît pas car elle se base sur l’égalité des couleurs cel_col.Interior.Color= cel_col.DisplayFormat.Interior.Color et non pas sur le fait qu’une mise en forme conditionnelle lui a été appliquée ou non.

Un autre soucis est que lorsqu’on change la couleur la formule ne recalcule pas automatiquement malgré le ‘Application.Volatile’ et il est nécessaire de recalculer .

J’imagine qu’il y a une autre façon plus adaptée pour savoir si la mise en forme appliqué est dû à une MFC ou non, et qui traite le problème d’une façon global et non pas uniquement sur interior.color.

Function SI_ROUGE(cel_col As Range)

Application.Volatile
    ''''''If cel_col.DisplayFormat.Interior.Color = 255 Then
    If cel_col.Interior.Color = 255 Then
        SI_ROUGE = 1
    Else
        SI_ROUGE = 0

    End If

End Function

Function SI_MFC(cel_col As Range)

Application.Volatile

Dim col1 As Long
Dim col2 As Long
col1 = cel_col.Interior.Color
col2 = cel_col.DisplayFormat.Interior.Color
   If col1 = col2 Then
   SI_MFC = 0
   ''''''MsgBox "Non ! pas par MFC, sa couleur est : " & col1
        Else
    SI_MFC = 1
        ''''''MsgBox " Oui par MFC: Couleur=  " & col2 & Chr(10) & Chr(13) & "Couleur iniciale est: " & col1
    End If

End Function

Sub SI_MFC_()
Dim col1 As Long
Dim col2 As Long
col1 = Selection.Interior.Color
col2 = Selection.DisplayFormat.Interior.Color
   If col1 = col2 Then
   MsgBox "Non ! pas par MFC, sa couleur est : " & col1
        Else
    MsgBox " Oui par MFC: Couleur=  " & col2 & Chr(10) & Chr(13) & "Couleur iniciale est: " & col1
    End If

End Sub

Sub calcul()
Application.Calculate
End Sub

Merci pour l’aide

28si-mfc.xlsm (29.96 Ko)

re

en resumé pourquoi ça fonctionne

Function SI_ROUGE(cel_col As Range)
Application.Volatile
Dim col As Variant
    col = cel_col.Interior.Color

If col = 255 Then
            SI_ROUGE = "oui"
    Else
        SI_ROUGE = "non"

    End If

End Function

et ça ne fonctionne pas

Function SI_ROUGE(cel_col As Range)
Application.Volatile
Dim col As Variant
      col = cel_col.DisplayFormat.Interior.Color
    If col = 255 Then
            SI_ROUGE = "oui"
    Else
        SI_ROUGE = "non"

    End If

End Function

et pourtant cel_col.DisplayFormat.Interior.Color prend bien les valeurs tel que 255 comme cel_col.Interior.Color

Cordialement

Bonjour

Display.Format peut être utilisé dans une Sub mais pas dans une Function, hélas

Merci 78chris pour cet éclaircissement
Rechercher des sujets similaires à "detecter mise forme conditionnelle fonction mfc"