Récupérer la couleur d'une cellule

Résolu
Xerium Messages postés 93 Statut Membre -  
Xerium Messages postés 93 Statut Membre -
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,

--
Xerium

9 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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