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 :

Userform: Connaitre le déclencheur d'un évènement [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 902
    Points : 6 026
    Points
    6 026
    Par défaut Userform: Connaitre le déclencheur d'un évènement
    Bonjour,
    Je dispose d'un UserForm avec 1 vingtaine de checkbox regroupées par thème.

    Toutes les checkbox d'un thème déclenchent la même procédure, avec au passage le texte qui devient rouge si décoché (problématique non représentée ci-dessous).

    En première intention, c'est codé ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub xbox01Theme1_Change()
    Checktheme1
    End Sub
    Private Sub xbox02Theme1_Change()
    Checktheme1
    End Sub
    Private Sub xbox03Theme1_Change()
    Checktheme1
    End Sub
    Ce qui est fonctionnel en l'état, mais très fastidieux...

    J'aimerais disposer d'une procédure générique capable d'identifier la checkbox qui a déclenché l'évènement, genre (en macrocode, faudra sûrement jouer avec Me. ):
    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
     
    Private Sub xbox_Change()
    MaBox=Checkbox(Sender)     'Sender=objet qui a déclenché, qu'on transtype
    Theme=substr(MaBox.Name,12,1)   ' n° du thème
    Select case Theme
      case 1
           Checktheme1
           if MaBox.Value then
             MaBox.ForeColor = RGB(0, 0, 0)
             else
             MaBox.ForeColor = RGB(255, 0, 0)
           end if  
      case 2
           Checktheme2
      case 3
            etc.
    End Select
    End Sub
    Cela se fait très bien en delphi car le Sender est disponible, mais je sèche lamentablement sous VBA
    J'avais espoir avec Application.Caller, mais ça ne marche pas avec les userforms.

    Qui peut me venir en aide?
    Remerciements anticipés.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  2. #2
    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
    Penches sur les modules de classe
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Pour faire cela, il te faut nécessairement passer par une classe qui gère une collection (celle des checkboxes concernées) et définir dans cette classe l'évènement click concernant toutes les checkboxes de cette collection. Cela veut dire que tu dois alors d'abord t'intéresser de près à la création de ce genre de classe. Les exemples et didacticiels à ce sujet ne manquent pas sur ce forum.
    Mais si tu trouves cela trop compliqué, tu pourras trouver plus simple de :
    - créer une procédure toto, appelée dans la procédure évènementielle de chacune de tes textboxes et à laquelle tu passes en paramètre la checkbox cliquée (le "sender", c'est elle).

    Lire, par exemple et entre autres, cette discussion :
    https://www.developpez.net/forums/d7...ts-type-label/
    Analyser, comprendre et adapter à ton cas et tes contrôles.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 902
    Points : 6 026
    Points
    6 026
    Par défaut Pas réceptif à la POO Microsoft
    Je mets résolu, mais c'est plus un abandon.

    Merci cependant pour vos pistes.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  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
    1. Créé 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
    Public WithEvents CB As msforms.CheckBox
     
    Private Sub CB_Change()
    'ici on va mettre le code générique pour tous tes checkbox (à appliquer à la variable CB)
    'exemple:
     
    CB.ForeColor = IIf(CB.Value, RGB(0, 0, 0), RGB(255, 0, 0))
    End Sub
    2. dans le module de ton userform, on va instancier tous les checkbox
    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
    Dim Coll As Collection
     
    Private Sub UserForm_Initialize()
    Dim Ctr As msforms.Control
    Dim LaCbo As Classe1
     
     
    Set Coll = New Collection
    For Each Ctr In Me.Controls
        If TypeOf Ctr Is msforms.CheckBox Then
            Set LaCbo = New Classe1
            Set LaCbo.CB = Ctr
            Coll.Add LaCbo
        End If
    Next Ctr
    End Sub
    Voilà voilà,
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. [XL-2010] Textbox dans un UserForm : les évènements ne se déclenchent pas
    Par St-Jean dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/10/2010, 23h43
  2. déclencheur d'évènement WPF
    Par damii1 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 17/04/2009, 08h19
  3. [Userform] Attribuer un évènement a un control ajouter dynamiquement
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 18/06/2008, 12h11
  4. Gestion d'évènement pour un Userform dynamique
    Par RemiT dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 18/12/2007, 15h34
  5. Comment connaître le type d'évènement déclencheur du trigger
    Par vincent.delhommois dans le forum PL/SQL
    Réponses: 4
    Dernier message: 18/09/2006, 15h10

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