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