Bonjour,
J'ai une trentaine de checkboxes qui sont positionnées dans un userform et je souhaite faire un code unique pour l'ensemble en mettant en variable le numéro de ces checkboxes. J'ai trouvé une méthode qui est très proche de ce que je veux grâce à une très vieille discussion (2013) dont je vous mets la conclusion ci-dessous. Mon problème pour y arriver vient du fait que mes checkboxes sont contenues sur l'userform et non dans une feuille comme dans l'exemple, et donc je ne sais pas comment déclarer l'userform à la place de la feuille.
Help please !

Citation Envoyé par PMO2017 Voir le message
Bonjour,

Une piste avec le code suivant basé sur une classe.

1) créez un module de classe Class1 et copiez le code suivant
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
20
21
22
23
24
25
26
27
28
29
Public WithEvents CheckBoxGroup As MSForms.CheckBox
 
Private Sub CheckBoxGroup_Click()
Dim OL As OLEObject
Dim LB As MSForms.Label
Dim i&
Dim myItem$
'--- Détermine l'ID du CheckBox (les chiffres en final) ---
For i& = 1 To Len(CheckBoxGroup.Name)
  If IsNumeric(Mid(CheckBoxGroup.Name, i&, 1)) Then
    myItem$ = myItem$ & Mid(CheckBoxGroup.Name, i&, 1)
  End If
Next i&
'--- Recherche l'OLEObject correspondant  et l'affecte à une variable object MSForms.Label ---
Set OL = ActiveSheet.OLEObjects("Label" & myItem$ & "")
Set LB = OL.Object
'--- Change le caption et la couleur de fonds en fonction de la coche de la CheckBox ---
If CheckBoxGroup.Value Then
  LB.Caption = [b1]
  LB.BackColor = RGB(204, 255, 204)
Else
  LB.Caption = "Merci de valider"
  LB.BackColor = RGB(255, 204, 255)
End If
 
'--- On s'amuse avec d'autres propriétés (accessoirement) ---
LB.WordWrap = False
LB.AutoSize = True
End Sub
2) copiez le code suivant dans la fenêtre de code de ThisWorkbook
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Private Sub Workbook_Activate()
Call InitializeCheckBoxes(ThisWorkbook.Sheets("test")) 'à adapter par la feuille concernée
End Sub
 
Private Sub Workbook_Deactivate()
Set MyClass = Nothing
End Sub
3) copiez le code suivant dans un module Standard
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
Public MyClass As Classe1
Public CollCheckBoxes As Collection
 
Public Sub InitializeCheckBoxes(Feuille As Worksheet)
Dim OL As OLEObject
Set MyClass = Nothing
'---
Set CollCheckBoxes = New Collection
For Each OL In Feuille.OLEObjects
  If TypeOf OL.Object Is MSForms.CheckBox Then
    Set MyClass = New Classe1
    Set MyClass.CheckBoxGroup = OL.Object
    CollCheckBoxes.Add MyClass
  End If
Next OL
End Sub
4) renommez une feuille "test", créez un ActiveX CheckBox1 et un ActiveX Label1.
Sélectionnez les 2 contrôles, copiez les et collez les plusieurs fois de suite pour en avoir une quantité conséquente.
Les contrôles sont appariés de manière qu'à chaque CheckBoxX correspond un LabelX.

5) lancez la procédure "Workbook_Activate" qui est dans ThisWorkBook pour initialiser les contrôles CheckBox

Je mets le classeur exemple en pièce jointe pour faciliter.