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 :

Pb de comportement de checkbox [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant en gestion de projet
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en gestion de projet

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Par défaut Pb de comportement de checkbox
    Bonjour à tous,

    J'ai un petit problème pour coder le comportement d'un ensemble de checkboxes.
    Ma macro propose de réaliser 6 rapports différents. L'utilisateur coche les rapports qui l'intéressent puis un bouton déclenche le traitement.

    Aux 6 cases à cocher des rapports, j'en ai ajouté une septième "Tous".

    Lorsque je coche/décoche "Tous", les autres cases suivent. Pas de problème.
    Maintenant, si à partir d'une situation où toutes les cases sont cochées, je décoche un rapport, je voudrais que la case "Tous" se décoche également. Ca, j'y arrive.
    Le problème, c'est que lorsque "Tous" se décoche, elle décoche aussi toutes les autres ! Et je me retrouve sans cases cochées alors que j'attends que les cases des autres rapports restent cochées.

    Ci-dessous mon code, super basique :

    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
    Private Sub cb_Tous_Click()
     
        CB_Schedule.Value = CB_Tous.Value
        CB_RetT = CB_Tous.Value
        CB_Jobs = CB_Tous.Value
        CB_Frequences = CB_Tous.Value
        CB_Dependances = CB_Tous.Value
        CB_Evenements = CB_Tous.Value
     
    End Sub
     
    Private Sub cb_schedule_click()
     
        If CB_Schedule.Value = False Then CB_Tous.Value = False
     
    End Sub
    Je ne comprends pas pourquoi lorsque la procédure cb_schedule_clik s'exécute, la procédure cb_Tous_click s'exécute aussi.

    Merci pour votre aide. Je dois rater un truc.

  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,

    pourtant logique rien qu'en lisant la ligne de code n°14 ‼   A mettre en commentaire pour vérifier …

    ___________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant en gestion de projet
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en gestion de projet

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Par défaut Précision
    Bonjour Marc,

    Ce n'est pas facile à expliquer par écrit mais :

    Ce que j'attends de la ligne 14, c'est que si je décoche cette case alors la case "Tous" se décoche aussi mais que les cases des autres rapports restent cochées.

    Or ce qui semble se passer, c'est que lorsque la ligne 14 s'exécute suite à une action Click, elle décoche bien la case "Tous". Mais il semble que la procédure Click associée à cette case "Tous" s'exécute aussi. Ce qui ne devrait pas être vu que je n'ai pas cliqué sur cette case "Tous".

    J'espère que j'arrive à être clair.

    Merci,

  4. #4
    Membre à l'essai
    Homme Profil pro
    Consultant en gestion de projet
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en gestion de projet

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Par défaut @ dysorthographie
    Bonjour dysorthographie,

    Ca ne marche pas mais je vois l'idée.
    Je vais travailler dessus.

    Merci,

  5. #5
    Invité
    Invité(e)
    Par défaut
    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 IsNotDecocheTousCB As Boolean
    Private Sub cb_Tous_Click()
     If IsNotDicocheTousCB Then Exit Sub
        CB_Schedule.Value = CB_Tous.Value
        CB_RetT = CB_Tous.Value
        CB_Jobs = CB_Tous.Value
        CB_Frequences = CB_Tous.Value
        CB_Dependances = CB_Tous.Value
        CB_Evenements = CB_Tous.Value
     
    End Sub
     
    Private Sub cb_schedule_click()
     IsNotDecocheTousCB = True
        If CB_Schedule.Value = False Then CB_Tous.Value = False
     IsNotDecocheTousCB = False
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    CB_Tous.Value = False et cb_Tous_Click() c'est la même chose!

    ça
    Dim IsNotDecocheTousCB AsBoolean c'est la premier ligne de ton code touy en haut du formulaire

    Édite:
    J'avais prévenu
    dysorthographie!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim IsNotDecocheTousCB AsBoolean
    Private Sub cb_Tous_Click() 
    If IsNotDicocheTousCB Then Exit Sub




    Dernière modification par Invité ; 21/03/2017 à 14h29.

  7. #7
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Bonjour à tous,

    Le problème est que les événements des controles CheckBox s'interfèrent entre eux.
    Comme a dit dysorthographie, il faut créer une variable boolean pour éviter cela.
    A mettre tout en haut du code dans la partie "Général"
    puis pour chacune des procédures des checkbox en prenant soin de changer les noms
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CB_Schedule_Click()
     
    If EvitSub Then Exit Sub
     
    If CB_Tous And Not CB_Schedule Then
        EvitSub = True
        CB_Tous = False
    End If
    EvitSub = False
     
    End Sub
    La procédure du checkbox tous
    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 CB_Tous_Click()
     
    If EvitSub Then Exit Sub
     
    EvitSub = True
    CB_Schedule.Value = CB_Tous.Value
    CB_RetT = CB_Tous.Value
    CB_Jobs = CB_Tous.Value
    CB_Frequences = CB_Tous.Value
    CB_Dependances = CB_Tous.Value
    CB_Evenements = CB_Tous.Value
    EvitSub = False
     
    End Sub

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    L'évènement click d'une checkbox est déclenché par toute modification (de False à True ou de True à False) de la propriété Value de la checkbox, que cette modification soit le résultat d'un click sur la checkbox ou celui d'une instruction par code exécutée depuis n'importe o^.
    Il est donc absolument normal que l'évènement CB_Tous_Click soit déclenché lorsque tu cliques sur la checkbox CB_Schedule puisque l'une des instructions résultant de ce clic modifie la propriété Value de la checkBox CB_Tous

  9. #9
    Membre à l'essai
    Homme Profil pro
    Consultant en gestion de projet
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en gestion de projet

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Par défaut Click vs Change
    Merci à tous pour votre aide.

    @ unparia : j'étais arrivé à cette conclusion également.

    Cependant, il me semble qu'il existe un évènement Change. C'est dommage que le Click ne fasse pas la différence entre une action directe sur le contrôle et une modification de la propriété. Quelle différence avec le Change ?

    Bon, je suis rentré chez moi et mon petit ne va pas me laisser le temps de coder ce soir.
    Je reviens vers vous demain pour le passage en "RESOLU" après confirmation.

    Bonne soirée,

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Quelle différence avec le Change ?
    Même punition, même motif. Si tu changes un état, les deux évènements sont provoqués (le Change en 1er, le click en second)

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

Discussions similaires

  1. [Débutant] Comportement d'un CheckBox dans un ListView
    Par UserOlivier dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 24/01/2014, 09h44
  2. Réponses: 13
    Dernier message: 01/04/2013, 13h50
  3. Réponses: 5
    Dernier message: 27/10/2011, 11h05
  4. Checkbox et liens HTML : comportements bizarre
    Par sliderman dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 04/12/2008, 09h49
  5. CheckBox en Read Only
    Par MrJéjé dans le forum C++Builder
    Réponses: 7
    Dernier message: 23/06/2002, 15h00

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