IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Convertir une couleur


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut Convertir une couleur
    bonjour j'ai une couleur sous la forme RGB(255,255,255) est je voudrais la convertir dans un long

    des solutions?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    BOnjour,
    je ne comprends pas très bien ce que tu veux faire
    Peux-tu donner un exemple plus précis de ce que tu veux faire ?
    Le résultat que tu imagines obtenir ...

    Ceci fonctionne mais pas sûr que çà soit ce que tu demandes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub a()
    Dim col As Long
    col = RGB(255, 255, 255)
    MsgBox col
    End Sub

  3. #3
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    C'est du calcul. Si tu convertis en Hexadécimal une valeur numérique représentant une couleur, tu pourras y constater ceci:

    RGB(255,255,255) = (2^8)^3 - 1 = 16777215 = &HFFFFFF

    et que le FF de droite représente le rouge, celui du milieu représente le vert et celui de droite représente le bleu (sens contraire du code HTML qui lui, va de gauche à droite). Si on représente le blanc en hexadécimal d'une manière plus graphique, ça donne : &HFFFFFF.

    Pour illustrer le tout, voici deux fonctions à mettre dans un module et qui peuvent servir comme formules de cellules:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function CouleurLong(r As Range, g As Range, b As Range) As Long
        CouleurLong = CLng(RGB(r.Value, g.Value, b.Value))
    End Function
     
    Function CouleurHexa(r As Range, g As Range, b As Range) As String
        CouleurHexa = "&H" & Hex(CLng(RGB(r.Value, g.Value, b.Value)))
    End Function
    le contenu du tableau exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	A	B	C	D		E
    1	r	g	b	long		hexa
    2	255	255	255	16777215	&HFFFFFF
    3	51	102	255	16737843	&HFF6633
    4	204	204	51	3394764		&H33CCCC
    5	18	200	140	9226258		&H8CC812
    6	175	188	218	14335151	&HDABCAF
    7	206	204	155	10210510	&H9BCCCE
    8	0	8	23	1509376		&H170800
    9	23	8	0	2071		&H817
    la formule de la colonne D :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =couleurlong(A2;B2;C2)  ' recopiée vers le bas
    la formule de la colonne E :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =couleurhexa(A2;B2;C2)  ' recopiée vers le bas
    Enjoy!

  4. #4
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut
    je n'y arrive pas!!
    voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim r As Long
    Dim g As Long
    Dim b As Long
    Dim st As String
    Dim CouleurLong As Long 
     
    st = "RGB(255,150,120)" 'CECI EST UN RESULTAT
     
    CouleurLong = CLng(st)
    le PB c'est que j'ai une erreur dans la dernier ligne d'incompatibilite

  5. #5
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    meu non!

    La fonction RGB retourne une valeur de couleur et cette valeur est numérique. Si tu pousses une string dans un CLng, tu n'auras jamais de résultat! Puisque cette string ne contient que du texte...

    Tu as regardé les exemples de code que j'ai mis plus haut ?

    Tiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CouleurLong = RGB(255, 255, 255)
    Ou pour être certain que la conversion se fait sans accroc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CouleurLong = CLng(RGB(255, 255, 255))

  6. #6
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 296
    Points : 103
    Points
    103
    Par défaut
    OUI mais je recois l'information sous forme de string

    donc st = "RGB(255,150,120)" c'est mon entrer

    et je le voudrais sous forme de long en sortie

    merci

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    ah ok

    dans ce cas, je te conseille de faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    Sub transforme(st as string )
    Dim code1, code2, code3 As Integer
     
    code1 = CInt(Mid(st, 5, 3))
    code2 = CInt(Mid(st, 9, 3))
    code3 = CInt(Mid(st, 13, 3))
     
    'Maintenant tu fais ta fonction RGB dans le cod
    MsgBox CLng(RGB(code1, code2, code3))
    End Sub
     
    sub main()
    call transforme("RGB(255,200,120)")
    end sub
    J'ai pris le cas où les codes couleurs sont sur 2 positions... je te conseille de faire quelques chose de plus souple pour recherhcer les valeurs comprises entre ( et , puis , et , puis entre , et )
    Comme çà, les cas avec un code couelur sur 2 positions seront pris en compte

  8. #8
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Citation Envoyé par cortex59 Voir le message
    OUI mais je recois l'information sous forme de string

    donc st = "RGB(255,150,120)" c'est mon entrer

    et je le voudrais sous forme de long en sortie

    merci
    C'est maintenant que tu le dis? Tu te rends bien compte que le message original ne mentionne pas ce léger détail?

    Citation Envoyé par cortex59 Voir le message
    bonjour j'ai une couleur sous la forme RGB(255,255,255) est je voudrais la convertir dans un long

    des solutions?
    Il faudra utiliser le Script Control et faire un Eval de la chaîne en question ou encore extraire les valeurs de RGB avec des fonctions de chaîne comme l'a montré helios.

    Pour utiliser le Script Control, tu ajoutes une référence à Microsoft Script Control 1.0 par le menu Outils, Références. Voici un exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
        MsgBox Convertir("RGB( 255, 255, 255)")
    End Sub
     
    Function Convertir(chaineRVB As String) As Long
        Dim scriptCtrl As ScriptControl, valeur As Long
        Set scriptCtrl = New ScriptControl
        scriptCtrl.Language = "VBScript"
        valeur = CLng(scriptCtrl.Eval(chaineRVB))
        Set scriptCtrl = Nothing
        Convertir = valeur
    End Function

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonsoir,

    et dire qu'helios77 avait (dans la réponse 4 à adapter à son cas) sa réponse toute faite, ici (pour ce qui est de l'extraction des 3 composantes) ... il lui suffisait d'ajouter tout bêtement, pour chaque élément de l'array obtenu, la fonction Val :

    http://www.developpez.net/forums/d59...a/#post3548362

Discussions similaires

  1. Réponses: 23
    Dernier message: 12/02/2014, 13h27
  2. convertir une image couleur en noir et blanc en java
    Par hadjila20 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 02/11/2012, 04h32
  3. convertir une image en niveau de gris en niveau de couleur
    Par roulian46 dans le forum Graphisme
    Réponses: 1
    Dernier message: 20/05/2011, 06h56
  4. Convertir une image couleur en niveau de gris
    Par mine87 dans le forum Flex
    Réponses: 1
    Dernier message: 29/12/2009, 13h20
  5. Convertir une couleur RGB au format TSL
    Par bobyx dans le forum Assembleur
    Réponses: 4
    Dernier message: 19/11/2007, 02h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo