VB : Case à cocher

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.

3 réponses

  1. 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. 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

      ;)
      1. 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.