BOUTON RADIO

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.

Bonsoir,

je te confirme que chez moi ce code fonctionne

peux-tu nous mettre ton fichier de test ?

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

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
23quizz.xlsm (19.36 Ko)

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

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.

14quizz.xlsm (20.54 Ko)

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.

Ci-joint un exemple simplifié suivant une logique et espérant cohérent.

Merci.

33quizz.xlsm (21.40 Ko)
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

J'essaie de l'adapter à mon cas et je te tiens au courant.

Merci.

Si tu as dix questions voilà..

Private Sub CommandButton1_Click()
    Dim q(1 To 10), i As Integer
    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 10
        Sheets("Feuil1").Cells(i + 2, 2) = q(i)
    Next i
End Sub

Ce point je l' ai compris merci. Par contre, je me demande pourquoi tu es parti sur le c.name au lieu de .caption qui me parait bcp plus simple vu que les boutons radio ont été renommés en fonction de la valeur qu'il doivent prendre.

De plus j'arrive pas a comprendre le code suivant (un petit commentaire sera le bienvenu) :

                        q(i) = CDbl(Right(c.Name, j - 1)) - 4 * (i - 1) - 1

Parce qu'en bon developpeur, je pars du principe que mon temps vaut de l'argent et que renommer 40 boutons pour dix questions ou 400 pour cent questions est on ne peut plus chiant et horrible... Quand tu deviendras flemmard tes codes se compliqueront d'eux mêmes!

Mathematique elementaire...

Je prends le numéro de l'option button... je lui enleve 4*(numero du frame-1) -1 ca fait ton score!

Bonjour

J'ai essayé de dupliquer le code pour un autre questionnaire pour insérer des valeurs sur la même feuille (qui reste cachée car je travaille uniquement avec des userforms) mais ça renvoie des valeurs erronées (PS : le calcul de la moyenne donne la valeur recherchée).

Je me demande si ça peut venir du code :

q(i) = CDbl(Right(c.Name, j - 1)) - 4 * (i - 1) - 1

J'espère avoir donnée un maximum d'informations pour faciliter le repérage du problème.

Je dois voir ton fichier pour répondre.

Mon code marche...

Chez moi aussi ça marche pour le fichier test.

J'essaierai de creuser ça un peu ce soir, sinon je joindrai une partie de mon fichier.

J'ai pas réussi à détecter le problème, donc ci-joint une partie de mon fichier.

12test.xlsm (46.44 Ko)

Dans la boucle des frames il commençait par le frame10 puis frame 1...

Solution:

Tu supprimes le frame 10 apr`s avoir copié collé le contenu de son label dans un notepad...

Tu copies le frame 9 et tu le colles tu le mets à sa place et tu recopies à l'intérieur le contenu du label.

bonjour,

une autre manière en utilisant caption

Private Sub CommandButton1_Click()

'VALIDER SD

'Boucle

'Application.Visible = True
'Application.WindowState = xlMaximized
'Application.WindowState = xlMinimized
'Application.Visible = False

Dim Frame As Frame, Bouton As OptionButton
Dim q(1 To 10), i As Integer
    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
                        q(i) = cint(c.Caption)
                        '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 10
    Sheets("Quizz").Cells(i + 5, 3) = q(i)
    Next i
    USFSTRATDEV.Hide
    Load USFCHOIXVOLETS
    USFCHOIXVOLETS.Show

End Sub

Le problème du caption c'est que tout d'abord il ne te permettra pas de repérer des erreurs comme celle que tu viens de voir. Et qu'il nécessite de changer le caption de tes 40 option boutons ....

Rechercher des sujets similaires à "bouton radio"