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 :

faire réagir plusieurs contrôles à un même événement


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 20
    Points : 15
    Points
    15
    Par défaut faire réagir plusieurs contrôles à un même événement
    Bonjour,

    Dans un UserForm j'ai une soixantaine de CommandButton et plusieurs autres contrôles. Parmi ces CommandButtons, une cinquantaine porte un nom composé de 4 caractères et doivent se comporter de la même manière quand l'utilisateur clique dessus. Quelqu'un aurait-il une idée pour éviter de créer 50 procédures événementielles comme celle ci-dessous (en évitant qu'une procédure générale ne s'applique à tous les contrôles, dont les CommandButton non concernés) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub ADA1_Click()
        If ADA1.BackColor = 12640511 Then
            ADA1.BackColor = 65535
        Else
            ADA1.BackColor = 12640511
        End If
    End Sub

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Points : 1 394
    Points
    1 394
    Par défaut
    c'est une limitation de vba que l'on a pas en vb. Le principe serait d'enfermer tous les contrôles dans un array pour lequel on peut décrire une procédure s'appliquant à n'importe lequel de ces boutons.
    Ici je ne vois pas comment tu peux faire.

    La seule chose qui pourrait t'alléger un peu serait ce principe mais ce n'est pas génial:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub ADA1_Click()
            ADAClic(userform1.ADA1)
    End Sub
     
    Sub ADAClic(Bout as Control)
            If Bout.BackColor = 12640511 Then
                       Bout .BackColor = 65535
            Else
                       Bout .BackColor = 12640511
            End If
    end sub

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 20
    Points : 15
    Points
    15
    Par défaut C'est déjà mieux que ce que j'avais !
    Merci Benjamin,

    Ta solution m'évitera au moins de recopier une série de commandes assez importante pour chaque CommandButton. J'espérais un peu trouver un événement concernant l'ensemble des contrôles du UserForm et j'avais essayé une procédure reprenant le test que tu m'as suggéré il y a quelques jours (qui fonctionne très bien du reste ), mais les contrôles semblent fonctionner indépendamment du UserForm (pour les procédures événementielles en tout cas)...

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut bonjour kikou63, benjile, le forum,
    Il faut passer par un module de classe.

    Tu en trouveras un ici "comment identifer le controle cliqué" :
    http://excel.developpez.com/faq/inde...sseControleUSF

    à adapter bien sûr. Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left(Obj, 3) = "ADA" Then
    Pour créer automatiquement des boutons et leurs macros associées :
    http://excel.developpez.com/faq/inde...tCommandButton


    ESVBA

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    A l'aide de module de classe
    dans un module public
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public CollCB As Collection
    Créer un module de classe (par défaut nommé Classe1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public WithEvents Bouton As MSForms.CommandButton
     
    Private Sub Bouton_Click()
     
    If Bouton.BackColor = 12640511 Then
        Bouton.BackColor = 65535
    Else
        Bouton.BackColor = 12640511
    End If
    End Sub
    et dans l'Initialize de ton usf
    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 UserForm_Initialize()
    Dim Kontrol As Control
    Dim Klasse As Classe1
     
    Set CollCB = New Collection
    For Each Kontrol In Me.Controls
        If TypeOf Kontrol Is MSForms.CommandButton And Left(Kontrol.Name, 3) = "ADA" Then
            Set Klasse = New Classe1
            Set Klasse.Bouton = Kontrol
            CollCB.Add Klasse
        End If
    Next Kontrol
    End Sub
    Edit: désolé pas rafraichi pour le lien proposé par ESBVA

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 20
    Points : 15
    Points
    15
    Par défaut La classe !
    Pas de doute, il n'y a pas que le module qui soit (de) classe !

    Le lien est d'une grande clarté et à présent pour moi cela fonctionne impeccablement.

    Merci à tous

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Points : 1 394
    Points
    1 394
    Par défaut
    bien joué pour le module de classe

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

Discussions similaires

  1. [AC-2010] Evènement sur plusieurs contrôles en même temps
    Par illight dans le forum IHM
    Réponses: 4
    Dernier message: 25/09/2014, 12h13
  2. Comment faire défiler plusieurs txtbox en même temps ?
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/08/2014, 21h18
  3. Réponses: 1
    Dernier message: 16/06/2009, 17h06
  4. [WSAD5.5.1]Faire tourner plusieurs appli en même temps
    Par david06600 dans le forum Websphere
    Réponses: 5
    Dernier message: 17/11/2007, 22h55
  5. Réponses: 2
    Dernier message: 29/11/2006, 11h52

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