convertir les codes couleur RVB, Hexa, Dec etc

zorglubxp

XLDnaute Junior
C'est bon, tout est revenu à la normale, plus de peur que de mal.

@Staple1600 , J'ai bien executé ton code (sur une feuille vierge cette fois-ci) et ça me donne les codes couleur dans différents formats de la palette 56 couleurs par défaut d'Excel

Cependant, je ne sais pas encore quel est le lien entre le codage couleur utilisé pour les controls des usf codés de la sorte :
&H80000012&, ceux donnés par le fichier Modeste Geedee &H suivi de 6 caractères sans & à la fin et ton code html # suivi de 6 caractères

Edit:
Lorsque j'analyse le jaune par exemple
RVB decimal : 255, 255, 0

Avec le code donné par la fonction de Staple, ça donne :
RVB Hexa = FFFF00

Avec le fichier de Modeste Geedee, ça donne :
Hexadecimal = &h00FFFF
Ici, l'Hexa fait pas du RGB mais du BGR ??? WTF ?

Et dans tout ça, ça ne me dit pas le code que je dois utiliser comme argument backcolor de mes commandbutton ;)

Et moi qui pensait que ça allait être facile....
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@>zorglubxp
J'aurai du préciser que le code fourni dans le message#10 n'avait qu'une fonction illustrative.
Et que ce n'était une solution précise à ta question
 

Staple1600

XLDnaute Barbatruc
Re
Voici un petit exemple avec un userform et trois boutons
(qu'on appelle en VBA CommandButton)
Couleurs.png

Copie le code ci-dessous dans le code de l'userform
Code:
Private Sub UserForm_Initialize()
Me.BackColor = Sheets(1).Range("A5").Interior.Color
CommandButton1.BackColor = Sheets(1).Range("A1").Interior.Color
CommandButton2.BackColor = Sheets(1).Range("A2").Interior.Color
CommandButton3.BackColor = Sheets(1).Range("A3").Interior.Color
End Sub
Puis affiche l'userform
Ferme le et ensuite change les couleurs de fond sur la feuille 1 dans les cellules A1,A2,A3,A4 et A5
et affiche de nouveau l'userform
Les couleurs auront changé.
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Perso, j'utilise ce classeur pour mettre au point des couleurs, notamment d'UserForm.

Fichier supprimé et joint plus loin, adapté pour compatibilité 64bits.
 
Dernière édition:

zorglubxp

XLDnaute Junior
OK super ça fonctionne bien.
du coup je comprends en voyant la Sub que l'argument .BackColor n'est pas forcément un code hexadecimal mais le code couleur complet d'excel.

Mon but est de changer la couleur de fond de mes boutons activX qui sont placés sur une feuille et non sur un userform. C'est pour ça que j'esperais pouvoir changer cette couleur dans les propriétés.
Je vais donc voir si, à l'instar du usf_initialize, je peux modifier la couleur dans le Workbook_open

Edit : Mince, j'ai du retard sur mes commentaires, je répondais à Staple.
Dranreb, je teste ton fichier now
 
Dernière édition:

zorglubxp

XLDnaute Junior
@Staple1600
La commande suivante ne fonctionne pas dans mon Workbook_Open
CommandButton1.BackColor = Range("cell_ColorTest").Interior.Color
mais elle fonctionne dans le code de la feuille concernée dans la procédure worksheet_Activate. Je ne sais pas si c'est la plus appropriée.

Donc je vais redefinir dans cette procedure la couleur de tous tous les commandbuttons, à moins que tu ne m'indique une autre méthode pour qu'elles puissent avoir la couleur de mon choix. (la couleurdoit rester figée par la suite)


@Dranreb
J'ai réussi à entrapercevoir ce que donne ton fichier, avant qu'il ne se ferme violemment pour cause de non conformité avec ma version 64bits et la version 32bits de ton fichier.
 

Dranreb

XLDnaute Barbatruc
Dans les UFmAppliquer et UFmCapture, glisse le mot clé PtrSafe entre les Declare et Function
Oh et puis je l'ai fait, et je le joins. Ça ne sert plus à rien sur ma version d'Excel, mais ça ne gène pas.
 

Pièces jointes

  • CouleurCls.xlsm
    202.5 KB · Affichages: 91

zorglubxp

XLDnaute Junior
@Dranreb
Ton fichier fonctionne bien, merci
Par contre je ne comprends pas très bien comment il fonctionne.
Lorsque je clique sur capturer un pixel, dès que je clique sur Go, l'userform se fait la malle : WTF ????

Au final, je pense que vous avez en partie répondu à mes attentes, il ne me reste plus qu'à créer tous mes Commandbuttons (pour faire du remplissage de cellule dans un planning) et leur attribuer la couleur de fond correspondante à celle qu'ils vont appliquer aux cellules selectionnées.

Pour l'instant je vais utiliser la sub Worksheet_Activate pour initialiser cette couleur, à moins que quelqu'un me propose quelque chose de plus efficace.

Merci @tous

Zorg
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Avec le code donné par la fonction de Staple, ça donne :
RVB Hexa = FFFF00

Avec le fichier de Modeste Geedee, ça donne :
Hexadecimal = &h00FFFF
Ici, l'Hexa fait pas du RGB mais du BGR ??? WTF ?
c'est presque ça ;)
en hexa décimal les 2 octets dits de poids faible (A droite) sont pour la couleur rouge
les 2 octets du milieu sont pour le Vert (G=Green)
les 2 octets précédents dits de poids fort (à gauche sont pour le Bleu
upload_2017-8-13_21-54-35.png

upload_2017-8-13_21-53-52.png

upload_2017-8-13_21-55-4.png

ces 3 instructions ont le même effet

pour une couleur en hexadécimal on précise en général 8 octets dont les 2 premiers octets sont à "00" dans le cas de RGB pour Ecran.

pour compatibilité avec d'autres systèmes colorimétriques tel que CMYB (Cyan, Magenta, Yellow, Black) pour Imprimante
 

Pièces jointes

  • Rgb.xlsm
    23.7 KB · Affichages: 83

Dranreb

XLDnaute Barbatruc
Lorsque je clique sur capturer un pixel, dès que je clique sur Go, l'userform se fait la malle : WTF ????
C'est normal: il est fait pour capturer un pixel en dehors de lui même, voire dans une autre application. Mais il se rapprochera à distance raisonnable de curseur de la souris, jusqu'à ce que vous ne le bougerez plus durant une seconde !

Edit: Remarque: dans les explications de Modeste geedee il faut plutôt lire demi-octets. Un seul octet est en effet représenté par 2 chiffres hexadécimaux.
 
Dernière édition:

zorglubxp

XLDnaute Junior
Merci aussi à toi @Modeste geedee , je me coucherais une fois de plus moins con ce soir.
Je vais finir un jour intelligent à continuer comme ça. Ouf, j'ai encore un peu de marge ;)

C'est normal: il est fait pour capturer un pixel en dehors de lui même, voire dans une autre application. Mais il se rapprochera à distance raisonnable de curseur de la souris !
Lol, et vu que j'essayais de le poursuivre avec ma souris, je comprends mieux pourquoi il essayait de se barrer !
Merci ;)
 

zorglubxp

XLDnaute Junior
Après avoir triturer et réorganiser tout ce que je viens d'apprendre aujourd'hui sur ce sujet, je fais la synthèse suivante :

Les couleurs sous Excel peuvent être codées en VBA comme suit (liste non exhaustive):
  • en valeur décimale reprise dans les codes vba type selection.color => code couleur pouvant aller de 1 à 8 chiffres
  • en valeur basée sur un code Hexadécimal en BGR (et non RGB) => &H00 + code Hexa BGR (6 caractères) + &. Ce code peut ainsi être utilisé directement dans les propriétés d'un userform ou d'un control (donc pas besoin d'une procédure spécifique pour l'activer)
Afin de pouvoir récupérer les différents codes couleur d'une cellule choisie, il suffit d'executer la Sub Test après avoir recopier le code ci-dessous (les 2 fonctions + la Sub) dans un module VBA.
Pour faciliter l’exécution de ma Sub Test, je lui associe un raccourcis clavier (le ode est peut être perfectible, mais il fonctionne)
VB:
Public Function getRGB(rcell) As String
    Dim sColor As String

    sColor = Right("000000" & Hex(rcell.Interior.Color), 6)
    getRGB = Right(sColor, 2) & Mid(sColor, 3, 2) & Left(sColor, 2)
End Function


Public Function getBGR(rcell) As String
    Dim sColor As String

    sColor = Right("000000" & Hex(rcell.Interior.Color), 6)
    getBGR = Left(sColor, 2) & Mid(sColor, 3, 2) & Right(sColor, 2)
End Function


Sub a_test() 'raccourcis ctrl+m

'Convertir les codes couleurs en valeurs RGB

    Dim RGBC, Blue, Green, Red As Long
    Dim usfColor As String
   
    RGBC = ActiveCell.Interior.Color
   
    Red = Int(RGBC Mod 256)
    Green = Int((RGBC Mod 65536) / 256)
    Blue = Int(RGBC / 65536)
    usfColor = "&H00" & getBGR(ActiveCell) & "&"

    MsgBox "Excel Color : " & RGBC & Chr(10) & _
    "UserForm Control Color : " & usfColor & Chr(10) & _
    "Hexa RGB: " & getRGB(ActiveCell) & Chr(10) & _
    "RED (rouge): " & Red & vbCr & _
    "GREEN (vert): " & Green & vbCr & _
    "BLUE (bleu): " & Blue, , " RGB Values"
       
End Sub

Merci à tous pour votre contribution à mon apprentissage ;)
 

Dranreb

XLDnaute Barbatruc
Remarque: Les codes couleurs sont des entiers Long. Il n'est nulle part indispensables de les spécifier aux propriétés ForeColor, BackColor de VBA ou Color d'Excel comme constantes numériques hexadécimales Long (commençant par &H et se terminant par &, que VBA enlève, d'ailleurs dans du code, quand ça ne peut pas être autre chose qu'un Long). Et il est absurde de les initialiser par des textes reproduisant cette codification !

Mais mon classeur envoie souvent une couleur sous cette forme dans le presse papier.
Il suffit de faire Ctrl+V dans VBA, aussi bien dans la fenêtre de propriétés que derrière un = d'affectation à une de ces propriétés code de couleur.
 
Dernière édition:

zorglubxp

XLDnaute Junior
Remarque: Les codes couleurs sont des entiers Long. Il n'est nulle part indispensables de les spécifier aux propriétés ForeColor, BackColor de VBA ou Color d'Excel comme constantes numériques hexadécimales Long (commençant par &H et se terminant par &, que VBA enlève, d'ailleurs dans du code, quand ça ne peut pas être autre chose qu'un Long). Et il est absurde de les initialiser par des textes reproduisant cette codification !

Ta remarque m'est difficile à comprendre. Va-t-elle à l'encontre de ma synthèse au dessus.
J'ai essayé d'être accessible par des néophytes de mon niveau.
Les ForeColor, BackColor sont biens des propriétés des userform ou des controls
Le Color d'Excel est bien associé aux cellules d'une feuille. Ceux sont les 2 codes couleur que j'évoquais le premier est en hexadécimale, le 2nd en chiffre. Je ne comprend pas ce que tu veux dire de plus ???
 

Dranreb

XLDnaute Barbatruc
Je veux dire que l'hexadécimal n'est qu'une représentation.
Il ne faudrait surtout pas croire que parce qu'il figure &H00FFFFFF& dans la fenêtre de propriété en face d'un BackColor qu'il faut le rentrer sous cette forme, en texte, par du code. C'est un entier Long, c'est tout ! Le même en VBA qu'en Excel pour une même couleur. En VBA la constante numérique correspondant au blanc peut s'écrire indifféremment &HFFFFFF ou 16777215.
En hexa le jaune doit s'écrire en &HFFFF&, parce que &HFFFF est interprété -1 en Integer. Mais 65535 ça va aussi, y compris dans la fenètre de propriété, même s'il en transforme immédiatement la représentation en &H0000FFFF&.
 
Dernière édition:

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16