CheckBox générés at-runtime dans un UserForm
Bonjour,
je me permet de faire a nouveaux appel à ce forum car j'ai un nouveau problème.
je crée un UserForm dans le qu'elle je génère des CheckBox en fonction du nombre de cellule non-vide dans un plage donner.
Ce qui semble bien fonctionner grâce au code ci dessous :
Private Sub UserForm_Initialize()
Dim sel As Range
Dim top As Long
For Each sel In Feuil2.Range("A2:A20")
If sel <> "" Then
top = top + 30
Set Cbx = UserForm1.Controls.Add("Forms.CheckBox.1") 'ajoute une nouvelle checkbox et l'assigne a l'objet 'Cbx'
Cbx.Caption = sel.Value
Cbx.Name = sel.Value
Cbx.Left = 10
Cbx.top = top
End If
Next sel
End Subpour être honnête j'ai trouver le code qui permet de génère une CheckBox sur internet Set Cbx = UserForm1.Controls.Add("Forms.CheckBox.1") donc peux être que je comprend pas ce que j'ai sous les yeux.
Mais cela fonctionne j'ai bien mon bon nombre de CheckBox créé les une en dessous des autre comme je le souhaiter.
Cependant au moment de récupérer l'état des ces CheckBox avec par exemple ceci :
Private Sub CommandButton1_Click()
If Me.Vincent = True Then
MsgBox ("Ok")
End Subj'ai créé un bouton dans mon UserForm et je voulais juste voir si en cochant la CheckBox qui s'appel "Vincent" il m'ouvrait bien la MsgBox (ma Range("A2:A20") comporte une liste de Nom)
Mais là patatras car j'ai une erreur de compilation au moment ou j'appuie sur le bouton qui me dit "Membre de méthode ou de données introuvable"
comment puis-je récupérer l'état de mes CheckBox générés at-runtime.
Bonjour
Peut-être ceci -->
If Me.Controls("vincent") = True Thensi ok pensez à
Cordialement
Bonjour Xtravince, Dan,
Concernant votre problème vous pouvez utiliser la collection Controls de l'UserForm pour accéder à vos CheckBox, un exemple de comment faire :
Private Sub CommandButton1_Click()
Dim Cbx As Control
For Each Cbx In Me.Controls
If TypeName(Cbx) = "CheckBox" Then
If Cbx.Name = "Vincent" And Cbx.Value = True Then
MsgBox "Ok"
Exit For
End If
End If
Next Cbx
End SubVous pouvez adapter ce code pour travailler avec tout vos CheckBox si nécessaire. J'espère que cela vous aidera !
Super merci beaucoup a vous deux ça marche nickel !!!
Toujours un vrais plaisir de venir sur ce forum.
Bonjour,
Je continue bon an mal an à crée mon UserForm et je suis confronter a un nouveau problème qui concerne encore mes fameuse CheckBox.
J'aimerais pouvoir récupère "l'évènement" cocher ou "décocher" de mes CheckBox généré a fin de pouvoir exécuter un code
avoir quelque chose comme ceci Private Sub CheckBox1_Click() mais pour toute les CheckBox par exemple ou plus précisément les CheckBox d'une Frame particulier car toute mes CheckBox son générer dans la même Frame.
Pour avoir un ordre d'idée voici mon UserForm dans son état initiale :
Et le voici une fois lancer :
je ne sais pas si je suis très claire ^^'
Bonjour,
Vous pouvez ajouter l'événement Click à chaque CheckBox.
vous devez créer une procédure qui sera appelée lorsque vous cliquez sur une CheckBox. Vous pouvez l'ajouter dans le même module où se trouve votre UserForm, un exemple de code :
Public Sub Cbx_Click()
Dim Cbx As MSForms.CheckBox
Set Cbx = UserForm1.Controls(Application.Caller)
' Ici, vous pouvez ajouter le code que vous voulez exécuter
' lorsque vous cliquez sur la CheckBox.
' Par exemple :
If Cbx.Value = True Then
MsgBox Cbx.Name & " est coché."
Else
MsgBox Cbx.Name & " est décoché."
End If
End SubLorsque vous créez vos CheckBox, vous pouvez attribuer cette procédure à l'événement Click de chaque CheckBox. Voici comment vous pouvez le faire
Private Sub UserForm_Initialize()
Dim sel As Range
Dim top As Long
For Each sel In Feuil2.Range("A2:A20")
If sel <> "" Then
top = top + 30
Set Cbx = UserForm1.Controls.Add("Forms.CheckBox.1")
Cbx.Caption = sel.Value
Cbx.Name = sel.Value
Cbx.Left = 10
Cbx.Top = top
' Attribuez la procédure Cbx_Click à l'événement Click de la CheckBox.
Cbx.OnAction = "Cbx_Click"
End If
Next sel
End SubA chaque fois que vous cliquez sur une CheckBox, la procédure Cbx_Click sera appelée, et le nom de la CheckBox qui a déclenché l'événement sera passé à cette procédure. J'espere que cela vous aidera
Bonjour Abderrahmane BENALI,
Malheureusement cela ne fonctionne pas.
Cella me retourne une erreur d'exécution '438' : Propriété ou méthode non gérée par cet objet.
j'ai bien penser a modifier Set Cbx =UserForm1.Controls(Application.Caller) par Cbx = Nouvelle_depence.Controls(Application.Caller) car j'ai changer le nom de mon UserForm j'ai même essayer avec Frame2.Controls.... car j'ai aussi modifier mon code ce qui est peux être la cause de ce problème
Voici mon code avec le qu'elle je génère désormais mes CheckBox :
Private Sub UserForm_Initialize()
Dim sel As Range
Dim top As Long
Dim compteur As Long
top = 10
For Each sel In Feuil2.Range("A2:A20")
If sel <> "" Then
'c'est ici que j'ai remplacer UserForm1 par Frame2 affin de généré les CheckBox dans la Frame2
Set Cbx = Frame2.Controls.Add("Forms.CheckBox.1")
Cbx.Caption = sel.Value
Cbx.Name = "Cocher" & compteur
Cbx.Left = 10
Cbx.top = top
Cbx.Font.Size = 10
Cbx.OnAction = "Cbx_Click" 'j'ai bien rajouter cette ligne
Set Obj_nbref = Frame2.Controls.Add("forms.textbox.1")
With Obj_nbref
.Name = "Prix" & compteur
.Left = 100
.top = top
.Width = 45
.Height = 20
.Font.Size = 12
End With
Set Obj_nbref = Frame2.Controls.Add("forms.label.1")
With Obj_nbref
.Name = sel.Value & "€"
.Caption = "€"
.Left = 150
.top = top
.Width = 30
.Height = 20
.Font.Size = 16
End With
top = top + 30
Frame2.ScrollHeight = top
compteur = compteur + 1
End If
Next selje vous joint également mon fichier si cella peux aider.
Mmh je vois ou est le problème, la propriété OnAction n'est pas disponible pour les CheckBox dans les UserForm dans VBA, elle est seulement disponible pour les contrôles de type bouton dans les feuilles de calcul Excel. Ce qui fait que l'attribution Cbx.OnAction = "Cbx_Click" est incorrecte dans ce contexte.
Vous pouvez créer une classe qui aura un événement Click pour chaque CheckBox. Un exemple de comment faire :
1 Créez une nouvelle classe. Insérer > Classe. Nommez cette nouvelle classe, disons CheckBoxEvents.
2 Dans cette nouvelle classe (CheckBoxEvents), ajoutez le code suivant
Public WithEvents Cbx As MSForms.CheckBox
Private Sub Cbx_Click()
If Cbx.Value = True Then
MsgBox Cbx.Name & " est coché."
Else
MsgBox Cbx.Name & " est décoché."
End If
End Sub3 Dans votre UserForm, ajoutez le code suivant en haut du module :
Dim CheckBoxes() As New CheckBoxEvents4 Ensuite, modifiez votre procédure UserForm_Initialize :
Private Sub UserForm_Initialize()
Dim sel As Range
Dim top As Long
Dim compteur As Long
Dim i As Long
top = 10
i = 0
For Each sel In Feuil2.Range("A2:A20")
If sel <> "" Then
' Redimensionnez le tableau pour contenir un nouvel élément.
ReDim Preserve CheckBoxes(i)
Set Cbx = Frame2.Controls.Add("Forms.CheckBox.1")
Cbx.Caption = sel.Value
Cbx.Name = "Cocher" & compteur
Cbx.Left = 10
Cbx.Top = top
Cbx.Font.Size = 10
' Associez la nouvelle CheckBox à l'objet CheckBoxEvents.
Set CheckBoxes(i).Cbx = Cbx
' ... (ici, ajoutez le reste de votre code pour créer les autres contrôles et mettre à jour les variables)
i = i + 1
End If
Next sel
End SubMaintenant, chaque fois que vous cliquez sur une CheckBox, l'événement Click de la classe CheckBoxEvents sera déclenché et le message approprié sera affiché. J'espère que cela vous aidera !
Cella fonctionne parfaitement, je vous en remercie vraiment.
j'ai appris pas mal de chose en peux de temps grâce au personnes sur ce forum.
Bonne soirée à vous Abderrahmane BENALI et encore merci ;)