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 :

Appliquer le même événement click à plusieurs Labels


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut Appliquer le même événement click à plusieurs Labels
    Bonjour à tous,
    Je sens que je vais me faire huer mais tant pis.
    Dans une userform, j'ai 720 Labels nommés de 7 à 246.
    Pour les 240 premiers (de 7 à 246), lorsque je clique sur l'un d'entre eux, j'aimerais qu'il se passe l'action suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Label7_Click()
    If Sheets("Feuil1").Range("A10") = "" Then
    Sheets("Feuil1").Range("A10") = Label7
    Label7 = ""
    Else
    Label7 = Sheets("Feuil1").Range("A10")
    Sheets("Feuil1").Range("A10") = ""
    End If
    End Sub
    Je dois donc écrire ce code pour chacun des Labels de Label7 à Label246.
    Ma question est : existe-t-il un moyen pour appliquer l'événement Click à chacun de ces Labels sans répéter ce code 240 fois (une fois pour chaque Label) ?
    Un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub AllLabel_Click()
    Est-ce possible déjà, je n'en sais rien puis, si oui, vers quoi me conseillez-vous de m'orienter ?

    Merci par avance.

    Laurent

  2. #2
    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

    Bonjour.
    • Soit affecter la même procédure à tous les labels concernés puis y récupérer le label appelant via Application.Caller



    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    1- Tu crées ton USF Comme d'hab
    2-Tu crées un module de classe ou tu mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public WithEvents LabelGroup As MSForms.Label
     
    Private Sub labelgroup_Click()
        MsgBox "Hello from " & labelgroup.Name & "Niksamere"
    End Sub
    3-Tu crees un module normal ou tu mets :

    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
    Option Explicit
    Dim labels() As New Class1
     
    Sub usfshow()
        Dim labelcount As Integer
        Dim ctl As Control
        labelcount = 0
        For Each ctl In UserForm1.Controls
            If TypeName(ctl) = "MSForms.Label" Then
                    labelcount = labelcount + 1
                    ReDim Preserve labels(1 To labelcount)
                   Set labels(labelcount).labelgroup = ctl
                End If
            End If
        Next ctl
        UserForm1.Show
    End Sub
    4-tu executes usfshow
    5- Derien

    Edit: Marc comme d'hab plus rapide..

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut
    Tout d'abord merci beaucoup à vous deux pour vos réponses respectives.
    EngueEngue, dans le module "normal" j'ai du rajouter un E à Class1 sinon j'avais une erreur "Type défini par l'utilisateur non défini" (ai-je eu tort? ).
    Ensuite, lorsque je lance usfshow cela lance bien la userform qui contient les labels mais lorsque je clique sur un label la MsgBox ne se lance pas et j'ai une erreur avec la derniere ligne du label normal surligné en jaune (UserForm1.Show), ce qui me parrait normal puisque la userform est déjà ouverte.

    Tu as une idée ?

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Tu as affecté la macro usfshow à tes labels ?...

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut
    oui, de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Label7_Click()
    usfshow
    End Sub
    je ne l'ai fais que pour un seul label pour essayer

  7. #7
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Est-ce que l'un des numéros que je t'ai affiché te le demandait ?

    Enleve ça et lance usfshow avec le bouton play

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut
    j'avais essayé en tout premier lieu sans affecter aucun bouton mais dans ce cas il ne se passe rien lorsque je clique sur un label

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut heu
    Bonjour

    avec un peu de recherche dans les contributions tu aurais certainement trouvé ton bonheur
    celadit voici un exemple de classe label par la meme occasion on va se passer d'utiliser un module standard pour classifier

    met ca dans le module de ton userform

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim newclasse As New Classe1
     
    Private Sub UserForm_Activate()
    newclasse.classification_labels
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Set newclasse = Nothing
    End Sub
    maintenant ajoute un module classe nommé "Classe1"
    et met ce code a l'interieur

    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
     
    Public WithEvents LabelGroup As MSForms.Label
    Private meslabels() As New Classe1
     
    Private Sub labelgroup_Click()
        MsgBox "Hello from " & LabelGroup.Name & "soit gentil avec sa mere!!! "
    End Sub
     
    Function classification_labels()
           Dim ctl As Control
            For Each ctl In UserForm1.Controls
            If TypeName(ctl) = "Label" Then
                    i = i + 1
                    ReDim Preserve meslabels(1 To i)
                   Set meslabels(i).LabelGroup = ctl
                End If
                Next ctl
    End Function
    c'est tout !!!!

    et soit gentil avec sa mere

    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

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut
    Merci à toi Patrick,
    C'est pas la première fois que tu me dépannes, t'es un homme précieux -))
    J'ai juste dû définir la variable i dans le module de classe mais sinon tout baigne.
    Quand au "sois gentil avec ta mere", je l'ai laissé. Je préfère aussi codé comme ça -))

    Je n'ai plus qu'à éplucher tout ça pour comprendre le principe
    Merci encore
    Laurent

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour liloo14
    pas de demande par MP!!!!!!!!!
    Malgré tout
    en réponse a ta demande ma message privé
    je te répond sur ton post afin que tout le monde puisse participer et bénéficier de solution proposées

    en ce qui concerne tes label jumeaux
    exemple
    1 241
    17 257
    ect....

    le principe est tout simple récupérer le chiffre que le nom comporte et lui ajouter 240 une fois ceci fait on recrée un nom complet de label

    remplace la fonction labelgroup_click dans la classe par celle ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub labelgroup_Click()
       Dim usf As Object
        Set usf = LabelGroup.Parent
      For i = 1 To Len(LabelGroup.Name)
       If IsNumeric(Mid(LabelGroup.Name, i, 1)) Then valeur = valeur & Mid(LabelGroup.Name, i, 1)
      Next
    nom = "Label" & (240 + valeur)
     
     MsgBox "coucou le " & LabelGroup.Name & "   et le " & nom & "  vont etre modifiés"
    ' ici on modifie ce qui est ecrit sur les label  jumeaux 
    LabelGroup.Caption = ""'celui que tu clique 
    usf.Controls(nom).Caption = ""'celui avec 240 de plus dans son nom
    End Sub
    elle est belle la vie non???

    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

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut
    Bonjour Patrick,
    Tout d'abord merci beaucoup.
    J'ai tenté et je tente encore de comprendre le code que tu m'as fourni mais si j'en ai pigé une partie, je n'ai pas encore le niveau pour tout comprendre. Mais j'apprend, j'apprend... -))

    Désolé pour le MP, je n'avais pas réfléchis au fait que la communauté n'y avait pas accès.

    Fasse que ce post ai servit à d'autres.
    Encore merci.

    Laurent

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    memecode avec commentaire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub labelgroup_Click()
       Dim usf As Object'declaration de l'object usf
        Set usf = LabelGroup.Parent'designation de l'object usf (il devien le userform
      For i = 1 To Len(LabelGroup.Name)'on boucle sur le nombre de caractere que comporte le nom du label
       If IsNumeric(Mid(LabelGroup.Name, i, 1)) Then valeur = valeur & Mid(LabelGroup.Name, i, 1)'on recupere ainsi tout les caractere numericque du nom du label
      Next
    nom = "Label" & (240 + valeur)la variable nom devient "Label" plus le chiffre du label +240
     
     MsgBox "coucou le " & LabelGroup.Name & "   et le " & nom & "  vont etre modifiés"
    ' ici on modifie ce qui est ecrit sur les label  jumeaux 
    LabelGroup.Caption = ""'celui que tu clique 
    usf.Controls(nom).Caption = ""'celui avec 240 de plus dans son nom
    End Sub
    voila voila tout simplement
    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

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/03/2015, 13h56
  2. [OL-2013] créer un même événement sur plusieurs jours différents
    Par Kaylek dans le forum Outlook
    Réponses: 0
    Dernier message: 23/10/2014, 11h23
  3. [XL-2010] Le même évènement pour plusieurs Contoles
    Par jehhej dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/11/2011, 22h41
  4. Même événement sur plusieurs id de même nom
    Par arthuro45 dans le forum jQuery
    Réponses: 6
    Dernier message: 06/03/2011, 20h37
  5. Appliquer un même code sur plusieurs feuilles Excel
    Par mouncefdi dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/04/2009, 10h24

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