VBA Question - CheckBox Code

Résolu/Fermé
vicelow - 15 oct. 2008 à 10:49
 LeRogerTroutman - 10 sept. 2009 à 19:36
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!
A voir également:

9 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 oct. 2008 à 11:02
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
LeRogerTroutman
10 sept. 2009 à 19:36
Bonjour,

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

Le Roger
1
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 oct. 2008 à 12:25
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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 ?
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 oct. 2008 à 16:50
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
0
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!
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 oct. 2008 à 18:09
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+
-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!
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 oct. 2008 à 17:25
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