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. 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+
    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. Bonjour,

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

        Le Roger
        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. 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
              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. 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. 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. 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+