J'ai créé un userform dans lequel se trouve de nombreuses questions auxquelles il faut répondre en sélectionnant 1 parmi 5 réponses (d'ou l'utilisation d'optionbutton).
Cela fait plusieurs heures que je cherche :
1/ à vérifier que pour 1 question, au moins 1 optionbutton a été sélectionné
2/ à récupérer l'indice de l'optionbutton sélectionné et le reporter dans ma feuille excel.
concernant le 1/
Ayant vraiment beaucoup de questions, je souhaite me passer de codes tel que
Code:
If DERS1_1.Value = False And DERS1_2.Value = False And DERS1_3.Value = False And DERS1_4.Value = False And DERS1_5.Value = False Then
MsgBox "sélectionnez une réponse à la question 1"
Exit Sub
End If
concernant le 2/
J'ai appelé mes optionbuttons avec le formalisme suivant :
nom du questionnaire : DERS
numéro de la question : 1, 2, ...
un tiret : _
indice de la réponse : de 1 à 5
je pense donc m'en sortir avec le code suivant mais ce n'est pas encore clair :
Code:
Dim Ctrl As Control
For Each Ctrl In UserForm1.Controls
if Ctrl.Value = true then
If Right$(Ctrl.Name, 1) = "1" then
???
Next
J'ai mis 1 frame par questions mais ça ne m'aide pas vraiment parce que je n'arrive pas à "sauter" de frame en frame.
Je me disais qu'avec le groupname, je pouvais également m'en sortir mais n'ais pas trouvé.
Merci de toute l'aide dont vous pourrez faire preuve.
Dim reponse As Byte
Dim i As Integer
reponse = (DERS1 * -1) + (DERS2 * -2) + (DERS3 * -3) + (DERS4 * -4) + (DERS5 * -5)
For i = 1 To 5
reponse = reponse + (Me.Controls("DERS" & i) * -i)
Next
Hasco, je ne comprends pas ce que fais ce code. De plus, je n'ai pas défini de variable DERS1 mais j'ai appelé mes optionbutton DERS1_1, DERS1_2...DERS2_1,... du coup quand je lance ton code il me dit que DERS1 n'est pas défini...
J'ai plusieurs Questions 1, 2 ,3 ...50
Pour chaque question il y a 5 optionbutton.
Pour la question 1 j'ai appelé mes optionbutton DERS1_1, DERS1_2, DERS1_3, DERS1_4, DERS1_5
pour la question 2 : DERS2_1, DERS2_2, DERS2_3, DERS2_4, DERS2_5
etc...jusque 50 : DERS50_1, DERS50_2, DERS50_3, DERS50_4, DERS50_5
Je voudrais tout d'abord vérifier qu'au moins une réponse a été apporté à chaque question. Quelque chose du style :
Code:
For k = 1 To 50
j = 0
For i = 1 To 5
ind = "DERS" & k & "_" & i
If ind.Value = False Then
j = j + 1
End If
Next i
If j = 5 Then
MsgBox "Veuillez sélectionner une réponse à la question" & k, vbCritical, "Concentrons nous..."
Exit Sub
End If
Next k
Next
oui ça marche et si j'ai bien compris quand DERS1_1 est sur false, il vaut 0 et quand il est sur true il vaut -1. Du coup en multipliant par son indice on obtient le résultat. C'est ça ?
Le problème c'est qu'il faut faire cela pour les 50 questions...
Dim reponse As Byte
Dim i As Integer, k As Integer
For k = 1 To 50
reponse = 0
For i = 1 To 5
reponse = reponse + (Me.Controls("DERS" & k & "_" & i) * -i)
Next i
If reponse = 0 Then
MsgBox "Veuillez sélectionner une réponse à la question " & k, vbCritical, "Concentrons nous..."
Exit For
End If
Next k
Encore mieux, pour sauvegarder les réponses:
Mettre une variable Response(1 to 50) as integer en haut du module du userform puis dans la macro de contrôle:
Code:
Dim i As Integer, k As Integer
For k = 1 To 50
reponse(k) = 0
For i = 1 To 5
reponse(k) = reponse(k) + (Me.Controls("DERS" & k & "_" & i) * -i)
Next i
If reponse(k) = 0 Then
MsgBox "Veuillez sélectionner une réponse à la question" & k, vbCritical, "Concentrons nous..."
Exit For
End If
Next k
Comme cela si tout est bon ton tableau de réponses est prêt à être traité.
Dim reponse As Byte
Dim i As Integer, k As Integer
For k = 1 To 50
reponse = 0
For i = 1 To 5
reponse = reponse + (Me.Controls("DERS" & k & "_" & i) * -i)
Next i
If reponse = 0 Then
MsgBox "Veuillez sélectionner une réponse à la question " & k, vbCritical, "Concentrons nous..."
Exit For
End If
Next k
Encore mieux, pour sauvegarder les réponses:
Mettre une variable Response(1 to 50) as integer en haut du module du userform puis dans la macro de contrôle:
Code:
Dim i As Integer, k As Integer
For k = 1 To 50
reponse(k) = 0
For i = 1 To 5
reponse(k) = reponse(k) + (Me.Controls("DERS" & k & "_" & i) * -i)
Next i
If reponse(k) = 0 Then
MsgBox "Veuillez sélectionner une réponse à la question" & k, vbCritical, "Concentrons nous..."
Exit For
End If
Next k
Comme cela si tout est bon ton tableau de réponses est prêt à être traité.