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 :

Accéder aux méthodes d'un objet par le nom de l'objet


Sujet :

Macros et VBA Excel

Vue hybride

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut Accéder aux méthodes d'un objet par le nom de l'objet
    Bonjour,

    J'ai du code VBA qui crée des 'Control' dans un UserForm de manière dynamique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Widget = MyForm.Controls.Add("Forms.CommandButton.1", "bouton" & index, True)
    Parmi ces 'Control', j'ai des boutons pour lesquels je traite l'évènement 'Click'.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set push_button_array(Index).CmdEvents = Widget
    Et le module de classes pour traiter ces évènements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public WithEvents CmdEvents As MSForms.CommandButton
     
    Private Sub CmdEvents_Click()
        MsgBox "Hello from " & Me.CmdEvents.Name
    End Sub
    Ce que je cherche à faire : à partir du retour de 'Me.CmdEvents.Name', retrouver l'objet pour agir dessus.
    Il me semble avoir déjà croisé ce type d'opération mais je n'ai rien trouvé, pour le moment, dans mes recherches.

    Par exemple, je voudrais pouvoir changer la propriété 'Caption' d'un bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Widget as Object
     
    Widget = ...
    Widget.Caption = "New caption"
    Je suis même preneur du nom d'une fonction ou d'un mot-clef.

    D'avance merci

    Bonne journée

    Thoma

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Je ne comprends pas ta question.
    Ton objet tu l'as.
    Tu l'as déclaré Withevents as MsForms.CommandButton.

    Regarde ceci (dans ta classe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Public WithEvents CmdEvents As MSForms.CommandButton
     
    Private Sub CmdEvents_Click()
        MsgBox "Hello from " & Me.CmdEvents.Name
        If Me.CmdEvents.Caption = "" Then
            Me.CmdEvents.Caption = Me.CmdEvents.Name
        Else
            Me.CmdEvents.Caption = ""
        End If
    End Sub

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut
    Bonjour pijaku,

    En lisant votre réponse et en relisant ma demande, j'ai vu qu'il manquait un point important.
    En effet, l'objet lui même peut-être manipulé depuis 'Me'.
    Toutefois, j'ai oublié de préciser que je souhaitais aussi accéder à un autre objet qui est instancié au même moment que le bouton.

    Il me semble qu'il existe une fonction dans VBA qui permet de récupérer l'instance d'un objet par son nom.

    Thoma

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    on peut se référer à l'objet "toto" placé sur userform1, ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Userform1.controls("toto")
    Depuis ta classe, maintenant, il sera probablement nécessaire que tu puisse pointer vers UserForm1. Cela peut par exemple se faire via une variable publique (appelons-la USF), initialisée depuis où tu veux (hors de ta classe) ainsi :
    Ceci depuis ta classe :
    devrait ne pas avoir de difficultés à pointer vers le contrôle toto de ton userform userform1

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par Thoma HauC Voir le message
    Il me semble qu'il existe une fonction dans VBA qui permet de récupérer l'instance d'un objet par son nom.
    Bonjour,     serait-ce la fonction   CallByName   ?   …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/05/2010, 17h59
  2. Comment accéder aux méthodes d'un objet hors de la classe ?
    Par floating_inkpot dans le forum Windows Forms
    Réponses: 0
    Dernier message: 18/04/2010, 21h26
  3. Accéder aux propriétés d'une interface par son nom
    Par slimjoe dans le forum Langage
    Réponses: 1
    Dernier message: 06/07/2007, 14h31
  4. Accéder aux méthodes d'objets alloués dynamiquement
    Par Galip dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/05/2007, 22h57
  5. Réponses: 4
    Dernier message: 11/04/2007, 14h26

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