BOUTON RADIO Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
EDDMOH
Membre habitué
Membre habitué
Messages : 71
Inscrit le : 9 février 2013
Version d'Excel : 2007

Message par EDDMOH » 4 décembre 2013, 23:00

Bonjour
Je vous soumet ci-après 2 codes concernant une action sur le bouton radio : le premier code avec boucle ne marche pas alors que le deuxième avec de simples conditions sans que je puisse savoir pourquoi.
A noter que le 1er code me renvoie le code d'erreur 438.
1-
For Each bouton In Frame1.Controls
        If bouton.Value Then
        rep = bouton.Caption
        End If
Next
Sheets("F1").Range("c6").Value = rep
2-
If OptionButton1 = True Then
    Sheets("F1").Range("c6").Value = OptionButton1.Caption
ElseIf OptionButton2 = True Then
    Sheets("F1").Range("c6").Value = OptionButton2.Caption
ElseIf OptionButton3 = True Then
    Sheets("F1").Range("c6").Value = OptionButton3.Caption
ElseIf OptionButton4 = True Then
    Sheets("F1").Range("c6").Value = OptionButton4.Caption
End If
Merci d'avance.
Rechercher une réponse commence par poser la bonne question.
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 8'976
Appréciations reçues : 359
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 4 décembre 2013, 23:18

Bonsoir,

je te confirme que chez moi ce code fonctionne

peux-tu nous mettre ton fichier de test ?
Avatar du membre
EDDMOH
Membre habitué
Membre habitué
Messages : 71
Inscrit le : 9 février 2013
Version d'Excel : 2007

Message par EDDMOH » 6 décembre 2013, 12:05

Bonjour
J’essaierai de joindre un fichier test dès que je peux. En attendant, ci-dessous le code complet :
Private Sub CommandButton1_Click()
Dim rep As Integer
'BOUTON VALIDER

'For Each bouton In Frame1.Controls
'        If bouton.Value Then
'        rep = bouton.Caption
'        End If
'Next
Sheets("F1").Range("c6").Value = rep

'Maintenir EXCEL caché
Application.Visible = True
Application.WindowState = xlMaximized
Application.WindowState = xlMinimized
Application.Visible = False
USF1.Hide
Load USF2
USF2.Show

End Sub
Rechercher une réponse commence par poser la bonne question.
Avatar du membre
EDDMOH
Membre habitué
Membre habitué
Messages : 71
Inscrit le : 9 février 2013
Version d'Excel : 2007

Message par EDDMOH » 12 décembre 2013, 12:27

Bonjour
Ci-joint le fichier test, cette fois VBE m'affiche un message d'incompatibilité de type.
Je voudrais également afficher un seul message demandant de répondre à toutes les question dans le cas ou une question serait oubliée/ignorée (Le code actuel renvoie autant de MsgBox que de questions oubliées/ignorées)
Merci.
Dim Frame As Frame, Bouton As OptionButton
Set celdep = Range("a1")
For Each Frame In USF.Controls
    For Each Bouton In Frame.Controls
        If Bouton.Value = True Then
        celdep = Bouton.Caption
        celdep = celdep + 1
        Else: MsgBox "Merci de répondre à toutes les questions!", vbCritical, "Avertissement...!"
        End If
    Next
Next
QUIZZ.xlsm
Questionnaire avec Plusieurs Boutons Radio regroupés dans plusieurs Frames
(19.36 Kio) Téléchargé 19 fois
Modifié en dernier par EDDMOH le 12 décembre 2013, 13:17, modifié 1 fois.
Rechercher une réponse commence par poser la bonne question.
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'492
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 12 décembre 2013, 12:56

Disons qu'on ne comprend pas ce que tu veux:

Ci dessous un code qui va boucler sur tes frames et sur les controles de type optionbutton dans tes frames.
Je pense qu'a partir de là tu devrais t'en sortir.
Private Sub CommandButton1_Click()

For Each Fram In Me.Controls
    If TypeName(Fram) = "Frame" Then
    MsgBox Fram.Name
    
        For Each c In Fram.Controls
            If TypeName(c) = "OptionButton" Then
          
                MsgBox c.Name
           
            End If
        Next
    End If
Next

End Sub
Avatar du membre
EDDMOH
Membre habitué
Membre habitué
Messages : 71
Inscrit le : 9 février 2013
Version d'Excel : 2007

Message par EDDMOH » 12 décembre 2013, 15:45

Bonjour
J'ai apporté quelques modifications au fichier pour plus de clarté. A partir de ton code, j'ai essayé le code ci-après mais ça ne marche pas :
Set celdep = Range("b3")
For Each Fram In Me.Controls
    If TypeName(Fram) = "Frame" Then
        
        For Each c In Fram.Controls
            If c.Value = True Then
            celdep = c.Caption
            celdep = celdep + 1
            Else: MsgBox "Merci de répondre à toutes les questions!", vbCritical, "Avertissement...!"
           
            End If
        Next
    End If
Next
Merci.
QUIZZ.xlsm
Questionnaire avec Plusieurs Boutons Radio regroupés dans plusieurs Frames
(20.54 Kio) Téléchargé 13 fois
Rechercher une réponse commence par poser la bonne question.
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'492
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 12 décembre 2013, 15:54

Pour faire ce que tu veux faire tes noms doivent suivre une certaine logique... Tu ne peux pas faire à partir de n'importe quoi quelque chose de cohérent:

Logique:
Question 1: Frame1 contient optionbutton 1 2 3 4
Question 2: Frame2 contient optionbutton 5 6 7 8

Question 10: Frame10 contient optionbutton 37 38 39 40

Par la suite il sera simple...

Tu boucles sur tes frames
puis dans chaque frame tu boucles sur tes option button
quand tu trouves un true tu prends son nom et tu tu lui enlèves 4 fois l'indice du frame...
Puis tu le mets dans le range("B" & la partie numérique du fram.name +2....

Si tu envois l'userform cohérent je te le fais.
Avatar du membre
EDDMOH
Membre habitué
Membre habitué
Messages : 71
Inscrit le : 9 février 2013
Version d'Excel : 2007

Message par EDDMOH » 12 décembre 2013, 16:32

Ci-joint un exemple simplifié suivant une logique et espérant cohérent.
Merci.
QUIZZ.xlsm
Exemple avec contrôles en ordre
(21.4 Kio) Téléchargé 29 fois
Rechercher une réponse commence par poser la bonne question.
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'492
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 12 décembre 2013, 16:47

Private Sub CommandButton1_Click()
    Dim q(1 To 3)
    For Each Fram In Me.Controls
        If TypeName(Fram) = "Frame" Then
        i = i + 1
            rentre = False
            For Each c In Fram.Controls
                If TypeName(c) = "OptionButton" Then
                    If c.Value = True Then
                        rentre = True
                        j = 1
                        While IsNumeric(Right(c.Name, j)) = True
                        j = j + 1
                        Wend
                        q(i) = CDbl(Right(c.Name, j - 1)) - 4 * (i - 1) - 1
                    End If
                End If
              
            Next
            If rentre = False Then
                MsgBox "Merci de répondre à toutes les questions!", vbCritical, "Avertissement...!"
                Exit Sub
            End If
        End If
    Next
    For i = 1 To 3
        MsgBox (q(i))
        Sheets("Feuil1").Cells(i + 2, 2) = q(i)
    Next i
End Sub
Avatar du membre
EDDMOH
Membre habitué
Membre habitué
Messages : 71
Inscrit le : 9 février 2013
Version d'Excel : 2007

Message par EDDMOH » 12 décembre 2013, 17:18

J'essaie de l'adapter à mon cas et je te tiens au courant.
Merci.
Rechercher une réponse commence par poser la bonne question.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message