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é
Et à chaque fois que j'appuie sur le bouton qui me lance le userform, j'ai droit à l'erreur suivante :
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
"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 :
Le traitement s'arrête à chaque fois sur l'instruction Userform1.show
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
Quelqu'un aurait-il une idée du pourquoi une telle erreur ??!
Merci d'avance de votre aide.
Partager