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 :

Ajouter propriété à un module de classe


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Par défaut Ajouter propriété à un module de classe
    Bonjour à tous !!!
    Je suis un ptit nouveau jme présente donc !!
    Et je vous présente mon problème :
    Je suis en train de découvrir le vba et les modules de classe.
    Ma question doit être simple mais je ne trouve pas de reponse sur le forum.

    Mon but étant de générer des boutons dynamiquement et d'afficher une MsgBox au moment du clic. Le message de la MsgBox dépendra d'une variable définie au moment de la création d'un bouton.

    La création de boutons fonctionne bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Set Btn_details = Frame1.Controls.Add("forms.CommandButton.1")
        With Btn_details
          .name = "commandBtn__" & num_ligne
            .left = debut_new_colonne + 2
     
            .top = 20 * num_ligne - 5
            .width = 18
            .height = 18
            .Object.Caption = "+"
     
     
    End With
    La gestion de l'évènement clic fonctionne également : la MsgBox s'ouvre !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Option Explicit
    Public WithEvents Btndet As MSForms.CommandButton
     
    Dim ref As String
    Private Sub Btndet_Click()
    MsgBox ref
     
    End Sub
    mais comme vous le voyez j'ai définie une propriété ref et je ne sais pas comment l'instancier au moment de la creation de mon bouton parce que j'ai besoin d'afficher le resultat dans ma MsgBox

    J'epère avoir été compréhensible
    Marchiiiiii d'avance !!!

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour


    Je ne suis pas sur d'avoir compris.
    As tu essayé de déclarer ta variable en Public, et dans un module standard.


    bon après midi
    michel

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Par défaut
    Bonjour et merci SilkyRoad !
    Euh en fait non c'est pas ça. Je cherche à créer pour chaque bouton généré une variable ref qui lui est propre. Et ainsi pouvoir recupérer la valeur de cette variable avec un code de type CommandButton__2.ref, CommandButton_3.ref, ...

    Toujours aussi floue mon explication ??...

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    rebonjour


    Tu pourrais par exemple stocker l'information dans la propriété Tag des boutons créés dynamiquement.
    (La propriété Tag sert à stocker des informations supplémentaires sur un objet.)



    Un exemple:

    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
    '------ Dans un UserForm ----------------
    'contenant un CommandButton et un Frame
    Option Explicit
     
     
    Private Sub CommandButton1_Click()
        Dim Btn_details As Control
        Dim Num_Ligne As Integer, Debut_New_Colonne  As Integer
        Dim Cl As Classe1
     
        Debut_New_Colonne = 1
     
        Set Collect = New Collection
     
        For Num_Ligne = 1 To 3
            Set Btn_details = Frame1.Controls.Add("forms.CommandButton.1")
     
            With Btn_details
                .Name = "commandBtn__" & Num_Ligne
                .Left = Debut_New_Colonne + 2
     
                .Top = 20 * Num_Ligne - 5
                .Width = 18
                .Height = 18
                .Object.Caption = "+"
                .Tag = "Ma variable" & Num_Ligne
     
                Set Cl = New Classe1
                Set Cl.Btndet = Btn_details
                Collect.Add Cl
            End With
     
        Next Num_Ligne
    End Sub
     
    '-----------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    '--- Dans un module de classe nommé Classe1 ---
    Option Explicit
    Public WithEvents Btndet As MSForms.CommandButton
     
     
    Private Sub Btndet_Click()
        MsgBox Btndet.Tag
    End Sub
    '--------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    '--------------------------------------
    'dans un module standard
    Option Explicit
     
    Public Collect As Collection
    '--------------------------------------


    michel

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Par défaut
    C'est exactement ce qu'il me fallait merci beaucoup !!
    Juste une dernière question : suis-je limiter à une seule information ? N'y a t-il pas un moyen de definir plusieurs variables ? Plusieurs balise tag peut etre ?

    Merci en tout cas

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    rebonjour

    Il n'existe qu'une seule propriété Tag mais tu peux utiliser un séparateur entre chaque information ( / , vbTab ; ... ) et les extraire ensuite grâce à la fonction Split.


    michel

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

Discussions similaires

  1. [XL-2003] Ajouter dynamiquement des Events à une Feuille via un module de classe.
    Par comme de bien entendu dans le forum Excel
    Réponses: 4
    Dernier message: 10/06/2012, 07h11
  2. [XL-2003] Ajouter dynamiquement des Events à une Feuille via un module de classe.
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/06/2012, 18h06
  3. Pb ajout objet dans module de classe
    Par steph6499 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 06/02/2011, 17h55
  4. Ajouter propriété et méthode à la classe TListItem
    Par James_ dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/05/2009, 23h21
  5. Module de classe : impossible d'accéder à une propriété
    Par Mathusalem dans le forum Général VBA
    Réponses: 2
    Dernier message: 10/11/2008, 14h11

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