Boucle Do sur des controles CheckBox [Résolu]

Messages postés
37
Date d'inscription
mardi 24 août 2004
Statut
Membre
Dernière intervention
2 décembre 2010
- - Dernière réponse : NSUADI
Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
- 6 août 2010 à 03:22
Bonjour

Voila, j'ai besoin d'un coup de main sur un petit problème.

********************
Enoncé du problème *
********************

Je dispose de 7 checkbox nommé Check_B_Lundi à Check_B_Dimanche

J'ai un bouton [Enregistrer] qui va me permettre d'enregistrer plusieurs champs dans un table

Si l'utilisateur clic sur plusieurs CheckBox Ex : Lundi,Mardi,Mercredi , le bouton Enregistrer devra creer 3 enregistrements ou mettre à jour 3 enregistrements.

Comment procederiez-vous pour eviter de faire 7 fois le même code ?
Sachant que le seul paramettre qui va bougé est en faite le 'Jour'

J'avais pensé faire une boucle 7 fois et passer les 7 checkbox en revu
à l'aide d'un index de 1 à 7

For IndexA= 1 to 7

select Case IndexA

Case 1
JourSemaine=1
if Check_B_Lundi.checked=False
Exit Sub
end if
Case 2
JourSemaine=2

....

end select


Execution des requettes avec JourSemaine=x

Next IndexA

Est-ce-qu'il n-y aurait pas plus simple ????

Merci d'avance

Stéphane(Radsie)
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
16
3
Merci
Salut,

Je pense qu'une simple boucle avec la collection 'Controls' de l'objet conteneur suffit.

        For Each C As CheckBox In Me.Controls
            If C.Checked Then
                Select Case C.Name
                    Case "Check_B_Lundi"
                        'Requête SQL Lundi...
                    Case "Check_B_Mardi"
                        'Requête SQL Mardi...
                    Case ...
                End Select
            End If
        Next


Bien entendu l'exemple ci-dessus n'est valable que si le formulaire ne comporte que des CheckBox, pour le reste il suffit de placer ceux-ci dans un contrôle conteneur ou bien de filtrer avec TypeOf.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 193 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Mayzz
Messages postés
37
Date d'inscription
mardi 24 août 2004
Statut
Membre
Dernière intervention
2 décembre 2010
0
Merci
Infos supplementaire

J'ai essayé le controle CheckListBox mais j'ai 2 objections à utiliser ce contrôle :
- Le premier est que les CheckBox à l'interieur sont à la suite les un des autres
et on ne peut que changer la police.
Si je veux espacer les checkBox dans le sens vertical => Impossible
- La deuxieme chose c'est qu'il n'accepte pas la multiselection !

Merci d'avance
Commenter la réponse de radsie
Messages postés
37
Date d'inscription
mardi 24 août 2004
Statut
Membre
Dernière intervention
2 décembre 2010
0
Merci
Yes
En effet avec :

For Each C As CheckBox In Me.Controls

next

cela ne suffit largement.

C'etait le In Me.controls qui me manquait, je ne le connaissais pas !

Merci Mayzz

Cool
Commenter la réponse de radsie
Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
1
0
Merci
Comme l'a dit Mayzz,si il y a d'autres contrôles dans le formulaire tu devras les filtrer avec TypeOf en faisant comme suit:
       For Each C As CheckBox In Me.Controls.OfType(Of CheckBox)()
                If C.Checked Then
                Select Case C.Name
                    Case "Check_B_Lundi"
                        'Requête SQL Lundi...
                    Case "Check_B_Mardi"
                        'Requête SQL Mardi...
                    Case ...
                End Select
            End If
        Next

ça t'évitera certaines erreurs(Exceptions) lors de l'exécution


Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
Commenter la réponse de NSUADI