Boucle Do sur des controles CheckBox

Résolu
radsie Messages postés 37 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 2 décembre 2010 - 5 août 2010 à 13:07
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)

4 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
5 août 2010 à 15:35
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.
3
radsie Messages postés 37 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 2 décembre 2010
5 août 2010 à 13:53
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
0
radsie Messages postés 37 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 2 décembre 2010
5 août 2010 à 20:50
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
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
6 août 2010 à 03:22
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
0
Rejoignez-nous