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 :

VBA : Récupérer le nom d'un controle "cliclké" [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Par défaut VBA : Récupérer le nom d'un controle "cliclké"
    Bonjour à tous et à toutes,

    Voilà mon petit problème :

    J'ai plusieurs image dans un userform (126) et j'aimerais savoir si il est possible de récupérer le nom de l'image sur laquellle j'ai clické.
    En gros lorsque que je click n'importe où sur mon userform j'aimerais savoir quel est le control qui a été clické.

    Je sais bien qu'il existe un évènement click pour chaque image, mais j'aimerais optimiser mon code.

    J'espère avoir été assez claire dans la description de mon problème.

    D'avance merci pour votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 317
    Par défaut
    Bonjour,

    Le plus simple, avec tant d'images, est d'utiliser un module de classe....

    Dans ton fichier, dans le VBE (Alt + F11), tu fais Insertion/Module de Classe
    Par défaut, il va s'appeler "Classe1"

    Dans ce module de classe, mets ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public WithEvents GrImages As MSForms.Image
    Private Sub GrImages_Click()
      MsgBox GrImages.Name
    End Sub
    Dans un module standard, tu mets cette déclaration, en haut du module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Img(1 To 126) As New Classe1
    Dans l'initialize de l'Userform, tu mets ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
    Dim I As Byte
    For I = 1 To 126: Set Img(I).GrImages = Me("Image" & I): Next I
    'reste du code d'initialisation
    End Sub
    En supposant que tes images se nomment toutes Image1 à Image126, sinon tu peux mettre ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_Initialize()
    Dim Ctl As Control
    For Each Ctl In Me.Controls
        If TypeOf Ctl Is MSForms.Image Then
            I = I + 1: Set Img(I).GrImages = Ctl
        End If
    Next Ctl
    'reste du code d'initialisation
    End Sub
    Bon courage

  3. #3
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Par défaut
    Que dire à part que vous êtes trop fort je galère depuis quelques jours déjà.

    Je connaissais pas le principe des modules de classes, merci beaucoup vraiment!

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

Discussions similaires

  1. VBA Récupérer le nom d'une variable
    Par Contrec dans le forum Général VBA
    Réponses: 16
    Dernier message: 17/03/2009, 13h53
  2. [VBA-E]récupérer le nom des lignes sélectionnées d'une listbox
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/06/2006, 11h28
  3. [VB.NET] Comment récupérer le nom d'un control avec le focus
    Par jayce007 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/01/2005, 00h53

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