VB : Case à cocher

Fermé
Ilham - 28 mars 2011 à 17:38
 numero 6 - 30 mars 2011 à 22:11
Bonjour,
Je suis débutante en VB. Je suis en train de créer une applicationdans laquelle j'utilise des cases à cocher (Check). J'ai placé dans le formulaire (Form1) 7 cases à cocher :
- Tous (Name=CheckTous ; Caption=Tous)
- Un (Name=Check1 ; Caption=Un)
- Deux (Name=Check2 ; Caption=Deux)
- Trois (Name=Check3 ; Caption=Trois)
- Quatre (Name=Check4 ; Caption=Quatre)
- Cinq (Name=Check5 ; Caption=Cinq)
- Six (Name=Check6 ; Caption=Six)
J'ai aussi placé dans ce même formulaire, un bouton de commande (Name=CmdAfficher ; Caption= Afficher) et 6 étiquettes (Label) : Label1, Label2, Label3, Label4, Label5 et Label6. J'ai éffacé les titres de ces étiquettes.

L'objectif est de voir afficher dans les Labels, les noms des cases que l'utilisateur choisira. Maintenant s'il coche par exemple "Deux", "Quatre" et "Six", les noms de ces cases doivent s'afficher dans les 3 premiers Label au moment où il clique sur le bouton "Afficher". S'il coche "Tous" alors les 6 autres cases doivent être cochés. Mais si par la suite il décide de décocher une parmi les 6 dernières (par exemple "Trois") alors la case "Tous" doit être décochée. Et le nom de la case décochée ("Trois") doit se rétirer dans la liste affichée (en bas) sans sa place apparait libre.
J'espère avoir été assez explicite et je vous prie de me proposer les solutions possibles. Merci d'avance.


A voir également:

3 réponses

Bonsoir,

Content d'avoir put te dépanner :)
En effet, l'utilisation des variables est essentielle en programmation. Je ne peux que t'encourager maîtriser leur usage.

Mais pour résoudre ton souci avec la case CheckTous, il ne faut pas utiliser l'évènement Click, mais MouseUp. J'explique.

L'évènement Click se produit lorsqu'on clique sur un objet, ça tu le sais.
Mais pour une CheckBox, le fait de changer son état par programme (en lui affectant une valeur, Check1.value=0 par exemple) déclenche l'évènement Click comme si on avait effectivement cliqué sur la CheckBox.
Dans le code que je t'ai donné, la CheckTous ne marche pas pour décocher toutes les CheckBox, même en complétant le code comme tu l'as fait.

Heureusement, en cliquant sur un objet, on génère aussi les évènements MouseDown (bouton enfoncé) et MouseUp (bouton relaché).

Plutot que Click on va utiliser MouseUp et le tour est joué.
Changes Private Sub Check1_Click() par
Private Sub Check1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Fais la même chose pour toutes les autres CheckBox et complètes le code de la CheckTous par ce tu avais présenti:
Else
Check1.Value = 0
...
End If

et ça devrait marcher.

Bonne continuation ;)
1
Lord Zero Messages postés 459 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 15 juin 2018 115
28 mars 2011 à 22:47
quel VB?
0
VB 6 c'est ce que j'utilise
0
bonsoir

colle ce code dans ta form

Option Explicit
Dim Labels(6) As String

Private Sub Check1_Click()
If Check1.Value = 0 Then
CheckTous.Value = 0
End If
End Sub

Private Sub Check2_Click()
If Check2.Value = 0 Then
CheckTous.Value = 0
End If
End Sub

Private Sub Check3_Click()
If Check3.Value = 0 Then
CheckTous.Value = 0
End If
End Sub

Private Sub Check4_Click()
If Check4.Value = 0 Then
CheckTous.Value = 0
End If
End Sub

Private Sub Check5_Click()
If Check5.Value = 0 Then
CheckTous.Value = 0
End If
End Sub

Private Sub Check6_Click()
If Check6.Value = 0 Then
CheckTous.Value = 0
End If
End Sub

Private Sub CheckTous_Click()
If CheckTous.Value = 1 Then
Check1.Value = 1
Check2.Value = 1
Check3.Value = 1
Check4.Value = 1
Check5.Value = 1
Check6.Value = 1
End If
End Sub

Private Sub CmdAfficher_Click()
Dim i As Integer
'efface Labels
For i = 1 To 6
Labels(i) = ""
Next
'lire les Check
i = 1
If Check1.Value = 1 Then
   Labels(i) = Check1.Caption
   i = i + 1
End If
If Check2.Value = 1 Then
   Labels(i) = Check2.Caption
   i = i + 1
End If
If Check3.Value = 1 Then
   Labels(i) = Check3.Caption
   i = i + 1
End If
If Check4.Value = 1 Then
   Labels(i) = Check4.Caption
   i = i + 1
End If
If Check5.Value = 1 Then
   Labels(i) = Check5.Caption
   i = i + 1
End If
If Check6.Value = 1 Then
   Labels(i) = Check6.Caption
   i = i + 1
End If
'affiche Labels
Label1.Caption = Labels(1)
Label2.Caption = Labels(2)
Label3.Caption = Labels(3)
Label4.Caption = Labels(4)
Label5.Caption = Labels(5)
Label6.Caption = Labels(6)
End Sub


j'espère que ça repond à ta question

;)
0
Bonjour,
Juste pour vous dire que le code a bien marché. Je vous remercie beaucoup. Le seul souci c'est que quand on clique sur la case "Tous" pour décocher toutes les cases, cela ne se fait pas. J'ai essayé de faire quelque chose dans l'interface code du "CheckTous" :
Private Sub CheckTous_Click()
If CheckTous.Value = 1 Then
Check1.Value = 1
Check2.Value = 1
Check3.Value = 1
Check4.Value = 1
Check5.Value = 1
Check6.Value = 1

Else
Check1.Value = 0
Check2.Value = 0
Check3.Value = 0
Check4.Value = 0
Check5.Value = 0
Check6.Value = 0


End If
End Sub

Mais ça n'a pas marché. Sinon, Votre code est vraiment intéressant car ça m'a permis de gagner du temps par rapport à ce que j'ai fait. C'est vrai que ce que j'ai fait marche bien mais ça m'a pris beaucoup du temps parce que je n'ai pas déclaré des variables comme vous l'avez fait. C'est compliqué pour moi d'utiliser des variables, je ne sais pas.

Encore une fois merci.
0