Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Satanés OptionButton

  • Initiateur de la discussion Initiateur de la discussion tom59
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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+
 
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...
 
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:
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...
 
Re : Satanés OptionButton


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...
 
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:
Re : Satanés OptionButton


Tout simplement génial HASCO !
merci beaucoup de m'avoir débloqué !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
265
Réponses
3
Affichages
301
  • Question Question
Microsoft 365 VBA OptionButton
Réponses
3
Affichages
413
Réponses
35
Affichages
2 K
Réponses
2
Affichages
774
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…