OptionButton ne renvoie pas la bonne information

Résolu/Fermé
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 - 18 févr. 2013 à 15:50
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 févr. 2013 à 17:26
Bonjour,

J'ai un groupe de 8 " optionsbutton ", lorsque je selectionne le 1er, j'ai bien l'info correspondante à cet " optionbutton" qui est enregistré dans une cellule " C24 ".

Lorsque je sélectionne un autre " optionbutton", je n'ai pas l'info correspondante dans cette cellule.

Le code :
Private Sub validtableenvoisalle_Click()
If OptionButtonA.Value = True Then
[C24] = "A"
If OptionButtonB.Value = True Then
[C24] = "B"
If OptionButtonC.Value = True Then
[C24] = "C"
If OptionButtonD.Value = True Then
[C24] = "D"
If OptionButtonE.Value = True Then
[C24] = "E"
If OptionButtonF.Value = True Then
[C24] = "F"
If OptionButtonG.Value = True Then
[C24] = "G"
If OptionButtonH.Value = True Then
[C24] = "H"
End If
End If
End If
End If
End If
End If
End If
End If
CommandButtonenregis.Visible = True
End Sub


Merci par avance et bonne journée


2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 févr. 2013 à 16:23
Salut Iron,

Le problème vient du fait que, si OptionButton A n'est pas coché, il sort du premier If. En effet, l'imbrication de tes If fait qu'il sort dès qu'il en rencontre une fausse.
Plusieurs solutions donc :
Avec des ElseIf :
Private Sub validtableenvoisalle_Click()
If OptionButtonA.Value = True Then
    [C24] = "A"
ElseIf OptionButtonB.Value = True Then
    [C24] = "B"
ElseIf OptionButtonC.Value = True Then
    [C24] = "C"
ElseIf OptionButtonD.Value = True Then
    [C24] = "D"
ElseIf OptionButtonE.Value = True Then
    [C24] = "E"
ElseIf OptionButtonF.Value = True Then
    [C24] = "F"
ElseIf OptionButtonG.Value = True Then
    [C24] = "G"
ElseIf OptionButtonH.Value = True Then
    [C24] = "H"
End If
End Sub

Avec des End If :
Private Sub validtableenvoisalle_Click()
If OptionButtonA.Value = True Then
[C24] = "A"
End If
If OptionButtonB.Value = True Then
[C24] = "B"
End If
If OptionButtonC.Value = True Then
[C24] = "C"
End If
If OptionButtonD.Value = True Then
[C24] = "D"
End If
If OptionButtonE.Value = True Then
[C24] = "E"
End If
If OptionButtonF.Value = True Then
[C24] = "F"
End If
If OptionButtonG.Value = True Then
[C24] = "G"
End If
If OptionButtonH.Value = True Then
[C24] = "H"
End If
End Sub

Ou plus "élégant" :
Private Sub validtableenvoisalle_Click()
If OptionButtonA.Value = True Then [C24] = "A"
If OptionButtonB.Value = True Then [C24] = "B"
If OptionButtonC.Value = True Then [C24] = "C"
If OptionButtonD.Value = True Then [C24] = "D"
If OptionButtonE.Value = True Then [C24] = "E"
If OptionButtonF.Value = True Then [C24] = "F"
If OptionButtonG.Value = True Then [C24] = "G"
If OptionButtonH.Value = True Then [C24] = "H"
End Sub 
0
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 055
18 févr. 2013 à 16:27
Merci de ces codes ;-))))
0
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 055
18 févr. 2013 à 16:25
Sujet résolu avec ce code :

Private Sub validtableenvoisalle_Click()
  Dim x As Control

          For Each x In choixtable.Controls 'Loop through the option buttons
                                        'within the Frame
              If x.Value = True Then
                  [C24] = x.Caption       'Display the name of the selected
              End If                     'option button
          Next
   CommandButtonenregis.Visible = True
End Sub 
 
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 18/02/2013 à 17:26
Salut,
Effectivement, nous n'avions pas toutes les cartes en main pour te solutionner le souci de la sorte. Il nous manquait les caption de tes OptionButton.
Par contre, tu peux également ajouter un Exit For qui sortira de la boucle dès qu'elle aura rencontré un "True" sur sa route. En effet, inutile de boucler sur tous si c'est bon dès le premier. De plus, un test est appréciable pour vérifier que le contrôle en question est bien un optionbutton... Au cas ou par la suite, tu ajouterais des CheckBox par exemple...

Private Sub validtableenvoisalle_Click() 
Dim Ctrl As Control 

For Each Ctrl In choixtable.Controls 'Loop through the option buttons 
                                        'within the Frame 
    If TypeName(Ctrl) = "OptionButton" And Ctrl.Value = True Then  
        [C24] = Ctrl.Caption       'Display the name of the selected 
        Exit For                   'option button 
    End If   
Next Ctrl 
CommandButtonenregis.Visible = True 
End Sub


A+
0