code pour un optionbutton créée dynamiquement

  • Initiateur de la discussion valou
  • Date de début
V

valou

Guest
Bonjour,

Après avoir regarder d'anciens messages sur ce forum, je m'en remet à vous.
Voici mon problème :

J'ai un userform enregsitré dans le classeur. A l'appel de ce formulaire, je creer des labels et des optionbuttons dynamiquement.
Chaque bouton crée porte le nom : "Opt" + nombre.
Mon userform n'est jamais enregsitré après cet ajout, car je m'en resert plusieurs fois.

Maintenant, ce que je voudrais faire, c'est que lorsque l'utilisateur clique sur le bouton 2 (Opt2), je coche par defaut toutes les autres opts.
Et la j'ai un problème :

J'ai ecrit "en dur" derrière mon formulaire :
Sub Opt2_Click()
msgbox "blabla"
end sub

et ce code ne s'execute jamais. Cela vient probablement du fait que les opt sont crees dynamiquement.

Quelqu'un a -t-il une solution? J'ai peut etre commis des erreurs lors de la creation dynamique qui m'empèche maintenant de travailler.

Merci d'avance, en espérant avoir ete claire

Je suis désolée, mais mon fichier est troplourd pour passer, meme zipper.
Voici le code pour creer mon opt :


'permet d'ajouter dynamiquement des options buttons dans un userform donné
Sub Ajout_Opt(usr As UserForm, nb As Integer, nom As String, valeur As String, groupe As String, large As Integer, gauche As Integer, haut As Integer, hauteur As Integer)

'variable
Dim opt As Object

Set opt = usr.Controls.Add("forms.optionbutton.1")
With opt
.Name = nom & nb
.Caption = valeur
.GroupName = groupe
.BackColor = &HC0E0FF
.Width = large
.Left = gauche
.Height = haut
.Top = hauteur
End With

End Sub


voici comment je l'appelle :


nb = 1
For indice = 0 To UBound(tab_question, 2)
'question
Call Processus.Ajout_Lbl(usr, indice, "LblQuestion", tab_question(1, indice), 480, 42, 24, hauteur)
hauteur = hauteur + 25
Ligne = tab_question(2, indice)
For nb_rep = 1 To tab_question(3, indice)
Call Processus.Ajout_Opt(usr, nb, "Opt", Sheets(tab_question(4, indice)).Range("D" & Ligne).Value, "Groupe" & indice, 70, 160, 18, hauteur)
nb = nb + 1
Ligne = Ligne + 1
hauteur = hauteur + 25
Next nb_rep
Call Processus.Ajout_Opt(usr, nb, "Opt", "Non Applicable", "Groupe" & indice, 70, 160, 18, hauteur)
hauteur = hauteur + 25
nb = nb + 1
Next indice
 
V

valou

Guest
je n'ai peut etre pas été assez claire dans ma question mais voisi la réponse au cas ou un jours quelqu'un rencontrerai le meme problème.

Dans un module de classe (Classe_Opt), on declare les informations suivantes :
Public WithEvents opt_neg As MSForms.OptionButton


Private Sub Opt_neg_Click()
'code si on clique sur le bouton crée
End Sub

puis, dans le module en entete on declare une variable d'objet :
Dim obj_opt_neg() As Classe_Opt

et dans la procedure d'appel :
ReDim obj_opt_neg(2)
Set obj_opt_neg(0) = New Classe_Opt 'affectation d'une nouvelle instance
Set obj_opt_neg(0).opt_neg = usr!Opt2 'Affectation du opt à la variable de l'instance
Set obj_opt_neg(1) = New Classe_Opt 'affectation d'une nouvelle instance
Set obj_opt_neg(1).opt_neg = usr!Opt3 'Affectation du opt à la variable de l'instance



et voila, on a du code sur des boutons creer dynamiquement

merci pour tout
 

Discussions similaires

Réponses
2
Affichages
315

Statistiques des forums

Discussions
312 496
Messages
2 088 979
Membres
103 996
dernier inscrit
KB4175