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 SubMerci pour l’aide
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 Functionet ç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 Functionet 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