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

Excel Discussion :

Select case avec checkbox [XL-2013]


Sujet :

Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut Select case avec checkbox
    Bonjour à tous,

    N'étant pas très à l'aise en vba, j'ai gérer mes checkbox avec des if.
    Je ne sais pas si c'est mieux avec un select case mais juste par curiosité je voudrais savoir si il est possible de gérer ce genre de chose avec un select case, mon code :
    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
    20
    21
    If ActiveSheet.CheckBox1.Value = True Then
       liste.Add Array("EAP1", Workbooks("blablabla.xlsx").Worksheets("blabla").Cells(8, 3).Value)
       End If
       If ActiveSheet.CheckBox2.Value = True Then
       liste_EAP.Add Array("EAP2", Workbooks("blablabla.xlsx").Worksheets("blabla").Cells(8, 5).Value)
       End If
       If ActiveSheet.CheckBox3.Value = True Then
       liste_EAP.Add Array("EAP3", Workbooks("blablabla.xlsx").Worksheets("blabla").Cells(8, 7).Value)
       End If
       If ActiveSheet.CheckBox4.Value = True Then
       liste_EAP.Add Array("EAP4", Workbooks("blablabla.xlsx").Worksheets("blabla").Cells(8, 9).Value)
       End If
       If ActiveSheet.CheckBox5.Value = True Then
       liste_EAP.Add Array("EAP5", Workbooks("blablabla.xlsx").Worksheets("blabla").Cells(8, 11).Value)
       End If
       If ActiveSheet.CheckBox6.Value = True Then
       liste_EAP.Add Array("EAP6", Workbooks("blablabla.xlsx").Worksheets("blabla").Cells(8, 13).Value)
       End If
       If ActiveSheet.CheckBox7.Value = True Then
       liste_EAP.Add Array("EAP7", Workbooks("blablabla.xlsx").Worksheets("blabla").Cells(8, 15).Value)
       End If
    Ou si quelqu'un a une idée pour alléger ce code ça me serait très utile aussi (il s'agit la d'un echantillon mais en vérité j'ai beaucoup plus de checkbox que ça).
    Merci d'avance !

  2. #2
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 335
    Points
    10 335
    Par défaut
    Bonjour,

    Soit il manque un bout d'explication, soit tu mélanges certaines choses...

    Un Select case te permet d'appliquer différents bouts de code, en fonction de la valeur d'une même variable (ou du même contrôle).

    Ce qui voudrait dire dans ton cas, un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select Case ActiveSheet.CheckBox1.Value
        Case True
               'ton code
        Case False
               'ton autre code
    End Select
    ET ce, pour chacune de tes checkbox...


    En gros, le Select Case c'est l'équivalent d'un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If ActiveSheet.CheckBox1.Value = true then
        'ton code
    Else  'ou ElseIf ActiveSheet.CheckBox1.Value = False then
        'ton autre code
    End If
    Mais le Select Case est plus adapté dans le cas où il peut y avoir plus de 2 valeurs différentes.


    La première question qui me vient à l'esprit c'est :

    tes checkbox, elles font partie du même groupe et une seule peut-être active à la fois (et donc tu cherches dans un premier temps à savoir laquelle a été cochée pour savoir quelle portion du code appliquer), ou n'importe quel nombre d'entres-elles peut être à vrai ou faux d'un traitement à l'autre (et donc que tu dois tester la valeur de chacune d'entres-elles) ?

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Bonjour,

    En effet je me rend bien compte que pour gérer un booléen ça ne sert pas a grand chose.

    Mes checkbox sont indépendantes les unes des autres, tous les scénarios sont possibles.

  4. #4
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 335
    Points
    10 335
    Par défaut
    Ok donc oui, pour le coup, un Select Case ne changera pas grand chose...

    Au pire, ce que tu peux tenter de faire pour simplifier le code, c'est de créer une fonction d'ajout puis :

    - boucler sur tous tes contrôles
    - vérifier qu'il s'agît d'une CheckBox
    - si oui, vérifier qu'elle est cochée
    - et si c'est le cas, appeler ta fonction d'ajout en lui passant les bons arguments.

    Après cela dépendra de tes valeurs, par exemple, le nom du classeur et de la feuille sont toujours identiques (ou la, c'était juste pour l'exemple) ? Il n'y a que le EAP1, EAP2, ... et le numéro de colonne de la cellule qui changent ? Et si oui, c'est toujours sous cette forme, juste le numéro qui change ?

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Le soucis avec cette méthode de boucle sur tous les contrôles c'est que, dans la même feuille, j'ai d'autres checkbox qui peuvent être cochées et qui n'ont rien à voir avec mes checkbox en questions (sur 9 checkbox seulement les 7 premières seraient amenées à appeler cette fonction d'ajout).

    Le nom du classeur est toujours le même, celui de la feuille également et oui il n'y a que le EAP1,2,3 etc... et la coordonnée de la cellule qui changent.

  6. #6
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 335
    Points
    10 335
    Par défaut
    Citation Envoyé par GuillaumeNcy Voir le message
    Le soucis avec cette méthode de boucle sur tous les contrôles c'est que, dans la même feuille, j'ai d'autres checkbox qui peuvent être cochées et qui n'ont rien à voir avec mes checkbox en questions (sur 9 checkbox seulement les 7 premières seraient amenées à appeler cette fonction d'ajout).
    Pour moi cela n'est pas forcément gênant, en fait cela dépend comment tu construis tes tests, tu pourrais très bien faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Pour chaque contrôle
       si contrôle = checkbox ET nom du contrôle différent de XXX ET nom du contrôle différent de YYY ET valeur contrôle = true alors
          appelle de la fonction(arguments)
       fin si
    prochain contrôle

    Si tes numéro de CheckBox sont bien construits comme dans ton bout de code et dans le même ordre que tes EAP, tu dois pouvoir déduire le code EAPxx par rapport au numéro de la CheckBox.

    Il n'y a que pour le numéro de colonne où il faudra ruser un peu car le décalage n'est pas fixe par rapport au numéro de contrôle mais au pire si tu ne veux pas t'embêter, tu peux utiliser un Select Case dans ta fonction d'ajout pour déterminer ton numéro de colonne en fonction de ton numéro/nom de contrôle.

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Je vais partir sur ton modèle ça a l'air plus compact que le miens

    Pour la ruse ça ira, la ligne ne change jamais, et la colonne se décale de +2 pour chaque EAP, donc ça va faire un truc du style :
    if je m'occupe de la checkbox X et qu'elle est true
    then add array (EAPX ; cellule(8, X+2))

    Merci pour tes réponses claires et rapides !

  8. #8
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 335
    Points
    10 335
    Par défaut
    Attention ta colonne est à +2 par rapport à la colonne de l'EAP précédent (qui n'aura pas forcément été cochée) mais pas à +2 par rapport à ton numéro d'EAP :


    EAP1 colonne 3
    EAP2 colonne 5 (+2 par rapport à la colonne précédente, mais n° d'EAP + 3)
    EAP3 colonne 7 (+2 par rapport à la colonne précédente, mais n° d'EAP + 4)
    etc etc

    Le décalage entre le n° d'EAP et sa colonne, s'incrémente de 1 pour chaque CheckBox.


    Donc il faut soit "ruser" pour gérer cette incrémentation, soit si tu n'as que 7 cas à gérer, un Select Case :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select Case valeur_EAP 
       Case EAP1
          num_col = 3
       Case EAP2
          num_col = 5
       Case ...
     
    End Select

    De rien, et bon courage pour la suite !

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Exact bien vu!

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

Discussions similaires

  1. Comment eviter de faire un Select Case avec beaucoup de valeur
    Par jam92400 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 05/11/2010, 15h19
  2. Select Case avec plusieurs variables
    Par sphynxounet dans le forum VB.NET
    Réponses: 10
    Dernier message: 10/08/2009, 18h16
  3. Select case avec then qui retourne une variable
    Par dinette dans le forum SQL
    Réponses: 6
    Dernier message: 06/07/2009, 11h03
  4. select case avec if
    Par *kitty* dans le forum VB 6 et antérieur
    Réponses: 24
    Dernier message: 27/11/2008, 15h59
  5. Probleme avec Select Case
    Par GeffD dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 07/03/2005, 15h28

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