Formulaire : afficher un résultat en fonction du nombre de checkbox cochées

senidesil

XLDnaute Nouveau
Bonjour à tous et à toutes !:)
Je dois créer un formulaire avec vba, l'objectif est d'afficher un score dans une cellule, jusque là, c'est plutot simple...
sauf que la méthode pour obtenir le score est difficile à traduire en langage VBA et c'est pour cela que je sollicite votre aide !

En gros : j'ai un Userform, a l'intérieur de cet userform j'ai 4 frames. chacune des frames contient entre 2 et 6 checkboxs (le nombre de checkbox par frame n'est pas régulier, mais il est connu : par exemple : 3 Checkbox pour la frame1, 3 pour la frame3, 4 pour la frame5

les frames sont numérotées de facon impaire, de 1 à 7 (frame1,frame3,frame5,frame7)
la note s'obtient de la manière suivante :

si au moins une checkbox est coché dans la frame1, le score est de 1, peut importe le nombre de checkboxs qui sont cochées dans les autres frames;

Si aucune checkbox n'est cochées en frame1 et que la moitié des checkboxs de la frame3 sont cochées, le score est de 2;
(précision : si la frame3 contient 3 checkboxs, "la moitié" correspond à 2 checkboxs sur les 3 possibles)

Si aucune checkbox n'est cochées en frame1 et que toutes les checkboxs de la frame3 sont cochées, le score est de 3.

Si aucune checkbox n'est cochées en frame1 et que la moitié des checkboxs de la frame5 sont cochées, le score est de 4;

et ainsi de suite jusqu'au score de 7.
Petite subtilité (sinon c'est pas drôle ! :p) :
pour commencer à remplir la frame5 il faut que la frame3 soit entièrement cochée(toutesles checkbox de la frame3 doivent être cochées avant d'envisager de commencer à cocher les checkboxs de la frame5


mes problèmes sont les suivants : :confused:
1. je n'arrive pas a créer une boucle while..wend pour la frame 1 :

voici le code que j'ai essayé :
(précisions : cb111, cb112 et cb113 sont les 3 checkboxs de la frame1 et le bouton permet de calculer le score et de le reporter dans la cellule B2) :

Private Sub CommandButton1_Click()
Sub test_while()
If cb111.Value = True Or cb112.Value = True Or cb113.Value = True Then
Range("B2") = "1"
Else
Exit For

End If
Wend
End Sub


End Sub


le logiciel me dit qu'il manque un End sub au niveau de la CommandButton_click...:confused: l'inspecteur Senidesil est toujours en enquête....^^:confused:


2. l'enchainement des conditions ("if...end if") finit par poser problème :​
je m'explique : jusqu'à la frame3 le formulaire marche parfaitement, mais a partir de la frame5 ça commence a bugguer...:eek: : je peux remplir la frame5 sans avoir rempli la frame3 (logique, puisque je ne l'ai pas indiqué au userform !)

Pour vous aider à comprendre le problème, je vous joint mon userform avec les systèmes (un peu primitifs au regard du problème ! ;) que j'ai réussi à trouver.


Quelqu'un de plus doué que moi pourrait-il me conseiller quelque chose ? (j'en ai fait des tutoriels et des cours, mais je n'ai pas encore réussi à trouver une solution viable ! ;)

D'autre part, j'ai trouvé (sur le net) un exemple de solution pour compter le nombre de checkboxs dans une frame, c'est le suivant : (exemple avec la frame3 qui contient 3 checkboxs)
Private Sub CommandButton1_Click()
Dim ctl As Control
Dim j As Long
For Each ctl In Frame3.Controls
If TypeOf ctl Is MSForms.Checkbox Then

If Me.Controls(ctl.Name).Value = True Then

j = j + 1 Then

If j = 2 Then

Range("B2") = "Score=2"
End if
End if
End if
End Sub


Merci a tous ceux qui auront eu le courage de me lire !
 

Pièces jointes

  • cotation 2 précise.xlsm
    15.3 KB · Affichages: 22
Dernière édition:

senidesil

XLDnaute Nouveau
Re : Formulaire : afficher un résultat en fonction du nombre de checkbox cochées

Pour la frame1 je pense avoir trouvé une solution correcte, j'utilise la boucle Do...Loop while, ce qui donne en code VBA:
Do
Range ("B2") = "score = 1"
Loop while Checkbox1.Value = True or Checkbox2.Value= True or Checkbox3.Value = True
 
Haut Bas