Récupérer la couleur d'une cellule [Résolu/Fermé]

Signaler
Messages postés
80
Date d'inscription
lundi 21 mai 2012
Statut
Membre
Dernière intervention
13 avril 2016
-
Messages postés
80
Date d'inscription
lundi 21 mai 2012
Statut
Membre
Dernière intervention
13 avril 2016
-
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,

9 réponses

Messages postés
15386
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 octobre 2020
1 381
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
Messages postés
80
Date d'inscription
lundi 21 mai 2012
Statut
Membre
Dernière intervention
13 avril 2016
1
Merci de ta réponse, f894009 ^^

Ca m'a aidé, mais malheureusement c'est toujours pas ça... je désespère :(

Voilà le nouveau code :

Public Function couleurRessource(ByVal ressource As String)

Dim celluleTrouvee As Range

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

If celluleTrouvee Is Nothing Then
    couleurRessource = RGB(0, 0, 0)
Else

    Dim r, g, b As Integer
    
    Dim ligne As Integer
    ligne = celluleTrouvee.Row
    r = Int(Feuil2.Range("D" & ligne).Interior.Color Mod 256)
    g = Int((Feuil2.Range("D" & ligne).Interior.Color Mod 65536) / 256)
    b = Int(Feuil2.Range("D" & ligne).Interior.Color / 65536)
 
    couleurRessource = RGB(r, g, b)
    
End If

End Function 


Je confirme que tes calculs renvoient bien les valeurs RGB, mais étrangement, c'est toujours la même instruction qui bug...

Du coup j'ai testé en codant en dur :

Selection.ShapeRange.Fill.ForeColor.RGB = RGB(83, 110, 213)


Et là ça marche... je ne comprends plus rien :/
Messages postés
15386
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 octobre 2020
1 381
Re,

La fonction que vous avez programmee ne peut pas marcher, regardez de plus pres ce que j'ai programme.

A+
Messages postés
80
Date d'inscription
lundi 21 mai 2012
Statut
Membre
Dernière intervention
13 avril 2016
1
Salut f894009,

J'ai regardé plus en détail ta fonction et l'ai comparée avec la mienne, mais j'ai du mal à voir la différence.

Du coup j'ai fait un copier-coller de tes deux fonctions, mais ça ne marche toujours pas (j'ai la même erreur qu'avant).

Merci ! :)
Messages postés
15386
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 octobre 2020
1 381
Bonjour,

Montrez ce que vous avez ecrit comme code!!!
Messages postés
80
Date d'inscription
lundi 21 mai 2012
Statut
Membre
Dernière intervention
13 avril 2016
1
Resalut,

La fonction :

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 


L'appel dans un Sub :


    Dim R As Long, G As Long, B As Long
    
    R = 0
    G = 0
    B = 0
    'adapter a votre resource
    
    x = couleurRessource(ressource, R, G, B)
            
                             
    Selection.ShapeRange.Fill.ForeColor.RGB = couleurRessource(ressource, R, G, B)


Merci :)
Messages postés
15386
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 octobre 2020
1 381
Re,

quelle affectation donnez-vous a ressource ?????

et j'ai du faire ceci pour ce qui est de la forme a colorier

With Worksheets("feuil1")
        .Shapes("Triangle isocèle 2").Select
        Selection.ShapeRange.Fill.ForeColor.RGB = RGB(R, G, B)
End With
Messages postés
80
Date d'inscription
lundi 21 mai 2012
Statut
Membre
Dernière intervention
13 avril 2016
1
La ressource correspond au nom d'une équipe (String). Pour la forme, désolé, j'ai remplacé :

Selection.ShapeRange.Fill.ForeColor.RGB = couleurRessource(ressource, R, G, B)


par :

Selection.ShapeRange.Fill.ForeColor.RGB = RGB(R, G, B)


mais pour autant ça ne marche toujours pas :(
Messages postés
15386
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 octobre 2020
1 381
Re,

pouvez-vous mettre votre fichier a dispo en suivant ce lien https://www.cjoint.com/
pas de donnees confidetilles ou passez par les messages prives
N'oubliez pas de copier/coller le lien cree dans votre prochain message.

A+
Messages postés
80
Date d'inscription
lundi 21 mai 2012
Statut
Membre
Dernière intervention
13 avril 2016
1
Merci de ton aide, mais j'ai changé le principe général et maintenant ça marche (on ne cherche plus la couleur à part, dans une autre colonne) ^^