Checkbox générées dynamiquement et événements (click)
OCamarade
Messages postés4Date d'inscriptionvendredi 9 octobre 2009StatutMembreDernière intervention18 octobre 2009
-
14 oct. 2009 à 12:46
OCamarade
Messages postés4Date d'inscriptionvendredi 9 octobre 2009StatutMembreDernière intervention18 octobre 2009
-
18 oct. 2009 à 14:41
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é
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"
Voici en complément le code qui fait justement appel au userform :
Private Sub modifElemCoutBouton_Click()
Dim nbValeurs As Integer
Dim passe As Boolean
nbValeurs = Val(Sheets("Parametrecalcul").Range("F5").Value)
bon = False
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
UserForm1.Show
End Sub
Le traitement s'arrête sur cette instruction :
UserForm1.Controls.Item("Checkbox" & Sheets("Dictionnaire importe").Range("B" & i + 3).Value).Value = True
Quelqu'un aurait-il une idée du pourquoi une telle erreur ??!
Merci d'avance de votre aide.
A voir également:
Checkbox générées dynamiquement et événements (click)
cs_Joh76
Messages postés47Date d'inscriptiondimanche 16 mars 2008StatutMembreDernière intervention14 octobre 20093 14 oct. 2009 à 20:51
Bonjour,
Je dirais que le contrôle que tu veux sélectionner n'existe pas dans ton userform1.
Il faudrait mettre un point d'arrêt sur cette instruction puis ajouter
debug.print "Checkbox" & Sheets("Dictionnaire importe").Range("B" & i + 3).Value
juste avant cette ligne afin de voir dans la fenêtre exécution le nom du contrôle appelé.
OCamarade
Messages postés4Date d'inscriptionvendredi 9 octobre 2009StatutMembreDernière intervention18 octobre 2009 18 oct. 2009 à 14:41
Bonjour Joh76,
En étant passé par le débuggueur, j'ai pu voir que l'erreur vient surtout de l'ajout du code de la fonction _click au code du module, cad la portion suivante :
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
x = .CountOfLines + 1
.InsertLines x, laMacro
End With
Ce qui expliquerait pourquoi le contrôle n'existe pas, vu que ça bug quand je l'ajoute au code du module.