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 :

Compteur: Checkbox & Label


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Par défaut Compteur: Checkbox & Label
    Bonjour,

    je vais essayer d'etre clair : je pense que j'ai besoin d'un compteur.
    Je souhaite enregistrer le Caption d'un Label si la checkbox en face est cochée.

    Exemple

    Checkbox1 Label1
    Checkbox2 Label2

    Si Checkbox1 est cochée alors enregistre le caption de Label1 dans une variable String
    Si CheckBox1 ET checkBox2 sont cochées alors enregistre Label1 ET Label2 dans une variable

    Le chiffre de la Checkbox correspondra toujours au chiffre du label en face.

    Le but étant ensuite d'afficher un msgbox pour dire à l'utilisateur quelles checkbox il a choisi.

    Merci à vous

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Lors de la validation via un bouton sur le UserForm, cela devrait ressembler à un truc du style :
    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
    Private Sub CommandButton1_Click()
    Dim C As Control, Nb As Byte, x As Byte, Var As String
     
    'comptage des Checkbox insérés sur le UserForm
    For Each C In Me.Controls
        If TypeOf C Is MSForms.CheckBox Then Nb = Nb + 1
    Next C
     
    'bouclage sur les CheckBox
    For x = 1 To Nb
        If Me.Controls("CheckBox" & x) = True Then
        'si la Checkbox est validée, mémorisation de la valeur du label correspondant
        Var = Var & Me.Controls("Label" & x).Caption & Chr(10)
        End If
    Next x
     
    MsgBox "les CheckBox validées sont :" & Chr(10) & Var
     
    End Sub

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    bonjour fring

    beau code

    si je peut me permettre dans la déclaration des variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim C As Controls, Nb As Byte, x As Byte, Var As Str
    il faut supprimer le s de Controls sinon il y a une imcompatibilité de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim C As Control, Nb As Byte, x As Byte, Var As Str
    bonne journée

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Exact merci oeil de Lynx j'ai codé à la volée et le "s" est venu se coller à l'insu de mon plein gré (c'est rectifié)

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Citation Envoyé par fring Voir le message
    Exact merci oeil de Lynx j'ai codé à la volée et le "s" est venu se coller à l'insu de mon plein gré (c'est rectifié)
    J'aimerais bien sortir du code comme ça à la volée car moi il me faut un peut plus de temps
    encore bravo

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Par défaut
    Salut,
    Pour revenir au code proposé par fring
    (j'espère ne pas dire de bêtises)

    Imaginons 5 Checkbox cochés comme suit.

    CheckBox1 = True
    CheckBox2 = True
    CheckBox3 = True
    CheckBox4 = False
    CheckBox5 = True

    Tu vas donc compter 4 Checkbox coché et boucler des CheckBox1 à CheckBox4

    Tu vas donc oublier CheckBox5 (qui lui est coché).

    Je pense qu'il faut donc mieux boucler sur tout les CheckbOx et isoler le Chiffre si besoin pour déterminer quel Label récupérer.

    (pas sûr d'avoir été clair).

    @+
    Julien

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Par défaut
    totalement impressionnant

    Après adaptation du code à mon cas personnel au niveau du nom des CheckBox et des labels
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.Controls("CheckBox" & x) = True Then
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.Controls("CB_" & x) = True Then
    Cela marche parfaitement point -> .

    Désolé Epsylon_9 mais je vais devoir te contredire, il ne s'arrete pas à la première case non-cochée.

    Si je peux me permettre une question d'odre métaphysique, quelle est ta méthode, fring, pour déterminer que telle chose doit etre une variable, que telle autre doit etre un compteur incrémenté pour etre repris dans telle procédure ?
    Je veux dire : est-ce qu'il y a une méthode de travail, voire de réflexion particulière, un "truc", pour organiser l'écriture de son code ?

    En tout cas merci, et n'oubliez pas que : i'll be back !
    à Zihack

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Par défaut
    Re,
    Je n'ai pas dit que la boucle s'arrêtait à la première non cochée.

    Reprenons l'exemple.
    Toujours

    CheckBox1 = True
    CheckBox2 = True
    CheckBox3 = True
    CheckBox4 = False
    CheckBox5 = True

    Mes commentaires en gras
    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
    Private Sub CommandButton1_Click()
    Dim C As Control, Nb As Byte, x As Byte, Var As String
     
    'comptage des Checkbox insérés sur le UserForm
    For Each C In Me.Controls
        If TypeOf C Is MSForms.CheckBox Then Nb = Nb + 1
    Next C'bouclage sur les CheckBox
    'Avec l'exemple Nb = 4
     'Donc For x = 1 To 4 '=> On ne testera donc pas la valeur de
    'Checkbox5 Est ce que je suis plus clair
    For x = 1 To Nb
        If Me.Controls("CheckBox" & x) = True Then
        'si la Checkbox est validée, mémorisation de la valeur du label correspondant
        Var = Var & Me.Controls("Label" & x).Caption & Chr(10)
        End If
    Next x
     
    MsgBox "les CheckBox validées sont :" & Chr(10) & Var
     
    End Sub

  9. #9
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Tu peux expliquer comment obtiens-tu cette valeur ??

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Par défaut
    Re,

    Et bien en relisant cela vient sauté à la figure et je pensais que la première boucle servait à compter le nombre de CheckBox Cochés... (et non juste compter les Checkbox...) étant donné que ce n'est PAS DU TOUT LE CAS et bien je vous pris de bien vouloir excuser cette intervention inutile .

    Plates excuses...

    @+
    Julien
    PS: je suis parti réapprendre à lire un code VBA...

  11. #11
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par Xiombarg2911 Voir le message
    Si je peux me permettre une question d'odre métaphysique, quelle est ta méthode, fring, pour déterminer que telle chose doit etre une variable, que telle autre doit etre un compteur incrémenté pour etre repris dans telle procédure ?
    Je veux dire : est-ce qu'il y a une méthode de travail, voire de réflexion particulière, un "truc", pour organiser l'écriture de son code ?
    Oufti..., je ne pense pas qu'il y ait UNE méthode de réflexion.
    Pour une même question tu vas avoir 5 propositions différentes selon la logique, les habitudes, les préférences de chacun. C'est nottament ça qui fait toute la richesse d'un forum.
    Je dirais que les étapes sont :
    1. qu'est ce que j'ai au départ ?
    2. qu'est ce que je veux obtenir à l'arrivée ?
    3. quelles sont les étapes (à ma connaissance) qui me permettraient d'y arriver ?
    4. dans quel ordre ranger ces étapes ?
    5. comment optimiser l'écriture de mon code (ou comment économiser les touches du clavier) ?

    Une fois que tout ça est bien clair dans ta tête, 75% du boulot est fait.

  12. #12
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par epsylon_9 Voir le message
    Et bien en relisant cela vient sauté à la figure et je pensais que la première boucle servait à compter le nombre de CheckBox Cochés... (et non juste compter les Checkbox...) étant donné que ce n'est PAS DU TOUT LE CAS et bien je vous pris de bien vouloir excuser cette intervention inutile
    Ya pas de soucis et il n'y a pas d'intervention inutile
    Jette un oeil sur le proverbe chinois ci-dessous

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Par défaut
    Je reviens vers vous pour un tout petit problème suplémentaire.
    Mon manque de maîtrise de VBA m'empêche de trouver la solution moi-même, solution qui j'en suis sur est vraiment toute simple.

    En reprenant le code ci-dessus, je cherche à afficher un message dans le cas où toute les cases sont décochées.

    J'ai essayé betement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Me.Controls("CB_" & x).Value = False Then
                ClassesSelectionnees = "Aucune"
            End If
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.Controls("CB_" & x).Value = True Then
                ClassesSelectionnees = "Aucune"
            End If
    Mais dans ce cas si au moins UNE case est décochée il m'affiche "Aucune".

    Je ne sais pas lui dire : "Si tu ne trouves aucune valeur true" ou alors : "Si toutes les valeurs sont False"

    J'ai comme l'impression qu'il me faut une autre variable pour ce cas précis .... C'est une bonne piste ?

    Merci à vous

    Edit : C'est peut etre "Dans le cas où" toutes les valeurs sont False, c'est à dire avec un For, mais je n'arrive pas a le traduire

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Par défaut
    Salut,

    Bon je vais essayer de ne pas dire de bêtise :p

    Il faut que tu boucle sur TOUT les Checkbox et que tu regarde leur état si au moins une est bonne tu arrête la boucle

    Essaies un truc du style

    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
    Dim C As Control
    Dim AllUnChecked As Boolean
    'on va dire que par défaut ils sont tous
    'décoché
    AllUnChecked = True
     
    For Each C In Me.Controls
        If TypeOf C Is MSForms.CheckBox Then
            If C.Value Then
                AllUnChecked = False
                Exit For
            End If
        End If
    Next C 'bouclage sur les CheckBox
     
     
    If AllUnChecked Then MsgBox "Ils sont tous décoché"
    Voilà j'espère que cela t'aide

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Par défaut
    Haha la variable Booléenne ^^ forcémenent je n'y avais pas pensé !
    Ton code fonctionne bien, merci beaucoup.

    Par contre, vu de mon niveau j'ai l'impression qu'il manque des choses. Par exemple tu écris :
    je comprend pas, il devrait y avoir If C.Value = All False ou un truc comme ça.

    Ou alors, peut etre que l'objet CheckBox ne prend une Value que si elle est cochée ? Si elle est décochée elle n'a pas de Value, donc implicitement false. C'est la seule explication que je vois.

    merci epsylon_9

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If C.Value Then 
    'Est équivalent à 
    If (C.Value = True) Then
     
    'De même
     
    If Not C.Value Then 
    'Est équivalent à 
    If (C.Value = False) Then
    Voila j'espère que tu y vois plus clair

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Par défaut
    parfaitement limpide et logique

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

Discussions similaires

  1. Boucle sur checkbox et label
    Par rakhann974 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 23/10/2013, 07h49
  2. aligner checkboxes et label
    Par SpaceFrog dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 09/10/2007, 14h34
  3. [débutant] [VB.NET] Timer + label + checkbox ...
    Par Amenos dans le forum Windows Forms
    Réponses: 14
    Dernier message: 27/03/2006, 13h26

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