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 :

Bug qui me rend fou : Création dynamique de contrôle dans un userform [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Infirmier
    Inscrit en
    Mai 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Infirmier
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2022
    Messages : 2
    Par défaut Bug qui me rend fou : Création dynamique de contrôle dans un userform
    Bonjour le forum,

    je suis bloqué sur un bug que je ne sais résoudre.

    Je crée dynamiquement des boutons dans un userform.

    je gère l'event de clic dans un module de classe tout simple.

    Quand j'exécute le userform directement, les clics ne sont pas pris en compte.

    Par contre si j'exécute pas à pas le code puis que j'ouvre mes collections dans l'explorateur de variable locale et que je fini l'exécution, CELA FONCTIONNE...

    C'est à n'y rien comprendre.

    Je débute dans l'utilisation des modules de classe mais j'ai une certaine expérience en VBA.

    Le code du userform (c'est un de test) :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
     
    Private Sub UserForm_Initialize()
     
    Dim i, x As Integer
     
    'Déclaration des collections :
     
     
    Dim Collect_CommandButton As Collection
    Dim ClBouton As Collection
     
     
    'Déclaration des instances de classe :
     
    Dim mCommandButton As Mod_classe_collection
     
     
    'Crée les collections de classe :
     
    Set Collect_CommandButton = New Collection
     
     
    'Crée les collections d'objet :
     
    Set ClBouton = New Collection
     
     
    For i = 1 To 5
     
     Set ctl_Clic = Controls.Add("Forms.CommandButton.1")
     
     
                    ctl_Clic.Left = 20
                    ctl_Clic.Top = x
                    ctl_Clic.Width = 80
                    ctl_Clic.Height = 20
                    ctl_Clic.Name = "CommandButton_" & i
     
     
     Collect_CommandButton.Add "btn" & i, CStr("CommandButton_" & i)
     Set mCommandButton = New Mod_classe_collection
     Set mCommandButton.clic_choix = ctl_Clic
     
     ClBouton.Add mCommandButton
     
    mCommandButton.clic_choix.Tag = CStr("CommandButton_" & i)
     
     
     
    x = x + 21
     
     
     
    Next i
     
     
     
    End Sub
    Le code du module de classe (j'affiche le nom si clic ou si survole) :

    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
     
     
    Public WithEvents clic_choix As MSForms.CommandButton
     
    Private Sub clic_choix_Click()
     
    test.lbl2.Caption = clic_choix.Name
     
    End Sub
     
     
    Private Sub clic_choix_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
     
    test.lbl1.Caption = clic_choix.Name
     
    End Sub
    Merci d'avance pour l'aide que vous pourrez m'apporter.

    Si besoin je peux joindre le fichier de test

    Christophe

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Bonjour,
    je t'invites à te pencher sur la porté des variables!
    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
    Dim ClBouton As Collection 
    Private Sub UserForm_Initialize()
     
    Dim i, x As Integer
    Set ClBouton = New Collection 'Crée les collections de classe :
     
    For i = 1 To 5
        ClBouton.Add New Mod_classe_collection, "btn" & i 'Ajoute une instance de la classe à la collection!
        With ClBouton("btn" & i)
            Set .clic_choix = Controls.Add("Forms.CommandButton.1", "CommandButton_" & i) 'Ajoute un CommandButton à l'instance de la classe
            .clic_choix.Left = 20
            .clic_choix.Top = x
            .clic_choix.Width = 80
            .clic_choix.Height = 20
            .clic_choix.Caption = "CommandButton " & i
        End With
        x = x + 21
    Next i
    End Sub

  3. #3
    Candidat au Club
    Homme Profil pro
    Infirmier
    Inscrit en
    Mai 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Infirmier
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2022
    Messages : 2
    Par défaut Merci
    @Thumb down

    C'est parfait

    Un grand merci pour votre aide et votre réponse rapide

    Christophe

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

Discussions similaires

  1. [XL-2010] Création dynamique de "Contrôles" dans un "Userform" : Erreur d'execution 91
    Par Stéphane8 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/10/2012, 11h38
  2. [XL-2003] Dupliquer dynamiquement des contrôles dans un userform
    Par thilamb dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/08/2012, 17h02
  3. SDL_SetAlpha et transparence qui me rend fou
    Par nightwar dans le forum SDL
    Réponses: 5
    Dernier message: 31/03/2010, 21h31
  4. une exception qui me rend fou !
    Par ghilo dans le forum Langage
    Réponses: 5
    Dernier message: 20/08/2009, 16h48
  5. SOS - Une Association Many-To-Many qui me rend fou
    Par NexoFlex dans le forum Hibernate
    Réponses: 2
    Dernier message: 30/06/2009, 18h09

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