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 :

Affectation d'un module de classe à un bouton créé dynamiquement [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Affectation d'un module de classe à un bouton créé dynamiquement
    Bonjour

    J'ai un petit souci concernant l'affectation de mon evenement "clic" sur les commandbutton créés dynamiquement.
    En lisant le code en pas à pas , l'affectation semble se faire, mais une fois les boutons créés, le clic n'y fait rien. Voici mon morceau de code en cause:

    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
    Dim MonBoutonCom() As ClSBouton
    Dim MonTableau() As String, MonNom As String, cel As Object, histo As String
    Dim MonBoutonIci As MSForms.CommandButton
    Dim ctrl As Control
     
    .....
    For i = 1 To compteur
                    MonNom = "CommandButton" & i
                    Set MonBoutonIci = USFTouteBrigade.Frame1.Controls.Add("Forms.CommandButton.1")
                    With MonBoutonIci
                        .Name = MonNom
                        .Top = 10
                        .Width = 120
                        .Height = 18
                        .Left = decalage
                        .Caption = Replace(MonTableau(i), "/", "")
                    End With
                decalage = decalage + 138
                Next i
           End If
     
           i = 1
        'on attribue a tous les boutons la classe clsbouton
     
        For Each ctrl In USFTouteBrigade.Frame1.Controls
            If TypeOf ctrl Is MSForms.CommandButton Then
                ReDim Preserve MonBoutonCom(0 To i)
                Set MonBoutonCom(i) = New ClSBouton
                Set MonBoutonCom(i).MonBouton = ctrl
                i = i + 1
            End If
        Next ctrl
    ....
    et dans mon module de classe ClsBouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public WithEvents MonBouton As MSForms.CommandButton
     
    Private Sub MonBouton_Click()
        MsgBox "coucou"
    End Sub
    c'est pas du Shakespeare je l'avoue...

    Enfin bref je suis bloqué depuis quelques heures sans arriver à comprendre mon erreur. Merci pour votre aide

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut HEU
    bonjour

    fait une recherche dans les contributions tu a exactement ce que tu cherche

    et je dirais même que ta 2 Emme boucle n'est pas nécessaire inclue bouton dans la classe dans la boucle qui le créé
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    j'avais inclus au départ ma liaison classe-bouton dans la boucle de création mais je me suis dit qu'au lieu de faire x fois le meme travail, valait mieux le faire une seule fois sur tous les boutons, comme quoi la premiere idée parfois... en tout cas merci, je vais rechercher ça dans les contributions.
    Je marquerai cette discussion en "résolue" des que j'aurai trouvé.

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    ça y est, problème résolu:
    En fait plusieurs petites erreurs-

    j'ai passé la déclaration de la variable MonBoutonCom en public dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim MonBoutonCom() As ClSBouton
    j'ai repassé ma liaison boutoncommande>module de classe au sein de la boucle de creation du bouton, sans oublier de redimensionner ma variable

    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ReDim Preserve MonBoutonCom(0 To i)
    Set MonBoutonCom(i) = New ClSBouton
    Set MonBoutonCom(i).MonBouton = MonBoutonIci
    et voili!
    Merci pour le coup de main.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/02/2006, 15h09
  2. variables publiques ou module de classe ?
    Par niclalex dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 18h49
  3. classe de bouton en input et <a>
    Par santo dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 07/02/2005, 10h26
  4. Classe de boutons avec changement de listeners
    Par guipom dans le forum Composants
    Réponses: 2
    Dernier message: 25/01/2005, 12h26
  5. [FLASH MX 2004 PRO] Classe et Bouton
    Par dens63 dans le forum Flash
    Réponses: 2
    Dernier message: 08/04/2004, 15h14

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