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 :

Conversion couleur RGB en couleur Hexa [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut Conversion couleur RGB en couleur Hexa
    Bonjour à tous,

    Voici mon petit problème, j'ai une colonne (B) avec un numéro de couleur (de 0 à 255) et j'aimerai, en colonne C le code couleur en Hexadécimal de la couleur en colonne B...

    J'ai déjà récupéré un bout de code qui me coloriait les cases de la colonne B de la couleur de la valeur couleur dans cette cellule...

    En bref, en B45 j'ai 6 et la couleur de cette cellule se colorie en magenta. J'aimerai juste à coté (colonne C), ce même code couleur (ex : 6) mais en Hexadécimal..

    J'ai déjà ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Sheets("Calques").Select
        Set Feuille = ThisWorkbook.Worksheets("CouleurRGB")
        For ligne = 2 To 250
            couleurC = Cells(ligne, 2)    'lecture valeur
            If couleurC <> "" And couleurC <> "FIN" Then
                r = Feuille.Cells(couleurC, 2)
                g = Feuille.Cells(couleurC, 3)
                b = Feuille.Cells(couleurC, 4)
                Cells(ligne, 2).Interior.Color = RGB(r, g, b)
                Cells(ligne, 3).Value = "&H" & Hex(CLng(RGB(r, g, b)))
            Else
                Cells(ligne, 2).Interior.Color = RGB(255, 255, 255)
            End If
        Next ligne
    Mais la ligne 10 ( Cells(ligne, 3).Value = "&H" & Hex(CLng(RGB(r, g, b)))" arrête la boucle "For ligne" et la reprend au début, ce qui fait que seule la première ligne est traité indéfiniment...

    Et je ne comprend pas pourquoi...

    Dans ma feuille "CouleurRGB", j'ai le code couleur (an colonne A) et les valeurs RGB dans les colonnes B, C et D qui représentent respectivement les valeurs RGB, exemple :
    A	B	C	D
    3	0	255	0
    4	0	255	255
    5	0	0	255
    6	255	0	255
    7	255	255	255

    Merci pour l'aide éventuelle...

    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu...
    Bonjour
    c'est assez étonnant la conversions fait tout seul dans une variable
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    couleur = RGB(200, 155, 210)
        MsgBox "&H" & Hex(couleur)
    edit pour faire simple
    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
    Sheets("Calques").Select
        Set Feuille = ThisWorkbook.Worksheets("CouleurRGB")
        For ligne = 2 To 250
            couleurC = Cells(ligne, 2)    'lecture valeur
            If couleurC <> "" And couleurC <> "FIN" Then
                r = Feuille.Cells(couleurC, 2)
                g = Feuille.Cells(couleurC, 3)
                b = Feuille.Cells(couleurC, 4)
                Cells(ligne, 2).Interior.Color = RGB(r, g, b)
                Cells(ligne, 3).Value = "&H" & Hex(Cells(ligne, 2).Interior.Color)' dans les parenthezes de hex il y a la couleur 
    ' si tu fait debug.print  Cells(ligne, 2).Interior.Color   ' tu aura la couleur en long  donc la conversion se fait tout seul 
            Else
                Cells(ligne, 2).Interior.Color = RGB(255, 255, 255)
            End If
        Next ligne
    End Sub
    mais a mon avis il y a un souci avec ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    r = Feuille.Cells(couleurC, 2)
                g = Feuille.Cells(couleurC, 3)
                b = Feuille.Cells(couleurC, 4)
    la variable couleurC n'est peut être pas la bonne variable utilisée a mon avis couleurC etant la valeur de la cellule je crois et non pas son index de ligne
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ligne 6, 7 et 8 de ton code il faudrait déjà remplacer la variable CouleurC par la variable ligne
    Attention que l'objet Cells qui n'est pas précédé par la variable objet Feuille lit et écrit dans la feuille nommée Calques
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut Oops, au temps pour moi...
    Bonjour à tous, et merci pour vos réponses.

    Au temps pour moi, cette macro est dans "Worksheet_Change", donc, dès que j’écris la couleur en Hexadécimale dans une cellule, il repart à zéro.

    Normal. Mais je ne sait pas comment bloqué "Worksheet_Change" pendant ma macro... Je sais déjà que ce n'est pas "Application.ScreenUpdating = False" mais je vais cherché dans le forum... Je ne sais pas encore où, mais j'y vais...

    Voici mon code au complet :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Sheets("Calques").Select
            Set Feuille = ThisWorkbook.Worksheets("CouleurRGB")
            For ligne = 2 To 250
                couleurC = Cells(ligne, 2)    'lecture valeur
                If couleurC <> "" And couleurC <> "FIN" Then
                    r = Feuille.Cells(couleurC, 2)
                    g = Feuille.Cells(couleurC, 3)
                    b = Feuille.Cells(couleurC, 4)
                    Cells(ligne, 2).Interior.Color = RGB(r, g, b)
                    Cells(ligne, 3).Value = "&H" & Hex(RGB(r, g, b))
                Else
                    Cells(ligne, 2).Interior.Color = RGB(255, 255, 255)
                End If
            Next ligne
    End Sub
    Et effectivement, les posts de Philippe Tulliez sont "illisibles" chez moi aussi...

    Merci encore...

    Denis...

    PS : J'ai trouvé, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = False
    Encore merci à ce forum qui est une mine pour le pauvre débutant que je suis...

    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re

    Alors en Français ce qui est dessous est encore faux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    couleurC = Cells(ligne, 2)    'lecture valeur
                If couleurC <> "" And couleurC <> "FIN" Then
                    r = Feuille.Cells(couleurC, 2)
                    g = Feuille.Cells(couleurC, 3)
                    b = Feuille.Cells(couleurC, 4)
    quand on utilise cells(x,y) pour cibler une cellule on utilise son index de ligne et pas sa valeur
    et comme couleurC est la valeur de la cells(ligne,2) donc choux blanc
    c'est impossible que ca fonctionne correctement
    exemple :
    a supposer que:
    dans ta cellule cells(ligne,2) =200 (200 etant la valeur pour R)
    ce qui te donne pour la ligne verte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    r = Feuille.Cells(200, 2)
    ce qui est dépourvu de sens dans une boucle par la variable i

    sinon je peut te l'expliquer en bulgaroafricajavanais si tu veux
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour Patrick,
    quand on utilise cells(x,y) pour cibler une cellule on utilise son index de ligne et pas sa valeur
    et comme couleurC est la valeur de la cells(ligne,2) donc choux blanc
    c'est impossible que ca fonctionne correctement
    C'est d'ailleurs ce que j'avais écrit dans ma réponse (fil #3) mais il est vrai totalement illisible à l'heure de sa publication.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour Patrick,

    C'est d'ailleurs ce que j'avais écrit dans ma réponse (fil #3) mais il est vrai totalement illisible à l'heure de sa publication.
    et moi avec la dernière ligne en post #2 mais j'ai du mal avec le javanobulgaroaffricain (je n'ai pas encore commencé a l'apprendre )


    Ps: tes messages s'affichent correctement maintenant
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, à titre documentaire, voir ici : Les couleurs en VBA Excel: Les équivalences Hex-Long-RGB

  9. #9
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Bonsoir à tous,

    Et mille mercis de vos aides...

    Je comprend vos observations, mais un problème m'interpelle. Ce code fonctionne très bien au buro, mais chez moi, il s'arrête à chaque "variable" en me disant "Projet ou bibliothèque introuvable"...

    Voici le code :
    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
    17
    18
    19
    Private Sub Worksheet_Change(ByVal Target As Range)
        Sheets("Calques").Select
        Application.EnableEvents = False
            Set Feuille = ThisWorkbook.Worksheets("CouleurRGB")
            For ligne = 2 To 250
                couleurC = Cells(ligne, 2).Value    'lecture valeur
                If couleurC <> "" Then
                    r = Feuille.Cells(couleurC, 2)
                    g = Feuille.Cells(couleurC, 3)
                    b = Feuille.Cells(couleurC, 4)
                    Cells(ligne, 2).Interior.Color = RGB(r, g, b)
                    CouleurHex = "&H" & Hex(RGB(r, g, b))
                    Cells(ligne, 3).Value = CouleurHex
                Else
                    Cells(ligne, 2).Interior.Color = RGB(255, 255, 255)
                End If
            Next ligne
        Application.EnableEvents = True
    End Sub
    Et je joins aussi le fichier XLSM (celui qui fonctionne au bureau et pas chez moi)...

    Merci à vous, je vais tenter de réécrire le code selon vos remarques.

    Denis (perplexe)...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  10. #10
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Re à tous,

    J'ai réécris mon code en tenant compte de vos observations, enfin, je l'espère. J'ai essayé de le faire "correctement", avec déclarations de variables et des objets...

    Le voici :
    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
    17
    18
    19
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Application.EnableEvents = False
        Dim FCible As Worksheet, FSource As Worksheet, Lign As Integer
        Dim Couleur, r, g, b As Integer
        Set FCible = Worksheets("Calques")
        Set FSource = Worksheets("CouleurRGB")
        Lign = 2
        Do While FCible.Cells(Lign, 1).Value <> ""
            Couleur = FCible.Cells(Lign, 2).Value
            If Couleur = 0 Then Application.EnableEvents = True: Exit Sub
            r = FSource.Cells(Couleur, 2)
            g = FSource.Cells(Couleur, 3)
            b = FSource.Cells(Couleur, 4)
            FCible.Cells(Lign, 2).Interior.Color = RGB(r, g, b)
            FCible.Cells(Lign, 3).Value = "&H" & Hex(RGB(r, g, b))
            Lign = Lign + 1
        Loop
        Application.EnableEvents = True
    End Sub
    Petit problème : VBA s'arrête et me surligne "Hex" en gras en ligne 15, et il me dit "Projet ou bibliothèque introuvable"...

    Et là, je suis bloqué...

    Merci à vous pour toute l'aide...

    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Regarde si tu as un référence manquante (Outils> Références...) serait maruqé MANQUANT
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  12. #12
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Merci Mercatog,

    J'ai effectivement une référence manquante, c'est "AXDBLib"... Et je la trouve où ? S'il te plait ? Mais après recherche sur le NET, AXDBLib est une référence AutoCAD... Et je n'ai rien d'AutoCAD dans mon projet actuel comme on peut le voir dans mon XLSM que j'ai joint dans un post précédent ? ?

    Et sinon, mon code est plus "propre" que mon premier post ? C'est juste un petit conseil que je demande, car généralement, je "bidouille" trop pour faire mes codes proprement, enfin, tel que vous les auriez fait... Ou plutôt, tel qu'il faudrait les faire...

    Denis...

    PS : je ne comprend rien, j'ai décoché les références manquantes et maintenant, ça fonctionne impeccablement... J'aimerais que quelqu'un m'explique la différence entre une référence manquante "cochée" et une référence manquante "décochée" ? ? ? Car après l'avoir décochée, elle n’apparaît plus dans la liste des références...

    Denis (dubitatif)...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  13. #13
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une référence manquante crée la zizanie, il suffit de la décocher spécialement quand elle ne sert à rien dans le code.

    Une référence utilisée mais manquante doit être réinstallée et enregistrée
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Au risque de me répéter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Do While FCible.Cells(Lign, 1).Value <> ""
            Couleur = FCible.Cells(Lign, 2).Value
            If Couleur = 0 Then Application.EnableEvents = True: Exit Sub
            r = FSource.Cells(Couleur, 2)
            g = FSource.Cells(Couleur, 3)
            b = FSource.Cells(Couleur, 4)
            FCible.Cells(Lign, 2).Interior.Color = RGB(r, g, b)
            FCible.Cells(Lign, 3).Value = "&H" & Hex(RGB(r, g, b))
            Lign = Lign + 1
        Loop
    couleur est ce bien le numérique que tu souhaite pour obtenir l'adresse de la cellule
    si c'est pas le cas alors c'est faux au risque même que si la valeur est supérieur a 255 sa plante

    et pour le format hex injecte lui plutôt un long ou la résultante de interior.color qui elle te donne un long
    soit si l'erreur sur couleur est avéré et la ligne sur hex continu a décorner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Do While FCible.Cells(Lign, 1).Value <> ""
            Couleur = FCible.Cells(Lign, 2).Value
            If Couleur = 0 Then Application.EnableEvents = True: Exit Sub
            r = FSource.Cells(lign, 2)
            g = FSource.Cells(lign, 3)
            b = FSource.Cells(lign, 4)
            FCible.Cells(Lign, 2).Interior.Color = RGB(r, g, b)
            FCible.Cells(Lign, 3).Value = "&H" & Hex( FCible.Cells(Lign, 2).Interior.Color )
            Lign = Lign + 1
        Loop
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Bonjour à tous,

    @Patrick, effectivement, Couleur est le numéro de la couleur contenu entre 1 et 255. D’ailleurs, mon code aurait dû être écrit comme çà pour éviter les dépassement de valeur "Couleur" :
    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
    17
    18
    19
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Application.EnableEvents = False
        Dim FCible As Worksheet, FSource As Worksheet, Lign As Integer
        Dim Couleur, r, g, b As Integer
        Set FCible = Worksheets("Calques")
        Set FSource = Worksheets("CouleurRGB")
        Lign = 2
        Do While FCible.Cells(Lign, 1).Value <> ""
            Couleur = FCible.Cells(Lign, 2).Value
            If Couleur <= 0 Or Couleur > 255 Then Application.EnableEvents = True: Exit Sub
            r = FSource.Cells(Couleur, 2)
            g = FSource.Cells(Couleur, 3)
            b = FSource.Cells(Couleur, 4)
            FCible.Cells(Lign, 2).Interior.Color = RGB(r, g, b)
            FCible.Cells(Lign, 3).Value = "&H" & Hex(FCible.Cells(Lign, 2).Interior.Color)
            Lign = Lign + 1
        Loop
        Application.EnableEvents = True
    End Sub
    @mercatog, j'ai compris le principe de référence manquante quand on veut l'utiliser et celle qui n'est pas ou mal installée. Mais par contre, ce que je ne comprend pas, c'est pourquoi dans mes références était cochée "MANQUANTE : AXDBLib" alors que je ne fais jamais appel à quoique ce soit qui y fait référence ? ?

    En tous cas, merci encore à tous...

    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion de RGB vers CIE LAB (couleurs)
    Par basesim dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 06/03/2012, 00h06
  2. Conversion de RGB vers CIE LAB (couleurs)
    Par basesim dans le forum C
    Réponses: 2
    Dernier message: 05/03/2012, 19h17
  3. Conversion couleur RGB en hexa
    Par konogan dans le forum Téléchargez
    Réponses: 0
    Dernier message: 04/10/2011, 13h41
  4. [RegExp] Conversion des couleurs RGB => Hexa dans textarea
    Par alias_is dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/04/2011, 19h15
  5. Réponses: 0
    Dernier message: 20/01/2010, 10h57

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