Module de classe avec CommandButton et OnClick

  • Initiateur de la discussion Antoine
  • Date de début
A

Antoine

Guest
Bonjour le forum

Je ne me suis jamais servie de classe "par moi meme" et je ne suis pas sur de bien tout comprendre, néamoins j'ai bidouillé ça : ( voir fichier joint ) :
le but est que lorqu'un utilisateur clique sur un des boutons ( sauf celui valider ) dans l'userform "fbase" et dans la page "salle" du multipage1, le nom du bouton soit inscrit en feuil5 ligne 2

voila le code que j'ai inséré dans un module de classe :

Option Explicit
Public WithEvents BouttonGroup As MSForms.CommandButton

Private Sub BouttonGroup_Click()
If BouttonGroup.Parent = fbase.MultiPage1 Then
If BouttonGroup.Name = Validsalle Then Exit Sub
Else
Feuil5.Cells(2, 2) = BouttonGroup.Name
End If
End Sub

Exel n'affiche aucun erreur, mais ne fait rien non plus ...

merci d'avance de toute réponse éventuelle :)
 

Pièces jointes

  • ModuleDeClasse.zip
    48.6 KB · Affichages: 44
  • ModuleDeClasse.zip
    48.6 KB · Affichages: 46
  • ModuleDeClasse.zip
    48.6 KB · Affichages: 44
M

myDearFriend

Guest
Bonjour Antoine,

Pour que cela puisse fonctionner, il te faut déclarer et définir le groupe de boutons concernés à l'initialisation du USF :

Tu déclare d'abord le groupe (nommé BtnGroup par exemple) comme nouvelle instance de la classe1 grâce à un "Dim ... As New Classe1" au niveau module :

Dim BtnGroup() As New Classe1

Puis, tu définis les controls boutons souhaités dans l'évènement Initialize du USF :

Private Sub UserForm_Initialize()
Dim BtnCompte As Byte
Dim Ctrl As Control
'Pour tous les controls de la page "Salle" du MultiPage1
For Each Ctrl In Me.MultiPage1.Pages.Item("Salle").Controls
'S'il s'agit d'un CommandButton
If TypeName(Ctrl) = "CommandButton" Then
'Si son nom est différent de "ValidSalle"
If Ctrl.Name <> "ValidSalle" Then
BtnCompte = BtnCompte + 1
ReDim Preserve BtnGroup(1 To BtnCompte)
Set BtnGroup(BtnCompte).BouttonGroup = Ctrl
End If
End If
Next Ctrl
End Sub

Et dans le module de Classe1 :

Public WithEvents BouttonGroup As MSForms.CommandButton

Private Sub BouttonGroup_Click()
'Inutile de vérifier ici le control sélectionné car seuls les boutons souhaités ont été identifiés à l'initialisation du USF
Feuil5.Cells(2, 2) = BouttonGroup.Name
End Sub

J'espère que ça pourra t'être utile. Dis-moi si ça te convient.

Cordialement.
Didier
 
A

Antoine

Guest
Merci pour ces précisions .... j'avais oublier pas mal de chose
Mais je ne comprends pas, ça ne marche pas. Exel ne provoque pas d'erreur mais l'evenement BouttonGroup_Click() n'intervient jamais. c'est domage car ton code etais limpide.... Mais ou est le problème ?
je joint encore le fichier, modifier avec tes conseils. ça doit pas etre grand chose mais je viens d'y passer quasiment l'apres-midi....
 

Pièces jointes

  • ModuleDeClasse.zip
    48.9 KB · Affichages: 35
  • ModuleDeClasse.zip
    48.9 KB · Affichages: 35
  • ModuleDeClasse.zip
    48.9 KB · Affichages: 34
M

myDearFriend

Guest
Le problème vient de plus choses :

1/ Il convient de définir les boutons du groupe dans "Private Sub UserForm_Initialize" et non "Private Sub UserForm_Activate"
(dans ton classeur cela ne devrait pas avoir de conséquences notoires mais je te conseille fortement d'initialiser ce type de paramètres, dans l'évènement Initialize qui se produit au chargement du USF et avant même qu'il ne s'affiche)

2/ "Dim BtnGroup() As New Classe1" se place au niveau module du code du USF (là où tu vas en définir les éléments du BtnGroup()".
Si tu connais le nombre de boutons, tu peux effectivement dimensionner BtnGroup en fonction : "Dim BtnGroup(1 To 17) As New Classe1" pour éviter ainsi le "Redim" que j'avais utilisé. Mais il faut toujours le faire au début du module de code et non à l'intérieur de la boucle For....Each de la procédure d'initialisation.

Je te joins ton exemple modifié en conséquence.

Cordialement.
Didier
 

Pièces jointes

  • ModuleDeClasse2.zip
    47.1 KB · Affichages: 72
A

Antoine

Guest
Oula ... dire que je croyais avoir bien vérifier avant de te redemander de l'aide, c'est loupé ! ( j'ai confondu activate et initialise ... pourtant tu disant bien "Initialise" dans le post précédant ! )
enfin bref, merci beaucoups. et c'est très sympa d'avoir renvoyé le code corrigé !

antoine
 

Discussions similaires

Réponses
29
Affichages
1 K