Couleur automatique en fonction d'une autre

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dionys0s

XLDnaute Impliqué
Bonjour le forum

j'aimerais avoir une petite fonction qui détermine si une couleur (de remplissage de cellule par exemple) doit être associée à du noir ou du blanc (pour que la couleur de police, afin qu'elle ressorte bien).

Cette fonction existe déjà d'une manière ou d'une autre, puisque lorsqu'on change la couleur d'un onglet (Worksheet.Tab.Color), la couleur de la police est automatique. Par exemple, la couleur RGB(128,128,128) renvoie une police blanche, et la RGB(129,129,129) une noire. Je me demandais donc si je pouvais retrouver ça pour n'importe quelle couleur, en long et/ou RGB.

D'avance merci pour votre aide 🙂
 
Dernière édition:
Re : Couleur automatique en fonction d'une autre

Bonjour Dionysos,

......Me demandait si je pouvais retrouver ça pour n'importe quelle couleur, en long et/ou RGB.

voir fichier joint mais uniquement pour les niveaux de gris RGB(X,X,X)

à+
Philippe
 

Pièces jointes

Re : Couleur automatique en fonction d'une autre

Bonjour Philippe
Re le forum

Merci pour ton aide. J'avais également identifié que pour les variables de gris, il y a un basculement du blanc sur le noir à partir de RGB(129,129,129).
Mais faire une moyenne des RGB ne suffit malheureusement pas à établir une règle, puisque RGB(128,129,130) renvoie du blanc, et non du noir...
 
Re : Couleur automatique en fonction d'une autre

Re,

euh... nous sommes donc d'accord. Je me suis peut-être mal exprimé.
Je fais tous mes tests sur la couleur d'onglet, puisque la couleur de la police de l'objet tab est fonction de la couleur de l'objet Tab, et non affectable (et même non lisible, ou alors j'ai pas trouvé).
Je voulais dire que pour toutes les nuances de gris (i.e R = G = B), le point de bascule du blanc au noir (en partant de 0) se fait quand R = G = B = 129. On aurait donc pu penser que le point de bascule serait la moyenne des trois nuances (histoire de trouver la couleur pour toutes les nuances autres que gris, à savoir potentiellement R <> G <> B), mais il n'en est rien :
Le remplissage 129, 129, 129 donne une couleur de police noire, mais le remplissage 128, 129, 130 (moyenne 129) donne une couleur de police blanche.
 
Re : Couleur automatique en fonction d'une autre

Bonsoir à tous,
ce que j'ai constaté, c'est que le "n°" de couleur est en fait construit ainsi :
R*256*256+G*256+B
Donc RGB(129,129,129) correspond à la couleur 8487297
alors que RGB(128,129,130) correspond à la couleur 8421762 et RGB(130,129,128) correspond à la couleur 8552832.
ci-joint un petit fichier qui calcul le n° de la couleur en fonction des valeurs RGB ou l'inverse (décomposition d'un n° de couleur en valeur RGB)
 

Pièces jointes

Re : Couleur automatique en fonction d'une autre

Bonsoir Philippe, bonsoir à tous
J'ai appliqué ta procédure au fichier que j'avais transmis au post #6 (je l'ai d'ailleurs corrigé car j'avais fait une inversion entre le rouge et le bleu).

l'inversion de la couleur du texte ne semble pas toujours flagrante pour la lisibilité.

bonne nuit à tous
 

Pièces jointes

Re : Couleur automatique en fonction d'une autre

Bonsoir dionys0s, phlaurent55, Jacou,

Un fichier que j'avais commis il y a quelque temps.
Voir la procédure Sub CouleurPolice(xMaZone As Range) dans le module mdlDegrade.


Edit : v2 avec ajout de la procédure sub testCouleurPoliceFondPlein() pour des cellules au fond plein.
.
 

Pièces jointes

Dernière édition:
Re : Couleur automatique en fonction d'une autre

Bonjour Philippe, Jacou, mapomme,
Re le forum

merci pour vos aides respectives !
mapomme, tu aurais une explication sur comment tu as élaboré cette ligne ?
VB:
coeff = (R * 299 + G * 587 + B * 114) / 1000 < 125

EDIT : À quoi sert le # dans
VB:
G = Int((Coul Mod 65536) / 256#)
B = Int(Coul / 65536#)
?

D'avance merci 🙂
 
Re : Couleur automatique en fonction d'une autre

Bonsoir dionys0s,

VB:
coeff = (R * 299 + G * 587 + B * 114) / 1000 < 125
C'est une formule de luminance glanée sur le web. voir cet article de Wikipédia au chapitre "la luminance en vidéo".
Le seuil a été aussi tiré d'une recherche sur le web. On peut le modifier et voir ce que ça donne.

À quoi sert le # dans ?
VB:
G = Int((Coul Mod 65536) / 256#)
B = Int(Coul / 65536#)

En fait, il ne sert à rien ici. Si dans le code on écrit 1.0, vba le transforme en 1# qui indique que cette valeur sera considérée non pas comme un entier mais comme un nombre à virgule flottante.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
487
Retour