VBA Question - CheckBox Code

Résolu
Bonjour,

Je développe actuellement un formulaire de saisie de questionnaire permettant de compiler aisément et rapidement les réponses à une étude.

Le questionnaire étant assez long je suis trés rapidement arrivé à un nombre important de CheckBox (Plus de 700)

Je souhaite pouvoir, gràce à un command Button, decocher simultanément toutes les checkBox du questionnaire.

Etant novice en VBA, j'ai opté au début pour une solution simple mais qui marche, basée sur 3 lignes.
Pour Exemple:

Private Sub CommandButton1_Click()
If CheckBox1.Value = True Then
CheckBox1.Value = False
End If
If CheckBox2.Value = True Then
CheckBox2.Value = False
End If
etc... jusqu'à 700

Comme vous pouvez vous en douter cette solution se révèle etre longue et fastidieuse à mettre en oeuvre.Je cherche donc une solution qui me permette de me simplifier la vie et de gagner du temps.

Merci beaucoup par avance de toutes les reponses que vous pourrez bien m'apporter!
Configuration: Windows XP
Internet Explorer 7.0

9 réponses

  1. Bonjour,

    Merci à lermitte222, j'ai utilisé ce morceau de code avec succès.

    Le Roger
    1. Ca y est ca marche!

      Bizarrement j'ai reçu ton dernier post apres avoir posté mon dernier contenant le lien. J'ai essayé le dernier code avec la boucle et tout marche impec.

      Il n'y a pas eu de contretemps , j'ai justement gagné une journée.

      Merci encore pour ton aide précieuse!
      1. C'est bien la manip que j'avais fait des le départ. J'ai mis le fichier allégé sur cjoint si tu veux y jeter un coup d'oeil

        https://www.cjoint.com/?kprQfmaICC

        Encore merci pour ton aide!
        1. Contributeur
          Avec le code de mon poste 6 ça fonctionne correctement.
          J'ai tester sur ton fichier mais c'est pas la peine de te le renvoyer puisque ça va.
          A+
      2. Contributeur
        Sorry, j'ai confondu avec un UF, voir ce code pour une feuille...
        Private Sub CommandButton1_Click()
        Dim Obj As OLEObject
            'boucle sur les objets de la Feuil1
            For Each Obj In Sheets("Feuil1").OLEObjects
                'verifie s'il s'agit d'un CheckBox
                If TypeOf Obj.Object Is MSForms.CheckBox Then
                    Obj.Object.Value = False
                End If
            Next Obj
        End Sub

        Désolé pour le contretemps mais je connais bien ces fonctions et je n'ai pas fait les tests que je fais habituellement.
        A+

        1. Contributeur
          Bon, procédont par ordre
          Tu te met sur la feuille avec lex CheckBox
          Tu met la barre d'outils Boite à outils Control
          Tu clic sur le Mode création (le bouton reste enfoncé).
          Tu doubleclic sur ton commandBouton.
          Tu va tomber sur...
          Private Sub CommandButton1_Click()
          
          End Sub

          Tu copie l'intérieur du code que je t'ai mis pour avoir...
          Private Sub CommandButton1_Click() 
          Dim Cont As Control
              For Each Cont In Me.Controls
                  If TypeOf Cont Is MSForms.CheckBox Then
                      Cont.Value = False
                  End If
              Next Cont
          End Sub

          CA DOIT FONCTIONNER
          Si ça va toujours pas met un classeur alléger sur Cjoint.com et tu met le lien dans un poste suivant
          A+
          EDIT:
          Possible que ça marche pas avec une feuille, modifier le code comme suit

          Private Sub CommandButton1_Click()
          Dim Cont As Control
          with Sheets("Feuil1") 'adapter au nom de la feuille
          For Each Cont In .Controls
          If TypeOf Cont Is MSForms.CheckBox Then
          Cont.Value = False
          End If
          Next Cont
          End With
          End Sub
          1. re

            j'ai fait plusieurs essais en mettant directement la routine dans la feuille principale sous l'evenement bouton click mais aussi dans un module standard ou un module de classe, cela me renvoie tout de suite une erreur quand je fais le test.

            Dans un module standard lorsque j'appel la procedure de la feuille principale par "call" il me renvoie l'erreur "Utilisation incorrect du mot clef me" et dans un module de classe il ya un probleme de referencement avec une erreur type "sub ou function non définie". Dans les 2 cas , j'avais préalablement passé la routine en public sub avec un nom de procédure que j'appel.

            Pour le cas de la sheet (feuille de saisie) l'erreur renvoyée reste toujours celle citée dans mon précédent post " me.controls" et j'utilise tout simplement la private sub sous l'evenment click.

            Je pense que la solution n'est pas trés loin mais je reste perdu^^

            Une petite idée sur le pourquoi de la chose ?
            1. Contributeur
              Tu doit mettre la routine dans le module de la feuille dans l'événement Clic du bouton.
              Si tu tient vraiment à mettre la routine dans un module général tu dit, je modifierai légérement la sub.
              1. Merci beaucoup pour la rapidité de ta réponse lermite222.

                Le code me renvoie une erreur au niveau de la ligne "For Each Cont In Me.Controls" precisement au niveau de "Me.Controls" avec une erreur type "membre de méthode ou de données introuvable"

                Toutes mes checkbox sont situées sur une feuille, je n'ai pas créer de Userform spécifique. L'erreur ne viendrait pas de la localisation des controles?

                J'avoue que je nage un peu,

                Merci d'avance.
                1. Contributeur
                  Bonjour,
                  Essaye avec...
                  Private Sub CommandButton1_Click() 
                  Dim Cont As Control
                      
                      For Each Cont In Me.Controls
                          If TypeOf Cont Is MSForms.CheckBox Then
                              Cont.Value = False
                          End If
                      Next Cont
                  End Sub

                  A+