[VBA] équivalent de "Me" pour une CheckBox

F22Raptor

XLDnaute Impliqué
Hello
J'utilise parfois Me pour désigner le UserForm sur lequel je suis (dans un code d'Initialize par exemple).

Ici, j'ai une dizaine de codes CheckBox1_Click dans lequel je paramètre la couleur du texte de la checkbox quand elle est cliquée ou pas.

J'utilisais un Me.Forecolor mais ça ne passe pas ...
Dommage car ça m'aurait permis de répéter le même code pour les N procédures CheckboxN_click ...

Il y a quelque chose qui me permettrait d'avoir le même code, plutôt que de spécifier CheckBox1, CheckBox2, .... à chaque procédure ?

Merci !
 

F22Raptor

XLDnaute Impliqué
Re : [VBA] équivalent de "Me" pour une CheckBox

Je me suis mal exprimé !
Les deux procédures suivantes n'ont pas le même code : il faut modifier le nom de la boîte.
Alors que si je pouvais taper Me.forecolor=...... je n'aurais plus qu'à dupliquer exactement le même code pour chaque procédure.
Mais Me ne semble pas marcher pour ça


Private CheckBox1_Click()
CheckBox1.forecolor=RGB(0,175,50)
End Sub

Private CheckBox2_Click()
CheckBox2.forecolor=RGB(0,175,50)
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : [VBA] équivalent de "Me" pour une CheckBox

Bonsoir.
Si vous ne voulez plus être obligé d'écrire une procédure individuelle pour chaque contrôle afin de détecter son changement, ce que je comprends très bien, c'est possible. Mais il va vous falloir des modules de classe. Beaucoup de modules de classe. Un pour chaque type de contrôle + deux modules d'interface pour les faire communiquer avec l'UserForm via un évènement unique.
 

systmd

XLDnaute Occasionnel
Re : [VBA] équivalent de "Me" pour une CheckBox

Bonjour,

Code:
Private Sub CheckBox1_Click()
 CBClick
End Sub

Private Sub CheckBox2_Click()
 CBClick
End Sub

Private Sub CheckBox3_Click()
 CBClick
End Sub

' A mettre dans le code de votre USF
Sub CBClick()
 Me.ActiveControl.ForeColor = RGB(0, 175, 50)
End Sub
 

F22Raptor

XLDnaute Impliqué
Re : [VBA] équivalent de "Me" pour une CheckBox

je m'en suis sorti par une pirouette sans vraiment répondre à ma question :
Ca allège un peu le code, mais ça demande encore une personnalisation du code de chaque Box


Function ChangeCouleurBox(NomBox as String)

Controls(NomBox).ForeColor = RGB(0,176, 50)

End Function


Private Sub Box1_Click()

ChangeCouleurBox ("Box1")

End Sub
 
Dernière édition:

PMO2

XLDnaute Accro
Re : [VBA] équivalent de "Me" pour une CheckBox

Bonjour,

Puisque vous ne voulez pas passer par un module de Classe, essayez l'astuce suivante qui utilise l'événement UserForm_MouseMove de l'UserForm.
Code:
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim CTR As Control
'---
For Each CTR In Me.Controls
  If InStr(1, CTR.Name, "CheckBox") > 0 Then
    If CTR = True Then
      CTR.ForeColor = RGB(0, 175, 50)
    Else
      CTR.ForeColor = RGB(0, 0, 0)
    End If
  End If
Next CTR
End Sub
 

Pièces jointes

  • Piste pour F22Raptor.xlsm
    20.3 KB · Affichages: 32

Dranreb

XLDnaute Barbatruc
Re : [VBA] équivalent de "Me" pour une CheckBox

Pour moi, ce qui est simple c'est une programmation courte et claire dans la partie applicative de la programmation, donc dans l'userform, et des modules de service qui ne se retouchent pas, quelle que soit leur taille et leur complexité, qui demeureront de toutes façon de l'ordre de quelques pourcents de tout ce qu'il y a d'autre dans les bibliothèques Excel et MSForms.

Plutôt que se passer le nom du contrôle à votre procédure ChangeCouleurBox, passez lui donc plutôt le contrôle lui même !
VB:
Function ChangeCouleurBox(ByVal Box As MSForms.CheckBox)
Box.ForeColor = RGB(0, 176, 50)
End Function

Private Sub Box1_Click()
ChangeCouleurBox Box1
End Sub
 

F22Raptor

XLDnaute Impliqué
Re : [VBA] équivalent de "Me" pour une CheckBox

@Dranreb ah ben oui, tant qu'à faire, ça aurait été plus simple ! :)

Thx !

@systmd : je me demande si ce n'est pas un pb de ma version qui ne prend pas en charge l'ActiveControl dans ce cas.
Quand j'ouvre ton fichier, il me dit qu'il l'ouvre en lecture seule, car pas créé dans le même version, etc ...
 
Dernière édition:

Discussions similaires

H
Réponses
19
Affichages
5 K

Statistiques des forums

Discussions
311 737
Messages
2 082 036
Membres
101 878
dernier inscrit
1475214