Question avec OptionButton

Résolu
Messages postés
5
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
9 août 2006
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour,

Je suis nouveau et je débute sous VBA.

Sur une feuille excel j'ai créé 18 boutons OptionButton.
Ce que je souhaite c'est de savoir parmi les 18, lequel sera sélectionné (cad que value = true)

Pour l'instant j'utilise un gigantesque if qui test tous mes OptionButton pour vérifier lequel a comme valeur true, mais c'est assez en VBA

Merci pour vos lumieres

10 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Ca y'est j'ai trouvé :

Sub Test()

Dim ctl As OLEObject
Dim Saisie As String
'*** pas en Integer : c'est pour y placer des nombres

For Each ctl In ActiveSheet.OLEObjects
If TypeOf ctl.Object Is MSForms.OptionButton Then
If ctl.Object.Value True Then Saisie ctl.Object.Caption: MsgBox Saisie
'*** si le ctl (optionbutton) est coché, on place dans Saisie son caption puis
' affichage dans une message box
End If
Next ctl

End Sub
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

essaie cette boucle :

Dim ctl As Control

For Each ctl In Me.Controls
If TypeName(ctl) = "OptionButton" Then
If ctl.Value = True Then MsgBox ctl.Name & " est coché !", vbOKOnly
End If
Next ctl

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
Messages postés
5
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
9 août 2006

j'ai ce message d'erreur :
Membre de méthode ou de donné introuvable.

une petite précision, une fois l'optionButton true trouvé, je souhaite récupérer sa donnée se trouvant dans caption, et la mettre dans une nouvelle varaiable.

Le nom de chacun de mes OptionButton est OptionButton1, OptionButton2, ... , OptionButton16
si j'adapte ton prog, a ce que je veux faire, est ce correct de l'écrire ainsi

Dim ctl As Control
Dim Saisie As Integer

For Each ctl In Me.Controls
  If TypeName(ctl) = "OptionButton" Then    If ctl.Value True Then Saisie.value ctl.Name
  End If
Next ctl
Messages postés
5
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
9 août 2006

j'ai oublié de dire que l'erreur est à cette ligne

For Each ctl In Me.Controls

Je pense que c'est Controls qui merdouille
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Humm t'es en VBA Excel ?
Je viens de faire le test et ça fonctionne parfaitement.

Quelques modifs :

Private Sub CommandButton1_Click()
Dim ctl As Control
Dim Saisie As String
'*** pas en Integer : c'est pour y placer des nombres

For Each ctl In Me.Controls
If TypeName(ctl) = "OptionButton" Then
If ctl.Value True Then Saisie ctl.Caption: MsgBox Saisie
'*** si le ctl (optionbutton) est coché, on place dans Saisie son caption puis
' affichage dans une message box
End If
Next ctl

End Sub

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
"For Each ctl In Me.Controls

Je pense que c'est Controls qui merdouille"

=> moi je pense que c'est le Me. La procédure que je t'ai donné se trouve t-elle bien dans le UserForm où sont contenus les OptionButton ?
Si ce n'est pas le cas, remplace Me par le nom du UserForm en question.


@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
Messages postés
5
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
9 août 2006

je n'ai pas fais ca sur un Useform, mais directement sur la feuille Excel

merci de ton aide
Messages postés
5
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
9 août 2006

Chapeau, un vrai pro
merci bcp, ca correspond tout a fait a ce que je voulais faire
Bravo
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
Mortalino, j'allais justement te sugérer l'utilisation de TypeOf, que celle de TypeName ^^
content de voir que tu as trouvé ça tout seul :p

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Merci Rey,

je reconnais qu'en UserForm, j'ai tendance à utiliser TypeName.
Je vais essayer de prendre l'habitude d'utiliser TypeOf !

D'ailleurs, le TypeOf passe je pense par la classe de l'objet, mais concernant le TypeName, qu'en est il ?

Encore merci ;)