dam12345678
-
4 févr. 2013 à 13:55
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
6 févr. 2013 à 11:24
Bonjour tout le monde,
Après de longuuuuuuues recherches sur le net dans toutes les langues possibles et imaginables (ou presque), j'en viens à poser la question ici: "Est-il possible de tester la couleur RGB de remplissage d'une cellule?". Je m'y suis +/- essayé mais sans succès.
Voici donc mes codes pour plus de précision:
Public Function TestCouleur(Cellule As Range)
Application.Volatile
Couleur = Cellule.Font.color
End Function
ou
Public Function TestCouleur(Cellule As Range)
Application.Volatile
Couleur = Cellule.Interior.color
End Function
Appel de la fonction:
=SI(TestCouleur(G16)=ValeurDecCouleur ou CelluleAvecValeurDec;"oui";"non")
Malheureusement, à chaque fois, il m'affiche "non" même si toute la condition est juste. Voir le fichier joint pour plus d'infos...
Merci à tout ceux qui me donneront un coup de pouce là-dessus
damiens12345678
Je pense (à vérifier) que les octets affichés sous formes hexa (3 groupes de 2 caractères hexa) correspondent aux 3 couleurs RVB, mais dans l'ordre BVR.
Blanc : FF FF FF
Noir : 00 00 00
Rouge : 00 00 FF
Vert : 00 FF 00
Bleu : FF 00 00
Pour convertir de l'hexa en décimal (Long) :
ValeurDécimale = Val("&H" & CodeHexa)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Merci pour ta réponse. Cela dit, je ne vois pas en quoi cela pourrait changer mon problème ou modifier mon fichier. Le fait de passer de hexadécimal en décimal revient au même (par rapport ce que j'ai fait), non? Le but recherché est bien de tester la couleur d'une cellule par rapport à une valeur (également de couleur) donnée.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 4 févr. 2013 à 17:59
Bonjour,
Te fonction ne prend aucune valeur et ne retourne donc rien !
1) tu attribues une valeur à une variable Couleur alors que tu devrais l'attribuer à la fonction testcouleur
2) ta fonction devrait (et ce n'est pas le cas de la tienne) obserber la syntaxe classique :
Public function mafonction (param1 as .(type du paramètre)..) as ...(type de la fonction ....
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 4 févr. 2013 à 18:11
Et je n'ai répondu qu'en ce qui concerne l'utilisation d'une fonction, sans préjudice (autre sujet) de la "justesse" de la syntaxe que tu as mise en formule. Etrange syntaxe
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Te fonction ne prend aucune valeur et ne retourne donc rien !
=> Pourtant, celle-ci fonctionne:
Public Function TestCouleur_NB(sel As Range)
Application.Volatile
Couleur = sel.Interior.ColorIndex
End Function
Exemple d'appel de celle-ci: =SI(TestCouleur_NB(G16)=10;"oui";"non") mais elle ne fonctionne qu'avec les 56 couleurs "non-RGB". C'est cela que je ne m'explique pas...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 4 févr. 2013 à 19:12
Oui, tu as raison, je me suis lancé dans le démontage explicatif des couleurs, mais c'est ans intérêt. Pardon.
Ce que veut dire ucfoutu qui a eu l'oeil plus futé que le mien, c'est que ta fonction ne renvoie en effet rien du tout :
Pour fonctionner, elle devrait comporter :
- optionnellement mais fortement conseillé, le typage de la donnée en retour
- l'affectation du résultat à la fonction :
Public Function TestCouleur_NB(sel As Range) As Long
Application.Volatile ' ^^^^^^^
' Couleur = sel.Interior.ColorIndex
TestCouleur_NB = sel.Interior.ColorIndex ' <-- Retour de valeur
End Function
Si tu avais rendu obligatoire la déclaration des variables en mettant "Option Explicit" en tête de chaque page de code (voir options), le compilateur t'aurait indiqué que Couleur n'est pas défini et cela t'aurais mis la puce à l'oreille.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Merci beaucoup, j'y vois plus clair dans les retours, maintenant, malheureusement, un point reste flou, où se passe le test de la couleur (de la cellule) et du code de couleur RGB (fourni) à comparer?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 4 févr. 2013 à 21:44
Bah en supposant que ta fonction puisse être interrogée depuis la formule d'une cellule (est-ce ta question ?), une syntaxe du genre suivant devrait fonctionner.
Tout dépend si tu respectes bien le nom de la fonction (elle a changé depuis que tu fournis des infos) et ce que tu mets dedans :
=SI(TestCouleur_NB(G16)=45;"oui";"non")
Le 45 est le .ColorIndex (pas .Color) du Orange situé en haut à droite du tableau des couleurs prédéfinies.
Ce qui m'intrigue, c'est le "(G16)"
Pour moi, ceci ne définit pas un Range. Alors est-ce accepté par le paramètre de ta fonction ?
Il n'y a que toi qui peut le dire en faisant des essais et en surveillant les messages d'erreur.
PS : Supprime tous les "On Error Resume Next" qui pourraient agrémenter ton code. On peut programmer sans cette instruction qui cache les problèmes et rend le diagnostique impossible.
Au pire, transforme le paramètre en String + fournis-lui "G16" avec les guillements et transforme ta fonction :
Public Function TestCouleur_NB(sel As String) As Long
Application.Volatile
Dim oRange As Range
Set oRange = Range(sel)
TestCouleur_NB = oRange.Interior.ColorIndex
End Function
PS : Ce "Volatile", il sert à quoi ?
Est-il vraiment utile ?