OVH Cloud OVH Cloud

Couleurs dans UserForm

4 réponses
Avatar
YeTi
Bonjour,

J'aimerais que, quand une OptionButton (correspondant à une couleur) est
cochée, un "Label" se colorie dans la même couleur... J'arrive à en faire 1,
mais si je fais de cette façon, je vais me retrouver avec 56x le même code à
une ou deux valeur prêt...

Voilà mon code avec 3 OptionButton:

Private Sub OptionButton1_Click()
'Noir
If OptionButton1 Then
Me.Controls("Label1").BackColor = &H0
Me.Controls("Label2").BackColor = &H0
End If
End Sub

Private Sub OptionButton2_Click()
'Blanc
If OptionButton2 Then
Me.Controls("Label1").BackColor = &HFFFFFF
Me.Controls("Label2").BackColor = &HFFFFFF
End If
End Sub

Private Sub OptionButton43_Click()
'Citron Vert
If OptionButton43 Then
Me.Controls("Label1").BackColor = &HCE9C&
Me.Controls("Label2").BackColor = &HCE9C&
End If


Je tiens juste à préciser que le numéro attribué aux 56 OptionButton
correspond aux 56 couleurs de Excel.

Merci d'avance
End Sub

4 réponses

Avatar
anonymousA
Bonjour,

si j'ai tout compris , il faut colorier 2 labels de la couleur
sélectionnée par un des 56 optionButton.

Je te propose la manip suivante. d'abord créer une feuille cachée
(appelée ici feuillecachée) où sont répertoriées les couleurs d'Excel
avec leur correspondance en RGB. Tu pourras trouver ca sur Excelabo à
l'adresse suivante
http://www.excelabo.net/xl/formats_ancien.php#chartescouleurs en
téléchargeant le classeur de GD.
Cette manip est à priori nécéssaire car la correspondance des couleurs
Excl avec RGB n'a pas de régularité suffisante pour permettre une boucle
facile et il vaut mieux avoir simplement en stock cette correspondance.

Ensuite , tu copies ces couleurs et les correspondances dans la feuille
"feuillecachée". Tu appelles la plage des correspondances RGB et des
index de couleurs excel correspondantes par le nom "couleurs". tu
appelles la liste des nombres ( de 0 à 55) représentant couleurs d'Excel
"nombres".
Je suppose par définition que tes optionsbuttons portent tous le nom
OptionButton1 , OptionButton2,OptionButton3, etc....

Puis tu crées un module de classe appelée Classe1 ( p.e) et tu écris
dans ce module les instructions suivantes

Public WithEvents optb As MSForms.OptionButton

Private Sub optb_Click()

A = 0

If IsNumeric(Right(optb.Name, 2)) Then
A = 2
ElseIf IsNumeric(Right(optb.Name, 1)) Then
A = 1
End If

If A <> 0 Then
With Application.WorksheetFunction
Red = .Index(Sheets("feuillecachée).Range("couleurs"),
.Match(CInt(Right(optb.Name, A)),
Sheets("feuillecachée).Range("nombres"), 0), 1)
Green = .Index(Sheets("feuillecachée).Range("couleurs"),
.Match(CInt(Right(optb.Name, A)),
Sheets("feuillecachée).Range("nombres"), 0), 2)
Blue = .Index(Sheets("feuillecachée).Range("couleurs"),
.Match(CInt(Right(optb.Name, A)),
Sheets("feuillecachée).Range("nombres"), 0), 3)
With UserForm1
.Controls("Label1").BackColor = RGB(Red, Green, Blue)
.Controls("Label2").BackColor = RGB(Red, Green, Blue)
End With
End With
End If

End Sub

Dans le module du UF tu écris

Dim tabop(1 To 56) As New Classe1


Private Sub UserForm_Initialize()

for I=1 to 56
Set tabop(I).optb = Me.Controls("OptionButton" & I-1)
next

End Sub

Ce faisant, tous tes optionsbuttons seront des instances du module de
classe Classe1 et se comporteront tous comme des répliques de optb du
module de classe.
En conséquence, l'extraction du dernier chiffre ou des 2 derniers
chiffres du nom de l'optionbutton déclenchera la recherche de la ligne
correspondante dans la plage nombres qui permettra via la fonction index
de repérer dans la plage couleurs à la bonne ligne quelle seront les
valeurs des paramètres Rouge, Vert, Bleu nécéssaires à RGB.
Les labels 1 et 2 seront alors coloriés de la couleur correspondante.

J'espère avoir été clair mais rien n'est moins sur.

Le principe étant là , tu peux étendre cette méthode à plusieurs autres
labels voire même en triturant un peu le code à un label diférent par
optionbutton sous réserve d'avoir une régularité bijective entre les n°
d'optionbutton et les n° de label.

A+

Bonjour,

J'aimerais que, quand une OptionButton (correspondant à une couleur) est
cochée, un "Label" se colorie dans la même couleur... J'arrive à en faire 1,
mais si je fais de cette façon, je vais me retrouver avec 56x le même code à
une ou deux valeur prêt...

Voilà mon code avec 3 OptionButton:

Private Sub OptionButton1_Click()
'Noir
If OptionButton1 Then
Me.Controls("Label1").BackColor = &H0
Me.Controls("Label2").BackColor = &H0
End If
End Sub

Private Sub OptionButton2_Click()
'Blanc
If OptionButton2 Then
Me.Controls("Label1").BackColor = &HFFFFFF
Me.Controls("Label2").BackColor = &HFFFFFF
End If
End Sub

Private Sub OptionButton43_Click()
'Citron Vert
If OptionButton43 Then
Me.Controls("Label1").BackColor = &HCE9C&
Me.Controls("Label2").BackColor = &HCE9C&
End If


Je tiens juste à préciser que le numéro attribué aux 56 OptionButton
correspond aux 56 couleurs de Excel.

Merci d'avance
End Sub


Avatar
LSteph
Bonjour Yeti,
Cet exemple http://cjoint.com/?bEkMKb7aCr
suppose un Userform1 et que les optionbuttonS
ont chacun leur propre .backcolor
''***************
'Insère un module de classe et à l'aide de la fenêtre propriétés
'renomme le ClassOpt puis mets ceci:
'''********
Public WithEvents MonOpt As MSForms.OptionButton
Private Sub MonOpt_Click()
UserForm1.Label1.BackColor = MonOpt.BackColor
UserForm1.Label2.BackColor = MonOpt.BackColor
End Sub
'''*******
''****Ensuite dans le code de l'UF****
Private MesOpt() As New ClassOpt
Private Sub UserForm_Initialize()
Dim elt As Control, I&
For Each elt In Me.Controls
If TypeName(elt) = "OptionButton" Then
ReDim Preserve MesOpt(0 To I)
Set MesOpt(I).MonOpt = elt
I = I + 1
End If
Next elt
End Sub
Private Sub UserForm_Terminate()
Dim I&
For I = 0& To UBound(MesOpt)
Set MesOpt(I) = Nothing
Next I
End Sub
'''*************
'lSteph
"YeTi" a écrit dans le message de news:

Bonjour,

J'aimerais que, quand une OptionButton (correspondant à une couleur) est
cochée, un "Label" se colorie dans la même couleur... J'arrive à en faire
1,
mais si je fais de cette façon, je vais me retrouver avec 56x le même code
à
une ou deux valeur prêt...

Voilà mon code avec 3 OptionButton:

Private Sub OptionButton1_Click()
'Noir
If OptionButton1 Then
Me.Controls("Label1").BackColor = &H0
Me.Controls("Label2").BackColor = &H0
End If
End Sub

Private Sub OptionButton2_Click()
'Blanc
If OptionButton2 Then
Me.Controls("Label1").BackColor = &HFFFFFF
Me.Controls("Label2").BackColor = &HFFFFFF
End If
End Sub

Private Sub OptionButton43_Click()
'Citron Vert
If OptionButton43 Then
Me.Controls("Label1").BackColor = &HCE9C&
Me.Controls("Label2").BackColor = &HCE9C&
End If


Je tiens juste à préciser que le numéro attribué aux 56 OptionButton
correspond aux 56 couleurs de Excel.

Merci d'avance
End Sub


Avatar
YeTi
Merci bcp!

Après qq modifications ça marche parfaitement!


Bonjour Yeti,
Cet exemple http://cjoint.com/?bEkMKb7aCr
suppose un Userform1 et que les optionbuttonS
ont chacun leur propre .backcolor
''***************
'Insère un module de classe et à l'aide de la fenêtre propriétés
'renomme le ClassOpt puis mets ceci:
'''********
Public WithEvents MonOpt As MSForms.OptionButton
Private Sub MonOpt_Click()
UserForm1.Label1.BackColor = MonOpt.BackColor
UserForm1.Label2.BackColor = MonOpt.BackColor
End Sub
'''*******
''****Ensuite dans le code de l'UF****
Private MesOpt() As New ClassOpt
Private Sub UserForm_Initialize()
Dim elt As Control, I&
For Each elt In Me.Controls
If TypeName(elt) = "OptionButton" Then
ReDim Preserve MesOpt(0 To I)
Set MesOpt(I).MonOpt = elt
I = I + 1
End If
Next elt
End Sub
Private Sub UserForm_Terminate()
Dim I&
For I = 0& To UBound(MesOpt)
Set MesOpt(I) = Nothing
Next I
End Sub
'''*************
'lSteph
"YeTi" a écrit dans le message de news:

Bonjour,

J'aimerais que, quand une OptionButton (correspondant à une couleur) est
cochée, un "Label" se colorie dans la même couleur... J'arrive à en faire
1,
mais si je fais de cette façon, je vais me retrouver avec 56x le même code
à
une ou deux valeur prêt...

Voilà mon code avec 3 OptionButton:

Private Sub OptionButton1_Click()
'Noir
If OptionButton1 Then
Me.Controls("Label1").BackColor = &H0
Me.Controls("Label2").BackColor = &H0
End If
End Sub

Private Sub OptionButton2_Click()
'Blanc
If OptionButton2 Then
Me.Controls("Label1").BackColor = &HFFFFFF
Me.Controls("Label2").BackColor = &HFFFFFF
End If
End Sub

Private Sub OptionButton43_Click()
'Citron Vert
If OptionButton43 Then
Me.Controls("Label1").BackColor = &HCE9C&
Me.Controls("Label2").BackColor = &HCE9C&
End If


Je tiens juste à préciser que le numéro attribué aux 56 OptionButton
correspond aux 56 couleurs de Excel.

Merci d'avance
End Sub







Avatar
LSteph
(?chez mi , cela marche sans modif!)
;o) tant mieux si tu as pu adapter
si tu ne veux pas colorier les optionbuttons tu peux utiliser le tag
et y caser au préalable tes codes couleur avec une boucle .

lSteph


"YeTi" a écrit dans le message de news:

Merci bcp!

Après qq modifications ça marche parfaitement!


Bonjour Yeti,
Cet exemple http://cjoint.com/?bEkMKb7aCr
suppose un Userform1 et que les optionbuttonS
ont chacun leur propre .backcolor
''***************
'Insère un module de classe et à l'aide de la fenêtre propriétés
'renomme le ClassOpt puis mets ceci:
'''********
Public WithEvents MonOpt As MSForms.OptionButton
Private Sub MonOpt_Click()
UserForm1.Label1.BackColor = MonOpt.BackColor
UserForm1.Label2.BackColor = MonOpt.BackColor
End Sub
'''*******
''****Ensuite dans le code de l'UF****
Private MesOpt() As New ClassOpt
Private Sub UserForm_Initialize()
Dim elt As Control, I&
For Each elt In Me.Controls
If TypeName(elt) = "OptionButton" Then
ReDim Preserve MesOpt(0 To I)
Set MesOpt(I).MonOpt = elt
I = I + 1
End If
Next elt
End Sub
Private Sub UserForm_Terminate()
Dim I&
For I = 0& To UBound(MesOpt)
Set MesOpt(I) = Nothing
Next I
End Sub
'''*************
'lSteph
"YeTi" a écrit dans le message de news:

Bonjour,

J'aimerais que, quand une OptionButton (correspondant à une couleur)
est
cochée, un "Label" se colorie dans la même couleur... J'arrive à en
faire
1,
mais si je fais de cette façon, je vais me retrouver avec 56x le même
code
à
une ou deux valeur prêt...

Voilà mon code avec 3 OptionButton:

Private Sub OptionButton1_Click()
'Noir
If OptionButton1 Then
Me.Controls("Label1").BackColor = &H0
Me.Controls("Label2").BackColor = &H0
End If
End Sub

Private Sub OptionButton2_Click()
'Blanc
If OptionButton2 Then
Me.Controls("Label1").BackColor = &HFFFFFF
Me.Controls("Label2").BackColor = &HFFFFFF
End If
End Sub

Private Sub OptionButton43_Click()
'Citron Vert
If OptionButton43 Then
Me.Controls("Label1").BackColor = &HCE9C&
Me.Controls("Label2").BackColor = &HCE9C&
End If


Je tiens juste à préciser que le numéro attribué aux 56 OptionButton
correspond aux 56 couleurs de Excel.

Merci d'avance
End Sub