Récupérer la couleur d'une cellule

Résolu/Fermé
Xerium Messages postés 80 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 13 avril 2016 - 3 juin 2013 à 11:14
Xerium Messages postés 80 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 13 avril 2016 - 7 juin 2013 à 10:27
Bonjour,

Je suis sur un morceau de code depuis quelques temps maintenant, et ne trouvant vraiment pas de solution, je me tourne vers vous pour chercher de l'aide.

Je code une fonction qui doit renvoyer au format RGB la couleur de fond d'une cellule. La cellule en question est déterminée par la ressource (String) passée en paramètres. Voici le code que j'ai écrit pour cela :

Public Function couleurRessource(ByVal ressource As String)

Dim cellule As Range
Dim ligne As Integer


Set cellule = Feuil2.Range("B:B").Find(ressource, lookat:=xlWhole)

If cellule Is Nothing Then
    couleurRessource = RGB(0, 0, 0)
Else
    ligne = cellule.Row
    couleurRessource = Feuil2.Range("D" & ligne).Interior.Color
End If

End Function


Or, quand la fonction est appelée à l'exécution, j'obtiens l'erreur 438 - "Propriété ou méthode non gérée par cet objet".

Et quand je clique sur Débogage, l'instruction suivante est remise en cause :

Selection.ShapeRange.Fill.ForeColor.RGB = couleurRessource(ressource)


c'est-à-dire l'instruction qui fait appel à la fonction.

Une piste ? Une idée ? Une explication ? Je suis preneur :)

Merci d'avance,
A voir également:

9 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
3 juin 2013 à 15:14
Bonjour,

Une facon de voir, il faut decoder la couleur en RGB

Sub test_color()
    Dim R As Long, G As Long, B As Long
    
    R = 0
    G = 0
    B = 0
    'adapter a votre resource
    ressource = "c"
    x = couleurRessource(ressource, R, G, B)
    With Worksheets("feuil1")
        .Shapes("Triangle isocèle 2").Select
        Selection.ShapeRange.Fill.ForeColor.RGB = RGB(R, G, B)
    End With
End Sub

Public Function couleurRessource(ByVal ressource As String, R As Long, G As Long, B As Long)
    Dim cellule As Range
    Dim ligne As Integer

    Set cellule = Feuil2.Range("B:B").Find(ressource, lookat:=xlWhole)

    If Not cellule Is Nothing Then
        ligne = cellule.Row
        couleur = Feuil2.Range("D" & ligne).Interior.Color
        'conversion Couleur en RGB
        R = Int(couleur Mod 256)
        G = Int((couleur Mod 65536) / 256)
        B = Int(couleur / 65536)
    End If

End Function


Bonne suite
0