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

Macros et VBA Excel Discussion :

[Userform] Attribuer un évènement a un control ajouter dynamiquement


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Points : 246
    Points
    246
    Par défaut [Userform] Attribuer un évènement a un control ajouter dynamiquement
    Bonjour,
    J'ai créé dynamiquement des labels sur une userform. J'aimerai pouvoir attribuer du code pour l'evement click() sur les labels créer.
    J'ai ajouté dans un premier temps les parties de codes suivantes en dur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private sub MonLabel_click()
      MsgBox "Coucou"
    end sub
    Or il se trouve que les labels ne réagissent pas du tout aux stimulii. Pourquoi?

    Cette non réaction me gène un peu. J'avais dans l'idée de rajouter dynamiquement le code derrière mais je suis refroidi. J'aimerai savoir si lorsque je rajouterai dynamiquement le code le problème s'en ira. Et dans le cas contraire comment faire?

    @micalement,

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Regarde ici si l'exemple donné par fring te conviendrait... mais je pense que oui

  3. #3
    Membre actif
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Points : 246
    Points
    246
    Par défaut
    j'ai tenté de faire quelque chose par moi même mais je ne comprends pas pourquoi j'ai une erreur.
    le code est le suivant :
    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
    Sub EncodeLeBouton(ByRef stNomLabel As String)
    'rajoute le code lier au label
     
    Dim x As Integer
    Dim stMonCode As String
    With ThisWorkbook.VBProject.VBComponents(ctmaframe).CodeModule
        .CreateEventProc "Click", stNomLabel 
        x = .ProcStartLine(stNomLabel & "_Click", vbext_pk_Proc)
     
        stMonCode = "InscritContact " & stNomLabel 
        .InsertLines x + 2, stMonCode
    End With
     
    'ferme la fenetre vba
    Application.VBE.MainWindow.Visible = False
     
    End Sub
    Mon erreur m'indique : gestionnaire d'évenement non valide. Pourquoi? °_° je ne vois pas du tout...

  4. #4
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Supposons que tu as créer 5 Labels, Label1 à Label5
    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
    Sub creation_code()
    Dim i As Byte, Col As New Collection
     
    For i = 1 To 5
        Col.Add "Private Sub Label" & i & "_Click()"
        Col.Add "MsgBox " & """Vous venez de cliquer sur le Label " & i & ""
        Col.Add "End sub"
    Next
     
    With ActiveWorkbook.VBProject.VBComponents("UserForm1").CodeModule
        For i = 1 To Col.Count
            nextLine = .CountOfLines + 2
            .insertlines nextLine, Col.Item(i)
        Next
    End With
     
    End Sub
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  5. #5
    Membre actif
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Points : 246
    Points
    246
    Par défaut
    Mais il me semble que ça ne gènère pas l'evement clickable.

  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Ahh bin s'il te semble, tu dois probablement avoir raison, ne perd surtout pas ton temps à essayer ce qu'on te propose.
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  7. #7
    Membre actif
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Points : 246
    Points
    246
    Par défaut
    je confirme.

  8. #8
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Tu confirmes quoi ? Que tu ne comprend pas le code et que tu n'arrives pas à l'utiliser ? Ou que c'est ok ? Parce que je te confirme que cela fonctionne très bien
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  9. #9
    Membre actif
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Points : 246
    Points
    246
    Par défaut
    je confirme que ça ne fonctionne pas... :'(
    Il genère bien le code mais ne le prend pas comme un evenement.
    grrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr ça m'enerve ce truc.. quand je le fais avec des boutons tout fonctionne. :'(

  10. #10
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    La seule chose que je vois serait que les noms écrit dans les différents bouts de code (Label1, Label2, Label3, ...) ne correspondent pas aux noms de tes Labels sur ton UserForm.
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  11. #11
    Membre actif
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Points : 246
    Points
    246
    Par défaut
    dans le doute je mets les codes de créations du bouton :
    Code le code présent dans l'userform : 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
    Private Sub AjouteTousLesBoutons()
    Dim MonControlTitre As msforms.Label
    Dim dPosition As Double
    Dim i As Integer
    i = 2
    dPosition = Me.lbLigneAnnuaire1.Top + Me.lbLigneAnnuaire1.Height
    While dPosition < Me.Height - Me.lbLigneAnnuaire1.Height - 25
        Set MonControlTitre = Me.Controls.Add("Forms.Label.1", "lbLigneAnnuaire" & i, True)
        MonControlTitre.Name = "lbLigneAnnuaire" & i
        'le place où il faut
        PlaceControl MonControlTitre, dPosition, Me.lbLigneAnnuaire1, True, ""
        i = i + 1
    Wend
        Module1.MiseDuCode MonControlTitre.Name
    Me.Tag = i - 1
    End Sub
    Code Le code dans le module 1 : 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
    27
    28
    29
    30
    Sub MiseDuCode(ByRef NomDuLabel As String)
     
    '1 voir si le code n'est pas déja placé
    If Not IsCodeExistant(NomDuLabel & "_Click") Then
        'Mise en place du code bouton appuyer
        With ActiveWorkbook.VBProject.VBComponents("ufMonAnnuaire").CodeModule
           '.insertlines ., stmoncode
           ' Call .CreateEventProc("Click", NomDuLabel)
           ' x = .ProcStartLine(NomDuLabel & "_Click", vbext_pk_Proc)
            'stMonCode = "msgbox " & Chr(34) & " coucou" & Chr(34) 
            x = .CountOfLines
            stMonCode = "private sub " & NomDuLabel & "_Click()" & vbCr & "msgbox " & Chr(34) & " coucou" & Chr(34) & vbCr & "end sub"      
            .InsertLines x + 2, stMonCode        
        End With
     
    End If
     
    End Sub
     
    Function IsCodeExistant(ByRef stNomCode As String) As Boolean
    'fonction qui renvoie vrai si le code Stnomcode se trouve bien dans la feuille (ou module ou classe) nomfeuille
    Dim iFin As Byte
    Dim i As Byte
    With ThisWorkbook.VBProject.VBComponents("ufMonAnnuaire")
        'affiche le code
            On Error Resume Next
            IsCodeExistant = (.CodeModule.ProcStartLine(stNomCode, 0) > 0)
    End With
     
    End Function

  12. #12
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bien, mon intervention s'arrête ici, bonne chance pour la suite.
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

Discussions similaires

  1. comment sauvegarder les controles ajoutés dynamiquement?
    Par Chrysostome dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 04/04/2013, 12h17
  2. persistance controles ajoutes dynamiquement
    Par eddymercury dans le forum ASP.NET
    Réponses: 1
    Dernier message: 25/07/2011, 16h21
  3. Evenements de controles ajoutés Dynamiquement
    Par AirbusA330 dans le forum VB.NET
    Réponses: 2
    Dernier message: 11/09/2009, 00h05
  4. Evenement sur controls ajouter dynamiquement
    Par TheBlackReverand dans le forum ASP.NET
    Réponses: 0
    Dernier message: 11/02/2009, 12h54
  5. Réponses: 2
    Dernier message: 10/05/2005, 15h54

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