Convertir RGB en Hex

Bonjour à Tous & Toutes,

Compte-rendu des évènements sur objets ::

J'ai crée 2 usf dynamiquement :

La pemiere sert à récupérer dynamiquement tous les codes utilisés et activer un traitement selon le clic sur le bouton (cela fonctionne très bien)

La seconde est une palette de couleurs permettant de modifier la couleur de la cellule. et insérer le code couleur (cela fonctionne très bien) ; celle-ci est identique à la palette pour les couleur des objets.

Sujet probématique donnant lieu à ce post :

Mais voilà, le code couleur est un nombre il me faudrait la conversion du chiffre en hex car le code sera récupérer pour les boutons soit pour les propriétés BackColor ou BorderColor.

Exemple concret:

ActiveCell.Offset="&" & Right(Hex(RGBC),2) & Left(Right(Hex(RGBC),4),2)  _
& Left(Hex(RGBC),2)

Résultat obtenu dans ma cellule :

A1 = &FFC080 soit RGBC = (8438015)

Résultat souhaité :

A1=&H0080C0FF

Il manque les 4 derniers digits

Alternative non souhaitée :

Dois-je créer des select case pour chaque RGB obtenu il y en a 49

Recherche en-cours sur le web:

Je ne trouve pas le complément sur la toile

Messieurs, pouvez-vous me conseiller ?

En vous remerciant pour l'attention portée à ma demande.

Cdt

Air_2

Bonjour

Si je ne m'abuse pas

Que tu marques en hexa ou en décimal le résultat est le même

Me.CommandButton1.BackColor = 8438015
Me.CommandButton3.BackColor = &H80C0FF

On obtient la même couleur

Tu peux faire aussi

Me.CommandButton1.BackColor = 8438015
Me.CommandButton3.BackColor = "&H" & Hex(8438015)

Bonjour senseï (^_-),

Je vais essayer ta proposition mais avant Grand MERCI, toujours disponible et avec des solutions alternatives.

Hélas :

ActiveCell.Offset="&" & Right(Hex(RGBC),2) & Left(Right(Hex(RGBC),4),2)  _
& Left(Hex(RGBC),2)
' OU
ActiveCell.Offset="&" & Hex(RGBC)

Il me manque les 4 dernièrs digits mais cela m'evite de taper l'algorithme. ou alors je dois vraiment aller jusqu'au bout de celui-ci.

Je te tiens informé Senseï (^_-)

Air_2

Bonjour

Pourquoi t'emmer t'embêter à transformer le nombre en hexa

La propriété BackColor ou ForeColor accepte les nombres en base 10

Pour BorderColor je ne connais pas avec 2003

PS

Pour info

Obtenir sur 8 caractères ton nombre en Hexa

NombreHexa = Right("00000000" & Hex(8438015), 8)

Bonjour Senseï (^_-)

Vraiment je suis un boulet, voila le code :

ActiveCell.Offset = "&H00" & Hex (RGBC)

Je dois aller jusqu'au bout afin de m'éviter des surprises je suis sur ce bug depuis 7H00 du matin.

Si le code ne l'accepte pas je devrai recommencer toute mon approche 1 jour HOM dessus.

Grand Merci Senseï

Bon week-end

Air_2

Bonjour

J'avais édité mon message

Réponse plus générique car valable pour les nombres plus petits

Bonsoir,

J'ai ré-ouvert le post car j'ai un petit soucis avec ce coquin de chiffre Hex :

Problème rencontre :

Variable objet ou variable de bloc With non définie "Message=91")

Public Collect As Collection
Public CollectBT As Collection
Public CollectTx As Collection
Private Tx As MSForms.TextBox
Public LigneFin As Variant

Private Sub UserForm_Initialize()
Dim Bouton As MSForms.CommandButton
Dim Fr As MSForms.Frame
Dim Lig As Integer, Col As Integer
Dim Cl As ClasBT

    Set Collect = New Collection
    Set CollectBT = New Collection
    Set CollectTx = New Collection
'----- Initialise l'userform ---------------
    With Me
    .BackColor = &HC0FFFF
    .Height = 900
    .Width = 820
    .Caption = "Utilitaire d'export Code Rubrique"
    End With
'------ Créer la ComboBox1 ------------------
'
'    Set ObjComboBox = Me.Controls.Add("Forms.ComboBox.1", "ComboBox1", True)
'    With ObjComboBox
'    .Name = "Choix2"
'    .FontSize = 25
'    .Move 100, 6, 500, 30
'    .BackColor = &H80FFFF
'    End With

'------ Créer la TextBox ------------------
    Set Tx = Me.Controls.Add("Forms.TextBox.1", "TextBox1", True)
        Set Cl = New ClasBT 'Ajouter à la collection de classe
        Set Cl.Texte = Tx
        CollectTx.Add Cl

    With Tx
        .Name = "Rubrique"
        .Move 600, 6, 80, 40
        .FontSize = 18
        .FontBold = True
        .TextAlign = fmTextAlignRight
        .BackColor = &HC00000
        .ForeColor = &HFFFFFF

     End With
'------ Créer le Frame1 ---------------------

    Set Fr = Me.Controls.Add("Forms.frame.1", "Frame1", True)
    Fr.Move 6, 54, 800, 800
    Fr.BackColor = &HFFC0FF
    Fr.BorderStyle = fmBorderStyleSingle
    Fr.BorderColor = &H800080

  '------ trier la colonne J ------------------

        F1.Rows("10:" & Rows.Count).Select
        ActiveWorkbook.Worksheets("Données Importées").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Données Importées").Sort.SortFields.Add Key:=Range _
        ("J10:J" & Rows.Count), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
        With ActiveWorkbook.Worksheets("Données Importées").Sort
        .SetRange Range("A10:R" & Rows.Count)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        End With

 '------ Nombre de textbox selon la colonne J ------------------

                    Dim LigneFin As Variant
                    Dim a, b, c, d As Variant
                    Dim Valeur As Variant

                    LigneFin = F1.Range("a" & Rows.Count).End(xlUp).Row

                    For a = 10 To LigneFin
                    If a = 10 Then
                    Valeur = F1.Cells(a, 10)
                    b = 1
                    Else
                    If a > 10 And F1.Cells(a, 10) <> Valeur Then
                    Valeur = F1.Cells(a, 10)
                        b = b + 1
                    Else: End If

                    End If
                    Next a

'------ Création du tableau ------------------

Dim TB As Variant
ReDim TB(b) 'redimensionne le tableau avant une nouvelle utilisation

For c = 10 To LigneFin
    If c = 10 Then
    Valeur = F1.Cells(c, 10)
        d = 0
    TB(d) = CStr(Valeur)
    d = d + 1
    Else
        If c > 10 And F1.Cells(c, 10) <> Valeur Then
        Valeur = F1.Cells(c, 10)
        TB(d) = CStr(Valeur)
        d = d + 1
        Else: End If

    End If

Next c

'------ Création des boutons ------------------
' selon le tableau ci-dessus  --------------------

Dim i As Variant
Dim RGBC As Variant
Dim Val As Variant
Dim L As Variant

c = b / 14
    For Lig = 0 To c

  i = i
            For Col = 0 To 14
                Set Bouton = Fr.Controls.Add("Forms.CommandButton.1", "Bt" & i, True)
                CollectBT.Add Bouton, CStr(i) 'Ajouter à la collection d'objet
                    Set Cl = New ClasBT 'Ajouter à la collection de classe
                Set Cl.GroupBoutons = Bouton
                Collect.Add Cl

                        '---------------- Je désactive cette partie et cela fonctionne
                        With F14
                       Val = TB(i)
                       L = .Range("A:A").Find(TB(i)).Row
                       RGBC = .Cells(L, 3).Value
                        End With

                   '--------- et donc le BackColor est lui aussi désactivé                 

                    With CollectBT(CStr(i))  'Initialise les boutons
'                        .BackColor = "&H00" & Hex(RGBC)
                        .ForeColor = &HFFFFFF
                        .Tag = i
                        .Move 10 + (Col * 50), 10 + (Lig * 50), 40, 26
                        .FontSize = 10
                        .FontBold = True
                        If i = b - 1 Then Exit Sub
                        .Caption = TB(i)
                    End With
            i = i + 1
            Next Col
           Next Lig

 'Erase TB 'libere la mémoire du tableau a voir ou je le positionne

End Sub

Si tu avais une idée ?

Je vais faire prendre l'air, pour y réfléchir mais je suis bien parti pour un dimanche sur ces lignes sans ton aide.

A très vite,

Air_2

Bonjour

Val est un mot clé réservé ne pas l'utiliser en tant que variable

Je repose ma question

Pourquoi tu passes par la transformation de ton nombre en Hexa ?

.BackColor = RGBC

Est valable

Bonsoir,

Je pensais mais mal, que mon problème venait du code couleur alors que non, j'ai respecté ta recommandation.

Elle fonctionne, mon problème est ailleurs...

Il provient de la source ou ce trouve le code couleur. et je n'arrive pas a supprimer l'error et pourtant j'ai changé ma variable :

Val par ValRecupere.

Et la je bloque.

Si tu avais une autre hypothèse, je suis preneur.

A très vite

Air2

Bonsoir

Dans ce cas le fichier avec la macro serait très utile

A suivre

Bonsoir,

J'ai ferme le post car tu m'as apporté la réponse et grand merci.

Cela peut intéresser les visiteurs je savais ou était mon probléme donc j'ai fait ce qui suit :

                    With F14
                       Val = TB(i)
                       L = .Range("A:A").Find(TB(i)).Row
                       RGBC = .Cells(L, 3).Value
on error goto step1
                        End With

step1:
Dim erreur as variant
erreur = ValRecupere

'Conclusion le message disait que la recherche avait pour résultat = "" 

Grand merci encore Senseï (^_-) pour ta patience et tes réponses rapides.

Bonne soirée à toi , tous & toutes

Air_2

Rechercher des sujets similaires à "convertir rgb hex"