IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Gestion évènement sur un groupe de contrôle créés dynamiquement


Sujet :

VBA

  1. #1
    Membre du Club
    Homme Profil pro
    ergotherapeute
    Inscrit en
    Août 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ergotherapeute
    Secteur : Santé

    Informations forums :
    Inscription : Août 2012
    Messages : 86
    Points : 67
    Points
    67
    Par défaut Gestion évènement sur un groupe de contrôle créés dynamiquement
    Bonjour,

    Voila le contexte simplifiée:
    dans un userform (UserForm1) j'ai une fram (Fram1) et un bouton (CommandButton1)
    lorsque je clique sur CommandButton1 ca m'ajoute un label dans Fram1. Le label s'insère en dessous du dernier label ajouté.
    j'aimerai faire en sorte que lorsque je clique sur un des labels ajouté dans Fram1 cela déclenche une action comme par exemple un MsgBox avec le "caption" du label.
    j'ai fait exactement comme indiqué ici : http://silkyroad.developpez.com/VBA/...icEditor/#LV-A

    code UserForm1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Option Explicit
     
    Private Sub CommandButton1_Click()
    Dim nblbl As Long
    Dim Obj As Control
    Dim C1 As Classe1
    Dim i As Integer
    Set Collect = New Collection
     
        Set Obj = Frame1.Controls.Add("Forms.Label.1", "lbl" & Frame1.Controls.Count)
        With Obj
            .Name = "label" & (Frame1.Controls.Count)
            .Caption = "test" & (Frame1.Controls.Count)
            .Height = 12
            .Top = (Frame1.Controls.Count - 1) * 12
        End With
        Frame1.ScrollHeight = Frame1.Controls.Count * 12
     
        Set C1 = New Classe1
        Set C1.monlbl = Obj
        Collect.Add C1
    End Sub
    code module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Public Collect As Collection
    code module de classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
    Public WithEvents monlbl As MSForms.Label
     
    Private Sub monlbl_Click()
        'cet exemple affiche le nom et la valeur de l'objet cliqué
        MsgBox (Me.monlbl.Name)
    End Sub
    Mais le souci c'est que l'évènement ne fonctionne QUE sur le dernier label inséré, comment faire pour qu'il fonctionne sur l'ensemble des labels contenus dans le Frame1 ?

    Merci d'avance pour votre aide, je précise que je débute en VBA...

  2. #2
    Membre du Club
    Homme Profil pro
    ergotherapeute
    Inscrit en
    Août 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ergotherapeute
    Secteur : Santé

    Informations forums :
    Inscription : Août 2012
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    En bidouillant j'ai fini par trouver la réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Option Explicit
     
    Private Sub CommandButton1_Click()
    Dim nblbl As Long
    Dim Obj As Control
    Dim C1 As Classe1
    Dim elt As Control
    Dim i As Integer
    Set Collect = New Collection
     
        Set Obj = Frame1.Controls.Add("Forms.Label.1", "lbl" & Frame1.Controls.Count)
        With Obj
            .Name = "label" & (Frame1.Controls.Count)
            .Caption = "test" & (Frame1.Controls.Count)
            .Height = 12
            .Top = (Frame1.Controls.Count - 1) * 12
        End With
        Frame1.ScrollHeight = Frame1.Controls.Count * 12
     
     
        For Each elt In Frame1.Controls
            Set C1 = New Classe1
            Set C1.monlbl = elt
            Collect.Add C1
        Next
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème de gestion événements sur tableau de controles.
    Par Jeano81 dans le forum VB.NET
    Réponses: 15
    Dernier message: 19/02/2015, 11h44
  2. Problème gestion évènement sur MicroFramework
    Par Sylvanocry dans le forum C#
    Réponses: 2
    Dernier message: 28/02/2010, 23h35
  3. Gerer les evenements de Contrôles créés dynamiquement
    Par celineSGH dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2008, 02h25
  4. Réponses: 4
    Dernier message: 11/08/2008, 12h08
  5. Réponses: 3
    Dernier message: 27/11/2005, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo