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 combiner les valeurs de différentes checkbox dans une zone résultat [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut Userform combiner les valeurs de différentes checkbox dans une zone résultat
    Bonjour,

    Je souhaite réaliser un user form ou l'utilisateur va cocher des cases. en fonction des case cochées, je vais afficher le résultat dans une textbox.

    Ma question: existe une façon un peu plus générale de gérer la chose que d'écrire toutes les combinatoires dans chaque checkbox ?

    Dans le code ci dessous qui fonctionne, j'ai 2 coches et donc déjà 4 possibilités.
    Or je vais avoir 8 cases à cocher cela va me faire 64 cas !

    Merci pour vos conseils
    Denis
    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 CheckBox1_Click()
       If CheckBox1.Value = False And CheckBox2.Value = False Then TextBox1 = "vert"
       If CheckBox1.Value = True And CheckBox2.Value = False Then TextBox1 = "rouge"
       If CheckBox1.Value = False And CheckBox2.Value = True Then TextBox1 = "violet"
       If CheckBox1.Value = True And CheckBox2.Value = True Then TextBox1 = "jaune"
    End Sub
    Private Sub CheckBox2_Click()
       If CheckBox1.Value = False And CheckBox2.Value = False Then TextBox1 = "vert"
       If CheckBox1.Value = True And CheckBox2.Value = False Then TextBox1 = "rouge"
       If CheckBox1.Value = False And CheckBox2.Value = True Then TextBox1 = "violet"
       If CheckBox1.Value = True And CheckBox2.Value = True Then TextBox1 = "jaune"
    End Sub

  2. #2
    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
    Or je vais avoir 8 cases à cocher cela va me faire 64 cas !
    comment as-tu fait ce calcul ? T'es sûr que cela ne ferait pas .... 255 256 ?
    De toutes manières : une suggestion
    si tu affectes 1 à un état et 0 à l'autre, tes combinaisons possibles sont tous les binaires compris entre 00000000 et 11111111 inclus.
    Yapluka.

    Je vais en ce samedi matin, non t'écrire ton code sur la base que je t'ai indiquée (trop simple), mais me contenter de t'inviter à regarder ce que retournent ces msgboxes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MsgBox WorksheetFunction.Bin2Dec("00110101")
    MsgBox True ^ 2
    MsgBox False ^ 2
    MsgBox False ^ 2 & True ^ 2
     
    MsgBox WorksheetFunction.Bin2Dec(True ^ 2 & False ^ 2 & True ^ 2)
    A en comprendre le sens et ... à t'en servir, hein ...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Total As Integer, Bits, Couleur
    Couleur = Array("vert", "rouge", "violet", "jaune", "vert", "rouge", "violet", "jaune")
    Bits = Array(0, 1, 2, 4, 8, 16, 32)
    For i = 1 To 4
       Total = Total + Me.Controls("CheckBox" & i) * Bits(i)
    Next
    MsgBox Couleur(Abs(Total))

  4. #4
    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,
    Indépendamment de la réponse des autres intervenants, si tu effectues le même test au clic d'un CheckBox, il est inutile de le répéter à chaque procédure événementielle
    Ainsi tu crées une nouvelle procédure nommée par exemple Checking
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Checking()
       If CheckBox1.Value = False And CheckBox2.Value = False Then TextBox1 = "vert"
       If CheckBox1.Value = True And CheckBox2.Value = False Then TextBox1 = "rouge"
       If CheckBox1.Value = False And CheckBox2.Value = True Then TextBox1 = "violet"
       If CheckBox1.Value = True And CheckBox2.Value = True Then TextBox1 = "jaune"
    End Sub
    que tu invoques pour chaque click comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CheckBox1_Click()
     Checking
    End Sub
    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

  5. #5
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut
    Merci Philippe et Dysorthographie,

    En tatonant j'a essayé de comprendre avec mes 4 boutons.
    En fait la boucle donne la position de l'information dans la zone array, mais il faut mettre des valeurs vides pour tous les cas pour que le pointeur renvoie la bonne valeur.
    Je pensais pouvoir forcer les valeur dans le tableau genre Couleur(Array(3)) = "Bouton 1" pour ne renseigner que les valeurs utiles, mais la syntaxe n'est pas la bonne, je vais chercher.
    Ca fonctionne, je vais le transposer dans mon application à 8 choix.... enfin, je vais voir si je peux limiter les choix, parce que ça devient fastidieux !
    J'espère que je ne vais pas avoir de doublon !

    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
     
    Private Sub CheckBox1_Click()
    Checker_val
    End Sub
    Sub Checker_val()
    Dim Total As Integer, Bits, Couleur
    'Couleur = Array("      0         1    2          3     4         5     6           7     8         9     10          11 12              13   14                 15     16        17   18            19  20              21   22              23  24           25  26  27  28              29     30
    Couleur = Array("Pas de bouton", "", "Bouton 1", "", "Bouton 2", "", "Bouton 1&2", "", "Bouton 3", "", "Bouton 1&3", "", "Bouton 2 & 3", "", "Bouton 1 & 2 & 3", "", "Bouton 4", "", "Bouton 1 & 4", "", "Bouton 2 & 4", "", "Bouton 1&2&4", "", "Bouton 3&4", "", "", "", "Bouton 2&3&4", "", "Bouton 1&2&3&4")
    Bits = Array(0, 2, 4, 8, 16, 32)
    For i = 1 To 4
       Total = Total + Me.Controls("CheckBox" & i) * Bits(i)
    Next
    'MsgBox Total
    TextBox1.Value = Couleur(Abs(Total))
    End Sub
    En tout cas Grand merci, cela me permet d'avancer pas à pas.
    Denis

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

Discussions similaires

  1. [AC-2003] mettre a jour toutes les valeurs d'un colonne dans une zone de liste
    Par yieiyiei dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/04/2015, 21h41
  2. récupérer les valeurs d'un checkbox dans une liste
    Par ikouhan dans le forum Struts 1
    Réponses: 19
    Dernier message: 31/08/2010, 14h22
  3. Réponses: 5
    Dernier message: 18/02/2008, 16h11
  4. Réponses: 4
    Dernier message: 03/08/2007, 14h09
  5. Récupérer les valeur d'un énuméré dans une string
    Par Oliv_75 dans le forum SL & STL
    Réponses: 5
    Dernier message: 28/09/2005, 00h55

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