Satanés OptionButton

tom59

XLDnaute Nouveau
Bonjour !

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

Guest

Guest
Re : Satanés OptionButton

Bonjour,

Deux possibilités parmi d'autres:

Code:
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

A+
 

tom59

XLDnaute Nouveau
Re : Satanés OptionButton

Merci kjin, je regarde cela au plus vite.

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

Guest

Guest
Re : Satanés OptionButton

Re,

Remplacer DERS1 par DERS1_1 etc.

Reponse question 1:

Code:
reponse = (DERS1_1 * -1) + (DERS1_2 * -2) + (DERS1_3 * -3) + (DERS_4 * -4) + (DERS1_5 * -5)

Ou mieux:

Code:
reponse=(DERS1_1 * 1) - (DERS1_2 * 2) - (DERS1_3 * 3) - (DERS1_4 * 4) - (DERS1_5 * 5)

te donnera la réponse à la Question 1

A+
 
Dernière modification par un modérateur:

tom59

XLDnaute Nouveau
Re : Satanés OptionButton

Je précise mon problème :

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

mais ça coince avec ind.value...
 

tom59

XLDnaute Nouveau
Re : Satanés OptionButton

Re,

Remplacer DERS1 par DERS1_1 etc.

Reponse question 1:

Code:
reponse = (DERS1_1 * -1) + (DERS1_2 * -2) + (DERS1_3 * -3) + (DERS_4 * -4) + (DERS1_5 * -5)

Ou mieux:

Code:
reponse=(DERS1_1 * 1) - (DERS1_2 * 2) - (DERS1_3 * 3) - (DERS1_4 * 4) - (DERS1_5 * 5)

te donnera la réponse à la Question 1

A+

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

Guest

Guest
Re : Satanés OptionButton

Re,

Code:
    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é.

A+
 
Dernière modification par un modérateur:

tom59

XLDnaute Nouveau
Re : Satanés OptionButton

Re,

Code:
    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é.

A+

Tout simplement génial HASCO !
merci beaucoup de m'avoir débloqué !
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 936
Membres
103 987
dernier inscrit
Doctami