Microsoft 365 Fonction perso ref couleur Hexa en couleur de fond de cellule

treza88

XLDnaute Occasionnel
Bonjour à tous ,

Je cherche à mettre le fond de cellules en couleur avec la référence en hexadécimale de la couleur, grâce a une fonction personnalisé et une fonction qui transforme l'Hexa en RGB

si je passe par une procédure tout fonctionne, mais si je passe par une fonction personnalisé j'ai un "#Valeur" en "D3" qui s'affiche.

Pouvez vous me dire pourquoi ?

Voici le fichier :
 

Pièces jointes

  • Classeur1.xlsm
    48.1 KB · Affichages: 8

treza88

XLDnaute Occasionnel
Merci Dranreb,
Ils lui sont transmis par les fonctions qui invoquent cette méthode : ThisWorkbook.Consigne Application.Caller.EntireRow.Columns(1), VColorRGB
C'est exactement ce passage là que je n'arrivais pas a suivre.
Mais je pense que là c'est bon.
Le passage se fait comme ça :

Application.Caller.EntireRow.Columns(1) -------------> Rng
VColorRGB----------------------------------------------> VColor

C'est la structure de l'appel de la méthode qui m'a perdu, je n'ai pas l'habitude de voir un appel sous cette forme.

Merci également Dudu2 pour le complément d'information.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Lorsqu'un argument est récupéré ByVal par une procédure invoquée, la procédure appelante peut naturellement spécifier en tant que cet argument une expression. Elle le peut d'ailleurs aussi s'il est récupérè ByRef, mais ça l'oblige à en déposer une copie dans une zone temporaire dont il transmettra l'adresse car il n'a pas le droit d'en exposer l'original à une possible modification par la procédure appelée en transmettant directement son adresse. J'ai d'ailleurs oublié de mettre aussi ByVal VColor As Long. C'est en effet aussi une expression qui est normalement spécifiée, la méthode n'a en tout cas pas à la modifier.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Bonjour @treza88 (du 88 où je suis en vacances !),

J'ai pas tout suivi et ce post est sans doute à coté du cœur de la discussion en cours, mais 2 remarques:
  1. "Merci également Dudu2 pour le complément d'information."
    Ce n'est pas exactement un complément d'information mais 3 fonctions personnalisées autonomes (se suffisent à elles-mêmes sans avoir à utiliser d'évènement annexe) dont une, RangeProperties, me semble-t-il, fait le job demandé dans le Post #1. Je le précise juste pour information of course.

  2. "avec la référence en hexadécimale de la couleur .../... et une fonction qui transforme l'Hexa en RGB"
    Nul besoin de transformer de l'hexa en RGB puisque la couleur est un nombre Long que la fonction Excel HEXDEC (exemple HEXDEC("FF") pour la couleur rouge) permet d'obtenir directement, fonction Excel d'ailleurs utilisée dans les exemples de la ressource pré-citée.
 

treza88

XLDnaute Occasionnel
Merci Dranreb pour l'éclaicissement sur BYVAL/BYREF.

Merci également Dudu2 pour le complément d'information.
Oui j'ai répondu avant de vraiment regarder en détail et oui je pense que ton "RangeProperties" aurais pu faire l'affaire.

Par contre en faisant des essais avec HEXDEC() et la fonction "VColorRGB(B5)" de Dranreb, on obtient pas les mêmes valeurs.
Pour l'héxa "CDBA88", j’obtiens 13482632 avec HEXDEC() et 8960717 avec la fonction, par contre au finale la couleur diffusé est la même.

Pouvez vous me dire pourquoi ?

 

Dranreb

XLDnaute Barbatruc
En hexa, ces deux nombres on leur valeurs Rouge et Bleue interverties.
L'explication est donc à chercher dans mon poste #3
Un "#CDBA88" classique dans beaucoup de logiciels correspond à un &H88BACD& qui est la représentation hexa de RGB(205, 186, 136) pour Excel et VBA.
Voir mon CouleursCls.xlsm disponible en téléchargement pour plus ample information.
 
Dernière édition:

treza88

XLDnaute Occasionnel
Merci et ok pour la différence d'interprétation qui donne deux chiffres différent, mais pourquoi 13482632 et 8960717 donne la même couleur à l'écran ?

La couleur devrait être différente puisque les chiffres sont différent et que l'on a inversé le rouge et le bleu en héxa ?
 

Dranreb

XLDnaute Barbatruc
La couleur est bel et bien différente selon qu'on prend l'une ou l'autre valeur :
1722448598113.png

Ma fonction VColorHex intervertissait les 2 premiers et derniers groupes de deux chiffre hexa spécifiés pour les interpréter en valeur de Color correcte.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
313 866
Messages
2 103 082
Membres
108 521
dernier inscrit
manouba