Je souhaite obtenir la couleur d'arrière-plan de cellule attribuée à l'aide d'une règle de mise en forme conditionnelle dans Excel dans mon script VBA. J'ai réalisé que l'utilisation de la propriété Range.Interior.Color
ne présente pas la couleur résultant d'une fonctionnalité de mise en forme conditionnelle appliquée d'Excel.
J'ai fait des recherches et j'ai trouvé ce long chemin ici , il compile et fonctionne mais je ne reçois pas la couleur assignée [je reçois toujours (255,255,255)]
J'utilise Excel 2016 et je me demande s'il existe un moyen plus simple d'obtenir ces informations à l'aide d'une fonction VBA intégrée ou de toute autre astuce Excel.
Si vous souhaitez connaître la couleur d'une cellule qui a été colorée à l'aide d'une règle de mise en forme conditionnelle (CFR), utilisez ensuite .Range.DisplayFormat.Interior.Color¹.
Si vous voulez savoir de manière définitive de quelle couleur une cellule peut avoir été colorée ou non par un CFR, vous devez parcourir le CFR susceptible d'affecter cette cellule et examiner chacune des .Range.FormatConditions ( x). Couleur intérieure.
¹ Remarque: .AffichageFormat n'est pas disponible pour une feuille de calcul UDF.
Vous voulez Range.DisplayFormat
si vous devez prendre en compte la mise en forme conditionnelle
(ajouté dans Excel 2010)
Le code ci-dessous donne les valeurs HEX et RGB de la plage, que soit formaté à l'aide de la mise en forme conditionnelle ou autre. Si la plage n'est pas formatée à l'aide de la mise en forme conditionnelle et que vous envisagez d'utiliser la fonction iColor dans Excel en tant que fichier UDF. Ça ne marchera pas. Lisez l'extrait ci-dessous de MSDN .
Notez que la propriété DisplayFormat ne fonctionne pas dans les fonctions définies par l'utilisateur. Par exemple, dans une fonction de feuille de calcul qui renvoie la couleur intérieure d'une cellule, si vous utilisez une ligne semblable à:
Range.DisplayFormat.Interior.ColorIndex
alors la fonction de feuille de calcul s'exécute pour renvoyer une erreur #VALUE!!
Public Function iColor(rng As Range, Optional formatType As String) As Variant
'formatType: Hex for #RRGGBB, RGB for (R, G, B) and IDX for VBA Color Index
Dim colorVal As Variant
colorVal = rng.DisplayFormat.Interior.Color
Select Case UCase(formatType)
Case "HEX"
iColor = "#" & Hex(colorVal Mod 256) & Hex((colorVal \ 256) Mod 256) & Hex((colorVal \ 65536))
Case "RGB"
iColor = (colorVal Mod 256) & ", " & ((colorVal \ 256) Mod 256) & ", " & (colorVal \ 65536)
Case "IDX"
iColor = rng.Interior.ColorIndex
Case Else
iColor = colorVal
End Select
End Function
'Example use of the iColor function
Sub Get_Color_Format()
Dim rng As Range
For Each rng In Selection.Cells
myCell.Offset(0, 1).Value = iColor(rng, "HEX")
myCell.Offset(0, 2).Value = iColor(rng, "RGB")
Next
End Sub