web-dev-qa-db-fra.com

Comment obtenir la couleur de fond d'une mise en forme conditionnelle dans Excel avec l'aide de VBA

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.

4
David Leal

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.

11
user4039065

Vous voulez Range.DisplayFormat si vous devez prendre en compte la mise en forme conditionnelle

(ajouté dans Excel 2010)

4
Tim Williams

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
2
jainashish