Checkbox générées dynamiquement et _click
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:
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:
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.