Bonjour à tous,

Je suis actuellement sur un projet VBA et je suis confronté au problème suivant : je cherche à faire du traitement d'événement sur des checkbox générées dynamiquement dans un userform. Je sais que l'on a accès à la fonction nomCheckbox_Click() si celle-ci est ajoutée manuellement. En cherchant ici et là sur internet, j'ai trouvé comment créer dynamiquement ces checkbox, voire de gérer le _click(). Voici le code que j'ai réalisé

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
30
31
32
33
34
35
36
37
38
For i = 0 To nbValeurInt - 1
     left = 10 + (Val(Sheets("Dictionnaire importe").Range("E" & i + valeurDebut).Value) - 1) * 50
     'Ajout d'un label   
     Set label = Me.Controls.Add("Forms.Label.1")
     With label
          .Name = "Label" & Sheets("Dictionnaire importe").Range("B" & i + valeurDebut).Value
          .Caption = Sheets("Dictionnaire importe").Range("C" & i + valeurDebut).Value
          .left = left
          .top = top
          .Height = 20
          .Width = 150
     End With
 
     ' Ajout de checkbox
     Set checkbox = Me.Controls.Add("Forms.CheckBox.1")
     With checkbox
          .Name = "Checkbox" & Sheets("Dictionnaire importe").Range("B" & i + valeurDebut).Value
          .Caption = ""
          .left = left + 150
          .top = top
          .Height = 12.75
          .Width = 10.5
          .Value = True
     End With
 
     ' Création de la méthode _Click en chaine de caractères
     laMacro = "Sub Checkbox" & Sheets("Dictionnaire importe").Range("B" & i + valeurDebut).Value & "_Click()" & vbCrLf
     laMacro = laMacro & "MsgBox()" & vbCrLf
     laMacro = laMacro & "End Sub"
 
     ' Ajout de la méthode au codeModule
     With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
          x = .CountOfLines + 1
          .InsertLines x, laMacro
     End With
 
     top = top + 25
Next i
Et à chaque fois que j'appuie sur le bouton qui me lance le userform, j'ai droit à l'erreur suivante :
"Erreur d'exécution '9' : l'indice n'appartient pas à la sélection"
Au passage, j'ai bien mis "faire confiance au projet VB" dans excel (au niveau de la sécurité des macros).
Voici en complément le code qui fait justement appel au userform :

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
Private Sub modifElemCoutBouton_Click()
    Dim nbValeurs As Integer
    Dim passe As Boolean
 
    nbValeurs = Val(Sheets("Parametrecalcul").Range("F5").Value)
    bon = False
 
    UserForm1.Show
 
    For i = 0 To nbValeurs - 1
        If Sheets("Dictionnaire importe").Range("B" & i + 3).Value = "CHARGINT" Then
            bon = True
            valeurDebut = i + 3
        End If
        If Val(Sheets("Dictionnaire importe").Range("E" & i + 3).Value) = 1 And Sheets("Dictionnaire importe").Range("B" & i + 3).Value <> "CHARGINT" And Sheets("Dictionnaire importe").Range("B" & i + 3).Value <> "COUTTRAIT" Then
            bon = False
        End If
        If bon = True Then
            UserForm1.Controls.Item("Checkbox" & Sheets("Dictionnaire importe").Range("B" & i + 3).Value).Value = True
        End If
    Next i
End Sub
Le traitement s'arrête à chaque fois sur l'instruction Userform1.show

Quelqu'un aurait-il une idée du pourquoi une telle erreur ??!

Merci d'avance de votre aide.