Problème pour compter les checkboxs

schieberlucie - 25 juil. 2022 à 15:52
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 - 27 juil. 2022 à 17:41

Bonjour,

J'ai une userform avec 9 checkboxs.

J'aimerais faire un système qui compte le nombre de checkboxs cochées et en fonction du résultat, affiché quelque chose comme une phrase par exemple dans un label.

Je suis dessus depuis 48h mais je n'y parviens pas

Pouvez vous m'aider s'il-vous-plaît

10 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
25 juil. 2022 à 17:55

Bonjour

Si les 9 Checkbox sont dans un groupe de Contrôles ( de CheckBox1 à Checkbox9) faire une boucle de 1 à 9 .

A chaque tour de boucle tester si la CheckBox correspondante est cochée ou non et si oui augmenter un compteur de 1 .

A la fin afficher dans un Label la valeur du compteur .  


0
schieberlucie
26 juil. 2022 à 08:44

Bonjour 

Merci pour votre réponse.

Malheureusement je suis complètement perdue.

Pourriez vous me donner un exemple de code ? C'est la première fois que je travail avec des Contrôles.

Je vous remercie par avance

0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
26 juil. 2022 à 08:47
0
schieberlucie
26 juil. 2022 à 09:01

Voici mon code. Je ne comprend pas pourquoi cette fenêtre d'erreur s'affiche .

Merci encore pour votre aide.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
schieberlucie
26 juil. 2022 à 09:09

Même avec le End if, j'ai un autre souci 

0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
26 juil. 2022 à 09:18

supprime le With et le End With

1
schieberlucie > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
26 juil. 2022 à 09:21

j'ai encore un souci 

0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137 > schieberlucie
26 juil. 2022 à 09:23

Il manque le End If avant Le Next !!!!!!

0
schieberlucie
26 juil. 2022 à 09:26

Cela ne change tout de même rien !!!

0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
26 juil. 2022 à 09:31
Public Sub Comptage()
Dim c As Integer
Dim cb As Control

c = 0
With UserForm1
    For Each cb In .Controls
        If TypeOf cb Is MSForms.CheckBox And cb.Value = True Then c = c + 1: .TextBox1.Value = c
    Next cb
End With
End Sub

Tu remplaces Textbox 1 par le nom de ton textbox sans oublier le point avant

0
schieberlucie > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
26 juil. 2022 à 10:36
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137 > schieberlucie
26 juil. 2022 à 10:52

chez moi cela fonctionne sans problème:

Option Explicit
Private Sub CommandButton1_Click()
Comptage
End Sub
Public Sub Comptage()
Dim c As Integer
Dim cb As Control

c = 0
With UserForm1
    For Each cb In .Controls
        If TypeOf cb Is MSForms.CheckBox And cb.Value = True Then c = c + 1: .TextBox1.Value = c
    Next cb
End With
End Sub
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137 > schieberlucie
26 juil. 2022 à 11:43

Faire comme j'ai fait pour tester le code:

ouvrir un nouveau classeur

inserer un UserForm avec des CheckBox, un Bouton et une TextBox et mettre le code:

Option Explicit
Private Sub CommandButton1_Click()
Comptage
End Sub
Public Sub Comptage()
Dim c As Integer
Dim cb As Control

c = 0
    For Each cb In Controls
        If TypeOf cb Is MSForms.CheckBox And cb.Value = True Then
        c = c + 1: TextBox1.Value = c
        Else
        TextBox1.Value = c
        End If
    Next cb
End Sub

voilà

1
schieberlucie > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
26 juil. 2022 à 14:06

Merci beaucoup pour votre aide. Le programme fonctionne désormais

1
schieberlucie
26 juil. 2022 à 09:36

La même ligne est toujours encore surlignée en jaune 

0
dysorthographie Messages postés 92 Date d'inscription jeudi 27 janvier 2022 Statut Membre Dernière intervention 3 avril 2024 5
Modifié le 26 juil. 2022 à 15:14

Bonjour,

Sub Comptage()
Dim i as integer
    Me.TextBox1.Value = 0
    For i = 1 To 9
          Me.TextBox1.Value = Me.TextBox1.Value + Abs(Me.Controls("CheckBox" & i).Value)
    Next
End Sub
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 27 juil. 2022 à 03:55

Salut à tous,

Ne peut-on pas partir sur un groupe de contrôl indéxé?

L'avantage serait de mettre à jour le label à chaque modification d'un check box avec l'événement "_click".

 Je trouve ça plus simple, mais bon, c'est pas très pro...

PS: schieberlucie ne semble pas être en VBA, mais en VB6...

Donc, une form avec un label et un checkbox indéxé en (0)...

Private Sub Form_Load()
Dim a As Long

For a = 0 To 8
If a > 0 Then Load Me.Check(a): Me.Check(a).Visible = True
Check(a).Caption = "Check" & a
Check(a).Move 800, (Check(a).Height * a) + (25 * a)
Next a
End Sub

Private Sub Check_Click(Index As Integer)
Dim a As Long, b As Long

b = 0
For a = 0 To 8
b = b + IIf(Check(a), 1, 0)
Next a
Label1.Caption = b
End Sub
0
dysorthographie Messages postés 92 Date d'inscription jeudi 27 janvier 2022 Statut Membre Dernière intervention 3 avril 2024 5
Modifié le 27 juil. 2022 à 10:05

Bonjour,

Le iif est inutile !

Un booléen c'est True/False  -1/0 {logique négative}

b = b + Abs(Check(a))
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 27 juil. 2022 à 17:48

Salut dysorthographie,

A vrai dire, j'aime bien IIF, pour des problèmes de compatibilité de type, et aussi pour une meilleure visibilité dans le code.

Mais, ABS est très bien aussi dans notre cas. (que je n'utilise d'ailleur jamais...)

b = b - Cint(Check(a))
1
Rejoignez-nous