[Fin] Gérer les évenements sur des boutons créés dynamiquement

Gérer les évenements sur des boutons créés dynamiquement [Fin] - VB/VBA/VBS - Programmation

Marsh Posté le 07-06-2006 à 11:25:40    

Bonjour,
 
Après avoir créé dynamiquement un bouton, je voudrais gérer les événements qui peuvent se produire dessus.
 
----
Je créé un bouton dans une userform à l'initialisation :
 
set MonBouton = userform1.controls.add("Forms.CommandButton.1" )
 
et je veux afficher un msgbox quand je clic sur ce bouton
----
 
Comment je fais pour créé le code lié à l'événement Click du bouton ?
 
 
Merci d'avance.


Message édité par Paul Hood le 13-06-2006 à 16:00:15
Reply

Marsh Posté le 07-06-2006 à 11:25:40   

Reply

Marsh Posté le 10-06-2006 à 19:14:04    

Question indiscrete qui n'a rien a voir.........ca te sert à quoi de créer un bouton à l'ouverture d'une form?

Reply

Marsh Posté le 11-06-2006 à 10:19:06    

Peut être que le plus simple serait de créer ton bouton directement sur ta form et de jouer sur sa propriété visible/invisible ?
Si ce bouton doit avoir plusieurs fonctions suivant le contexte où tu appelles ta form, tu peux ensuite jouer sur la propriété caption et ensuite, dans le code bouton_click() tu fais un test pour déterminer quelle procédure lancer.
Exemple, dans form_initialize():
si openargs="" alors bouton.visible=false
si openargs="ModeModif" alors bouton.visible=true bouton.caption="Modifier"
si openargs="ModeConsultation" alors bouton.visible=true bouton.caption="Fermer"
 
et dans bouton.clic():
si bouton.caption="Modifier" alors appeller ModifierDonnees
sinon fermer le formulaire
 
kenavo,
 
Jean-Marc


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 12-06-2006 à 09:05:00    

Je suis en train de me faire une appli pour gérer mes photos.
 
J'ai besoin de pouvoir créer dynamiquement des objets "pictures" en fonction d'une sélection d'iamges.
C'est-à-dire que je ne connais pas d'avance le nombre d'images à afficher et je ne veux pas être limité en créant statiquement mes objets images par avances.
 
J'ai trouvé une piste mais avec une command que mon VBA ne connaît pas c'est "Designer"
      Set Usf = ThisWorkbook.VBProject.VBComponents("Userform1" )
      Set btn = Usf.Designer.Controls.Add("Forms.CommandButton.1" )
En plus avec la possibilité de générer du code.
 
Le seul HIC... c'est que le code est réellement écrit dans mon module et si je sauve le fichier mon code est sauvegardé aussi..et donc le coup d'après BOUM ca plante puisque le code existe déjà...
 
Peut-être existe-t-il une piste par les modules de classes ...mais là... je rame un peu beaucoup et j'avance doucement.
 
Merci pour vos idées

Reply

Marsh Posté le 13-06-2006 à 08:07:28    

Sous VB6 à titre d'exemple
   Créer un Bouton command1 en faire une copie  
   Répondre oui à "créer un groupe de contrôles"
   Supprimer ce bouton et conserver Command1(0)
   


Option Explicit
Dim NbCmdButton As Integer
Dim NbPicture As Integer
 
Private Sub cmdAdd_Click()
    NbCmdButton = Command1.UBound
    NbCmdButton = NbCmdButton + 1
     
    NbPicture = Picture1.UBound
    NbPicture = NbPicture + 1
     
    Load Command1(NbCmdButton)
    Command1(NbCmdButton).Top = Command1(NbCmdButton - 1).Top + Command1(NbCmdButton - 1).Height + 30
    Command1(NbCmdButton).Caption = "command1(" & NbCmdButton & " )"
    Command1(NbCmdButton).Visible = True
     
    Load Picture1(NbPicture)
    Picture1(NbPicture).Top = Picture1(NbPicture - 1).Top + Picture1(NbPicture - 1).Height + 30
    Picture1(NbPicture).Visible = True
End Sub
 
Private Sub cmdDel_Click()
    NbCmdButton = Command1.UBound
    NbPicture = Picture1.UBound
     
    If NbCmdButton > 0 Then Unload Command1(NbCmdButton)
    If NbPicture > 0 Then Unload Picture1(NbPicture)
End Sub
 
Private Sub Command1_Click(Index As Integer)
    '...
End Sub
 
Private Sub Form_Load()
Dim i As Integer
    NbCmdButton = Command1.Count
    NbPicture = Picture1.UBound
    For i = 1 To 4
        Load Command1(i)
        Command1(i).Top = Command1(i - 1).Top + Command1(i - 1).Height + 30
        Command1(i).Caption = "command1(" & i & " )"
        Command1(i).Visible = True
    Next
    For i = 1 To 2
        Load Picture1(i)
        Picture1(i).Top = Picture1(i - 1).Top + Picture1(i - 1).Height + 30
        Picture1(i).Visible = True
    Next
End Sub

Message cité 1 fois
Message édité par kiki29 le 13-06-2006 à 09:55:09
Reply

Marsh Posté le 13-06-2006 à 13:29:04    

kiki29 a écrit :

Sous VB6 à titre d'exemple
   Créer un Bouton command1 en faire une copie  
   Répondre oui à "créer un groupe de contrôles"
   Supprimer ce bouton et conserver Command1(0)
   


Option Explicit
Dim NbCmdButton As Integer
Dim NbPicture As Integer
 
Private Sub cmdAdd_Click()
    NbCmdButton = Command1.UBound
    NbCmdButton = NbCmdButton + 1
     
    NbPicture = Picture1.UBound
    NbPicture = NbPicture + 1
     
    Load Command1(NbCmdButton)
    Command1(NbCmdButton).Top = Command1(NbCmdButton - 1).Top + Command1(NbCmdButton - 1).Height + 30
    Command1(NbCmdButton).Caption = "command1(" & NbCmdButton & " )"
    Command1(NbCmdButton).Visible = True
     
    Load Picture1(NbPicture)
    Picture1(NbPicture).Top = Picture1(NbPicture - 1).Top + Picture1(NbPicture - 1).Height + 30
    Picture1(NbPicture).Visible = True
End Sub
 
Private Sub cmdDel_Click()
    NbCmdButton = Command1.UBound
    NbPicture = Picture1.UBound
     
    If NbCmdButton > 0 Then Unload Command1(NbCmdButton)
    If NbPicture > 0 Then Unload Picture1(NbPicture)
End Sub
 
Private Sub Command1_Click(Index As Integer)
    '...
End Sub
 
Private Sub Form_Load()
Dim i As Integer
    NbCmdButton = Command1.Count
    NbPicture = Picture1.UBound
    For i = 1 To 4
        Load Command1(i)
        Command1(i).Top = Command1(i - 1).Top + Command1(i - 1).Height + 30
        Command1(i).Caption = "command1(" & i & " )"
        Command1(i).Visible = True
    Next
    For i = 1 To 2
        Load Picture1(i)
        Picture1(i).Top = Picture1(i - 1).Top + Picture1(i - 1).Height + 30
        Picture1(i).Visible = True
    Next
End Sub



 
Le problème de VBA c'est qu'on ne peut pas créer de groupe de contrôles.
 
Sinon j'ai trouvé un autre truc avec WithEvents mais je ne gère que le dernier objet créé et pas l'ensemble des objets créés.
Je vais cherché un facon de faire autrement... des listes ou quelque chose comme ça !!!
 
Merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed