XL 2016 [VBA] connaître les couleurs d'un format conditionnel 'nuance de couleurs'

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F22Raptor

XLDnaute Impliqué
Bonjour à tous
J'ai résumé le pb dans le fichier joint : le format conditionnel montre bien des couleurs à l'écran, mais la véritable couleur de la cellule (interior.color) est toujours le blanc !
Comment récupérer la couleur de la nuance 'format conditionnel' ?

Merci d'avance
 

Pièces jointes

Solution
Bonjour,

Comment récupérer la couleur de la nuance 'format conditionnel' ?
Si j'ai bien compris la question, tu veux simplement connaître la couleur qui est affichée dans une cellule coloriée par une MFC ?

Dans ce cas, il suffit d'utiliser .DisplayFormat.Interior.Color.

Enrichi (BBcode):
Sub Couleur_Cellule()
'
Dim Rge As Range
 
    For Each Rge In Range("B1:B5")
        Rge.Offset(0, 1).Value = Rge.DisplayFormat.Interior.Color
    Next Rge

End Sub


ps : je précise que c'est, si je me souviens bien, le grand Job qui m'avait donné cette façon de procéder.
Bonjour,
je n'ai pas vu votre fichier mais les propriétés suivantes peuvent peut-être vous aider :
.Interior.Color
.Interior.ColorIndex
.Interior.Gradient
.Interior.Pattern
.Interior.PatternColor
[Edit] je viens de voir votre fichier -> Les propriétés ci-dessus n'apportent pas de solution.
La propriété qui dans votre cas donne les 3 couleurs (nuances de 3 couleurs) est (ici pour l'item 1
Sheets("Feuil1").Range("B1:B5").FormatConditions.ColorScaleCriteria(1).FormatColor.ColorIndex
Sheets("Feuil1").Range("B1:B5").FormatConditions.ColorScaleCriteria(1).FormatColor.Color
A ce stade vous connaissez les 2 couleurs extrêmes et la couleur centrale.
Il ne "reste plus" qu'à :
- décomposer . Color en RGB
- Pointer dans la plage les valeurs extrêmes, ce qui donne également la valeur moyenne
- évaluer la position de la valeur de la cellule courante (en-dessus ou en dessous de la moyenne.
- pour chaque composante (R/G/B) calculer la valeur pour la cellule courante
exemple
avec R(1) = 255, R(2) = 100 R(3) = 15
Valeur min de la plage 10
Valeur max de la plage 100
Donc Valeur moyenne = 55
Cellule courante 20 (donc entre la valeur min et la valeur moyenne
R(cellule courante) = 255 + (20 -10)/ (55 -10) x (100 - 255) = 190 approximativement

et bien sûr espérer que la règle adoptée par Excel soit- celle-là
 
Dernière édition:
à priori ce code te donne les couleurs utilisées dans ta MFC pour définir la couleur "Min" et la couleur "Max"
VB:
Sub Couleur_Cellule()
    For i = 1 To 5
        Range("C" & i) = Range("B" & i).FormatConditions(1).ColorScaleCriteria(1).FormatColor.Color
        Range("D" & i) = Range("B" & i).FormatConditions(1).ColorScaleCriteria(2).FormatColor.Color
    Next i
End Sub

hélas.. je n'ai pas trouvé pour la couleur "Appliquée" par la MFC
 
J'ai modifié mon post précédent avant d'avoir vu le post de Vgendron.
Un remarque : comme je l'ai écrit, la valeur donnée par Sheets("Feuil1").Range("B1:B5").FormatConditions.ColorScaleCriteria(1).FormatColor.Color est celle de la valeur min du nuancier.
Il faut faire les calculs indiqués dans mon post pour essayer de retrouver la couleur de la cellule courante
 
Le code (j'ai nommé la plage B2:B5 en MaPlage)
VB:
Sub CouleurCellule()
Dim ValMin As Double, ValMoy As Double, ValMax As Double
Dim CouleurMin As Double, CouleurMoy As Double, CouleurMax As Double
Dim R, V, B, RMin, VMin, BMin, RMax, VMax, BMax

    ValMin = Application.Min(Range("MaPlage"))
    ValMax = Application.Max(Range("MaPlage"))
    ' Cas où la valeur moyenne est en pourcentage
    ValMoy = (ValMax - ValMin) / 2
    ' Cas où la valeur moyenne est en centile 50
    If ActiveSheet.Range("MaPlage").FormatConditions(1).ColorScaleCriteria(2).Type = 5 Then ValMoy = Application.Median(Range("MaPlage"))
    CouleurMin = Range("MaPlage").FormatConditions(1).ColorScaleCriteria(1).FormatColor.Color
    CouleurMoy = Range("MaPlage").FormatConditions(1).ColorScaleCriteria(2).FormatColor.Color
    CouleurMax = Range("MaPlage").FormatConditions(1).ColorScaleCriteria(3).FormatColor.Color
    ' décomposer . Color en RGB
    RMin = Int(CouleurMin Mod 256)
    VMin = Int((CouleurMin Mod 65536) / 256)
    BMin = Int(CouleurMin / 65536)
    RMoy = Int(CouleurMoy Mod 256)
    VMoy = Int((CouleurMoy Mod 65536) / 256)
    BMoy = Int(CouleurMoy / 65536)
    RMax = Int(CouleurMax Mod 256)
    VMax = Int((CouleurMax Mod 65536) / 256)
    BMax = Int(CouleurMax / 65536)

    If ActiveCell.Value <= ValMoy Then
        R = RMin + (ActiveCell.Value - ValMin) / (ValMoy - ValMin) * (RMoy - RMin)
        V = VMin + (ActiveCell.Value - ValMin) / (ValMoy - ValMin) * (VMoy - VMin)
        B = BMin + (ActiveCell.Value - ValMin) / (ValMoy - ValMin) * (BMoy - BMin)
    Else
        R = RMoy + (ActiveCell.Value - ValMoy) / (ValMax - ValMoy) * (RMax - RMoy)
        V = VMoy + (ActiveCell.Value - ValMoy) / (ValMax - ValMoy) * (VMax - VMoy)
        B = BMoy + (ActiveCell.Value - ValMoy) / (ValMax - ValMoy) * (BMax - BMoy)
    End If
    MsgBox "RGB : " & R & " " & B & " " & V & vbLf & "Color : " & RGB(R, V, B)
    ' pour vérification on met la cellule adjacente de la couleur trouvée
    ActiveCell.Offset(0, 1).Interior.Color = RGB(R, V, B)
End Sub
exécution avec sélection de B3
1742397496586.png

[EDIT] : La code fonctionne pour un paramétrage de la valeur du milieu = 50 qui est la valeur par défaut :
Pourcentage= 50 ou Centile = 50.
Pour des paramétrages plus "pointus" il faudra adapter le code
1742400644532.png
 
Dernière édition:
Bonjour,

Comment récupérer la couleur de la nuance 'format conditionnel' ?
Si j'ai bien compris la question, tu veux simplement connaître la couleur qui est affichée dans une cellule coloriée par une MFC ?

Dans ce cas, il suffit d'utiliser .DisplayFormat.Interior.Color.

Enrichi (BBcode):
Sub Couleur_Cellule()
'
Dim Rge As Range
 
    For Each Rge In Range("B1:B5")
        Rge.Offset(0, 1).Value = Rge.DisplayFormat.Interior.Color
    Next Rge

End Sub


ps : je précise que c'est, si je me souviens bien, le grand Job qui m'avait donné cette façon de procéder.
 

Pièces jointes

Dernière édition:
Bonjour à tous

Voici un code de Laurent Longre.

autant en profité.

VB:
Sub Elle_Est_Belle_Ma_MEFC(RetourMFC, RetourMfcHexa)
'Laurent Longre, MPFE, corrections 2003
Dim FC As FormatCondition, F1, F2
Dim C As Range, Hexa

Set C = Cells.Find(Empty)
Application.ScreenUpdating = False
For Each FC In ActiveCell.FormatConditions
    C.FormulaLocal = FC.Formula1: F1 = C
    If FC.Type = xlCellValue Then
        Select Case FC.Operator
            Case xlBetween, xlNotBetween:
                C.FormulaLocal = FC.Formula2: F2 = C
                If FC.Operator = xlBetween Then If ActiveCell >= F1 _
                    And ActiveCell <= F2 Then Exit For
                If ActiveCell < F1 Or ActiveCell > F2 Then Exit For
            Case xlEqual: If ActiveCell = F1 Then Exit For
            Case xlGreater: If ActiveCell > F1 Then Exit For
            Case xlGreaterEqual: If ActiveCell >= F1 Then Exit For
            Case xlLess: If ActiveCell < F1 Then Exit For
            Case xlLessEqual: If ActiveCell <= F1 Then Exit For
            Case xlNotEqual: If ActiveCell <> F1 Then Exit For
        End Select
    Else
        If F1 Then Exit For
    End If
Next FC
If Not FC Is Nothing Then
    RetourMFC = FC.Interior.ColorIndex
    Hexa = FC.Interior.Color
    RetourMfcHexa = "&H" & Hex$(Hexa)
'    MsgBox RetourMfcHexa
Else
    RetourMFC = ActiveCell.Interior.ColorIndex
End If
C.Clear
End Sub

Salutation
Jean-Paul
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
83
Réponses
1
Affichages
307
Réponses
2
Affichages
345
Retour