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 :

Limiter nombre de checkbox possibles [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut Limiter nombre de checkbox possibles
    Bonjour à vous et tout d'abord merci à ceux qui prendront quelques minutes pour lire ce message !

    Je viens de créer un document Excel pour des besoins professionnels. Je bloque juste sur un truc :

    Par l'intermédiaire d'un bouton, je fais appel à userform. Dans userform j'ai 8 cases à cocher (checkbox) .

    Je souhaite que l'utilisateur ne puisse choisir que 1,2 ou 3 cases sur les 8 et afficher un message d'erreur si plus de 3.

    Si quelqu'un peut m'aiguiller dans ma recherche,

    Merci d'avance à vous

    Ced

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une solution simple serait de créer une fonction qui renvoie une valeur Boolean suivant que le nombre maximum de choix est atteint ou pas
    Exemple (L'argument optionnel MaximumChoice permet d'éventuellement modifier le nombre de choix autorisé).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Function IsMaxOption(Optional MaximumChoice As Byte = 3) As Boolean
     Dim Count As Byte, c As Byte
     For c = 1 To 8
      Count = Count + Abs(Controls("CheckBox" & c).Value)
      If Count > MaximumChoice Then IsMaxOption = True: Exit Function
     Next
    End Function
    Dans la procédure événementielle de chaque CheckBox invoquer la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CheckBox5_Click()
     If IsMaxOption Then MsgBox "Trop d'options"
    End Sub
    On pourrait aussi prévoir le message dans la fonction.
    Le nombre de procédures événementielles pourrait être réduit en utilisant un module de classe.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    Super Philippe,

    Merci pour cette réponse rapide et complète.

    Juste pour peaufiner la chose:

    L’événement (message box) apparaît au 4ème clic ...mais le choix 4 reste validé dans le formulaire.

    Si je clic sur messagebox Ok, je peux toujours les valider (mais avec le message d'erreur)
    Au final je peux quand même valider avec les 8 options cochées ...

    Je vais faire des essais en essayant d'adapter le code, si vous voulez me donner un coup de main ...je suis preneur

    Ced

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Dans la solution jointe, on utilise la propriété Enabled pour désactiver les autres CheckBox lorsque le nombre maximum de choix est atteint.

    Cordialement.
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Alors une solution avec la procédure événementielle BeforeUpdate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CheckBox6_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
     Cancel = IsMaxOption
    End Sub
    Dans la fonction, modifier le test > par = (en rouge)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function IsMaxOption(Optional MaximumChoice As Byte = 3) As Boolean
     Dim Count As Byte, c As Byte, c1 As Byte
     For c = 1 To 8
      Count = Count + Abs(Controls("CheckBox" & c).Value)
      If Count = MaximumChoice Then IsMaxOption = True:  Exit Function
     Next
    End Function
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    Merci à vous 2 pour vos réponses et votre aide!

    Les 2 solutions marchent mais j'ai un petit faible pour le solution de gFZT82 avec la propriété Enabled...
    ça en jette !

    Encore merci pour votre disponibilité et ne changez rien !



    Ced

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

Discussions similaires

  1. Limiter le nombre de checkbox cochés
    Par aertys dans le forum VB.NET
    Réponses: 4
    Dernier message: 01/06/2013, 18h14
  2. [XL-2003] Limitation du nombre de checkbox cliquées
    Par FFGUY dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 15/06/2009, 23h15
  3. Fonction pour limiter le nombre de checkboxes cochees
    Par nabab dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/07/2007, 20h24
  4. Réponses: 9
    Dernier message: 23/06/2006, 17h30
  5. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31

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