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 :

Gestion d'événements pour une checkbox - Empêcher l'événement click à l'initialisation


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 120
    Par défaut Gestion des événements à l'initialisation d'un userform
    Bonjour

    Une application qui lance un userform dans lequel il y a des contrôles CheckBox.
    Le lancement met à jour chaque champ de l'userform.
    En arrivant sur la MAJ des checkBox, cela déclenche l'événement Click qui est lui même un traitement indépendant de l'initialisation :
    - La MAJ met en place les informations
    - Le click gère le changement
    Cela entraîne à l'initialisation, un traitement de situations qui peuvent être différentes.
    J'ai essayé "Application.EnableEvents = False"
    Cela ne fonctionne pas.
    Y aurait il une solution qui permette de désactiver l'événement click quand un checkbox est initialisé.
    Merci de vos retours

  2. #2
    Futur Membre du Club
    Homme Profil pro
    *
    Inscrit en
    Septembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : *

    Informations forums :
    Inscription : Septembre 2018
    Messages : 5
    Par défaut
    Bonjour

    j'ai déja rencontré ce problème, la seule solution que j'avais trouvé était de passer, avant le lancement du formulaire, la propriété locked des textbox à true pour empêcher l'événement click et de les repasser à false à la fin de l'initialisation du formulaire après avoir fait un setfocus sur le contrôle par défaut.

    Bien cordialement, @+

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Ben oui...

    Nous en sommes à 15 messages dans cette discussion avec des solutions non testées et non fonctionnelles (=> perte de temps, manque de sérieux), là où trois messages suffisaient amplement.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Regardes du coté de CheckBox.Desabled et CheckBox.Enabled.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Perso, je travaillerais avec une variable de module et j'encadrerais le code du checkbox avec un test sur cette variable.

    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
     
    Private mInit As Boolean
     
    Private Sub CheckBox1_Click()
      If Not mInit Then
        …
        …
        ...
      End If
    End Sub
     
    Private Sub UserForm_Initialize()
      mInit = True
      CheckBox1.Value = True
      mInit = False
    End Sub


    Application.EnableEvents ne fonctionne pas car les évènements d'un userform ne sont pas des évènements de l'application (Excel, Word, …)

    Deux autres solutions, en fonction du contexte

    Si ton checkbox doit toujours être coché à l'ouverture, tu pourrais passer sa propriété Value à True lors de la conception. Ainsi, plus de problèmes. (Je suppose que tu n'es pas dans ce cas…)



    Si ton checkbox doit être coché ou non en fonction du contexte, à la place de ma solution précédente, tu pourrais externaliser l'initialisation et te passer de la variable de module.

    Dans le code de ton userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CheckBox1_Click()
      If Me.Visible Then
        …
        …
        ...
      End If
    End Sub
    Dans le code qui appelle le userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Test1()
      UserForm1.CheckBox1 = Hour(Now) < 12
      UserForm1.Show
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CheckBox1_Click()
     CheckBox1.Locked = CheckBox1
    End Sub

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CheckBox1_Click()
     CheckBox1.Locked = CheckBox1
    End Sub
    Hum… Et comment fais-tu pour cliquer dessus, après, si tu dois le décocher?


    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    Regardes du coté de CheckBox.Desabled et CheckBox.Enabled.
    Disabled n'existe pas, et Enabled = False n'empêche pas l'évènement Click de survenir.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour Pierre.
    Citation Envoyé par com-ace Voir le message
    Bonjour

    Une application qui lance un userform dans lequel il y a des contrôles CheckBox.
    Le lancement met à jour chaque champ de l'userform.
    En arrivant sur la MAJ des checkBox, cela déclenche l'événement Click qui est lui même un traitement indépendant de l'initialisation :
    - La MAJ met en place les informations
    - Le click gère le changement
    Cela entraîne à l'initialisation, un traitement de situations qui peuvent être différentes.
    J'ai essayé "Application.EnableEvents = False"
    Cela ne fonctionne pas.
    Y aurait il une solution qui permette de désactiver l'événement click quand un checkbox est initialisé.
    Merci de vos retours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CheckBox1_Click() CheckBox1.Locked = CheckBox1
    End Sub
     
     
    Private Sub CheckBox2_Click()
    CheckBox2.Enabled = Not CheckBox2
    End Sub
    Nom : Test.gif
Affichages : 1330
Taille : 25,1 Ko

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Robert,

    Citation Envoyé par dysorthographie Voir le message
    Bonjour Pierre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CheckBox1_Click() CheckBox1.Locked = CheckBox1
    End Sub
     
     
    Private Sub CheckBox2_Click()
    CheckBox2.Enabled = Not CheckBox2
    End Sub
    Pièce jointe 411030
    Il faut comprendre le contexte de la demande.

    On parle de désactiver l'évènement click du checkbox au moment de l'initialisation parce qu'à l'initialisation, en fonction du contexte, le checkbox sera coché ou pas (comme je l'ai illustré dans les deux solutions exposées), mais j'imagine bien qu'après, il faut pouvoir le décocher s'il l'a été lors de l'initialisation, puisqu'il y a du code qui est déclenché sur le clic. Parce que sans code sur le clic, toute cette gymnastique ne sert à rien…


    L'idée, qui me semble clairement exprimée par le demandeur, est qu'un checkbox est coché ou pas à l'initialisation du userform et que cela déclenche le code du clic (prévu pour un clic ultérieur, donc) qui doit être désactivé à l'initialisation du userform… Je ne vois pas comment comprendre autrement la demande initiale, et je ne vois pas comment y répondre autrement qu'avec les deux solutions que j'ai fournies.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Invité
    Invité(e)
    Par défaut
    tu as sens doute raisons mais ça ne m'avais pas semblé évident.

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    tu as sens doute raisons mais ça ne m'avais pas semblé évident.
    J'imagine, au vu de ce que tu as proposé
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 120
    Par défaut
    Merci à tous les deux
    Je vais essayer vos solutions et reviens vers vous
    Bonne soirée

  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
    bonsoir
    on a eu un exemple similaire d'un demandeur qui changait la valeur des checkbox par code ce qui declanchait leur evenement click
    j'avais resolu le probleme avec un truc tout bete

    englober le code de l'evenement dans un if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CheckBox1_Click()
    If Me.ActiveControl.Name = "CheckBox1" Then
    '...
    MsgBox "coucou"
    End If
    End Sub
    je sais ca parait con mais si la valeur du checkbox est changé par le code dans un module ou dans l'evenement d'un autre control le msgbox ne s'affichera pas car activecontrol ne sera pas le checkbox
    je sais c'est rigolo
    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

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    @ Patrick,


    C'est rigolo, mais cela ne fonctionne pas lors de l'initialisation (situation dans laquelle se trouve le demandeur), que ce soit par l'évènement Initialize ou par une proc extérieure (les deux cas que j'ai illustrés, le second ayant ma préférence), car au moment de l'initialisation, le userform n'est pas encore visible et donc, il n'y a pas de contrôle actif. Ta solution provoque une erreur lorsqu'elle est utilisée à l'initialisation (j'imagine que tu n'avais pas testé...). Ton astuce, qui est sympa, ne fonctionne que sur un formulaire visible.


    @Yeahou: Le Locked à True n'inhibe pas l'évènement Click
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 120
    Par défaut
    Merci à tous
    La 1ere solution de Pierre répond à mes attentes à la différence de la déclaration de la variable que j'ai rendu Public
    Merci aux autres pour leurs idées que je vais conserver

  16. #16
    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
    re
    Bonjour Pierre
    non je n'avais pas testé avec initialise
    je fait les manips de ce genre dans le activate en general afin que tout soit accessible
    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. [Débutant] gestion d'événement pour une API ATAPI
    Par citrix6 dans le forum VB.NET
    Réponses: 1
    Dernier message: 20/01/2015, 16h49
  2. [Joomla!] [Recherche] Gestion des adhérents pour une association
    Par xnopre dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 15/10/2010, 13h22
  3. Message pour une checkbox créée dynamiquement
    Par g0up1l dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 30/03/2007, 12h19
  4. [MySQL] UNE date pour plusieurs dates et UN évènement pour plusieurs évènements...
    Par Aliosha dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 19/03/2007, 21h58
  5. Héritage d'un événement pour une classe fille
    Par korntex5 dans le forum Langage
    Réponses: 4
    Dernier message: 11/01/2006, 16h48

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