Boucle Do sur des controles CheckBox [Résolu]

radsie 37 Messages postés mardi 24 août 2004Date d'inscription 2 décembre 2010 Dernière intervention - 5 août 2010 à 13:07 - Dernière réponse : NSUADI 540 Messages postés mardi 4 août 2009Date d'inscription 1 février 2013 Dernière intervention
- 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

Répondre au sujet
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 5 août 2010 à 15:35
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Mayzz
radsie 37 Messages postés mardi 24 août 2004Date d'inscription 2 décembre 2010 Dernière intervention - 5 août 2010 à 13:53
0
Utile
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
radsie 37 Messages postés mardi 24 août 2004Date d'inscription 2 décembre 2010 Dernière intervention - 5 août 2010 à 20:50
0
Utile
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
NSUADI 540 Messages postés mardi 4 août 2009Date d'inscription 1 février 2013 Dernière intervention - 6 août 2010 à 03:22
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.