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 :

Série de Label_click


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Par défaut Série de Label_click
    Bonjour,

    j'ai actuellement 26 fois ce code. Il est lancé depuis le Userform15 (clic sur un label FestivalX, X allant de 1 à 26)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub FestivalX_Click()
            UserForm17.titrefestival = Userform15.FestivalX.Caption
    End Sub
    Comment faire pour n'avoir qu'une seule fois ce code avec en paramètre le numero du label sur lequel j'ai cliqué ?
    Sous-entendu, il extrait le numéro du label sur lequel j'ai cliqué pour l'intégrer dans mon code ?

    En me renseignant à droite à gauche, j'ai essayé d'écrire ca :
    Module de classe nommé clsLblEvents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Public WithEvents ListeItem As MSForms.Label
        Private Sub ListeItem_Click()
            UserForm17.titrefestival = ListeItem.Caption
        End Sub
    Et module classique :
    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 mcolEvents As New Collection
        Private Sub Userform15_initialize()
        Dim ListeItem As CLblEvents
        Dim Ctl As Control
        Dim clsLblEvents As CLblEvents
            Set mcolEvents = New Collection
     
            For Each Ctl In UserForm15.Controls
                If Ctl.Type = msoOLEControlObject Then
                    If TypeOf Ctl.OLEFormat.Object.Object Is MSForms.Label Then
                        If Ctl.Name Like "Festival" Then
                            Set clsLblEvents = New CLblEvents
                            Set clsLblEvents.ListeItem = Ctl.OLEFormat.Object.Object
                            mcolEvents.Add clsLblEvents
                        End If
                    End If
                End If
            Next
        End Sub
    Mais évidemment, ca ne marche pas dans mon cas... Il ne se passe rien lorsque je clique sur un des labels Festival.
    Est-ce que j'ai un moyen de savoir si ListeItem est correctent rempli ? pour situer le problème...

    Merci pour votre aide...

  2. #2
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Bonjour,

    Orientes toi vers l'utilisation de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Controls("Debut_Nom" & i)
    Je n'ai plus la syntaxe exacte mais il y a la possibilité de manipuler les contrôles avec un nom variable.

    Cordialement,

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Par défaut
    Tout d'abord, merci pour ta réponse !
    J'y ai pensé mais je n'arrive pas toujours à me passer de ce genre de code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Festival1_Click()
            UserForm17.titrefestival = Userform15.Controls("Festival" & 1).Caption
    End Sub
    Private Sub Festival2_Click()
            UserForm17.titrefestival = Userform15.Controls("Festival" & 2).Caption
    End Sub
    Private Sub Festival3_Click()
            UserForm17.titrefestival = Userform15.Controls("Festival" & 3).Caption
    End Sub
    Private Sub Festival4_Click()
            UserForm17.titrefestival = Userform15.Controls("Festival" & 4).Caption
    End Sub
    Et donc ca me fait écrire autant de FestivalX_Click() que de labels présents dans mon userform...
    J'aimerais centraliser tous les FestivalX_Click() en un seul, je ne vois pas comment...

  4. #4
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Comme cela :
    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
    Sub Alpha(i as long)
    UserForm17.titrefestival = Userform15.Controls("Festival" & i).Caption
    End Sub
     
     
    Private Sub Festival1_Click()
            call Alpha(1)
    End Sub
    Private Sub Festival2_Click()
            call Alpha(2)
    End Sub
    Private Sub Festival3_Click()
            call Alpha(3)
    End Sub
    Private Sub Festival4_Click()
            call Alpha(4)
    End Sub
    Tu as exactement la même fonctionnalité mais tu fais appel à une sub commune.

    Cordialement,

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Par défaut
    Ok merci, je vais m'arranger comme ca !
    Je vais pas au bout de ma démarche, mais j'en suis à une bonne moitié !

    Petite question cela dit, pour toi et pour les autres :
    je faisais totalement fausse route en utilisant un module de classe et un autre module classique pour référencer tous mes labels ?

    Si des personnes maitrisent ce genre de choses (les "mcolEvents.Add clsLblEvents"), ca m'intéresse d'avoir leur point de vue !

Discussions similaires

  1. [Série] Accès au port série sous linux
    Par ghost dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/10/2007, 10h43
  2. Numéro de série du disque dur
    Par h_kamel dans le forum Assembleur
    Réponses: 8
    Dernier message: 21/05/2007, 11h28
  3. Compression d'une série d'images jpeg
    Par Tchello dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2003, 19h59
  4. Créer une série dans un chart
    Par cyrose dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/11/2002, 11h37
  5. Hors série PCTEAM sur Direct 3D
    Par Shakram dans le forum DirectX
    Réponses: 1
    Dernier message: 12/10/2002, 16h34

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