Passer un groupe de contrôles en paramètres [Résolu]

Signaler
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
-
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
-
Bonjour,

Dans une appli j'ai un ensemble d'optionbuttons comprenant 24 éléments dont bien entendu 1 seul ne peut être vrai.

Pour éviter la fonction Choice() un peu longue à écrire j'ai écrit ma propre fonction qui accepte en argument l'ensemble de mes optionbutton et renvoie l'index de celui qui est vrai.

Y a t'il un moyen de faire un typage fort de mon argument ?
Si je mets As OptionButton, j'ai évidemment une erreur puisque c'est un tableau d'option, par contre si je mets As Object tout va bien, mais je suis obligé de tester le type dans ma fonction.

J'espère avoir été clair.

Merci de votre réponse.

Calade

5 réponses

Messages postés
14668
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
4 juin 2020
143
Bonjour,

J'ai testé avec ça, ça semble fonctionner :

Private Sub Opt_Click(Index As Integer)
    Me.Caption = Index & "/" & GetSelected(Opt)
End Sub


Private Function GetSelected(ByRef ptOpt As Object) As Long
    Dim i As Long
    Dim lValue As Boolean
    
    On Local Error Resume Next
    
    For i = 0 To ptOpt.Count
        lValue = ptOpt(i).Value
        If lValue Then
            GetSelected = i
            Exit Function
        End If
    Next i
    
    GetSelected = -1
End Function


ça fonctionne aussi si il y a un trou dans la numérotation apparemment.

Mon site
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
9
J'avais utilisé une méthode alternative dans laquelle j'ai pas encore insérer de On Error

Public Function Public Function BH_SelectedOptions(OptionsGroup As Object) As Integer
   Dim optB As MSForms.OptionButton
   
   For Each optB In OptionsGroup
      If optB.Value Then
         BH_SelectedOptions = optB.Index
         Exit Function
      End If
   Next
   BH_SelectedOptions = -1
End Function


mais cela revient au même à mon avis.

En tout cas merci pour tout.

Calade
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
48
Salut
tu as bien crée un array of optionbuttons sur ta form

Private Sub check(Optionbuttons())

End Sub
Messages postés
14668
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
4 juin 2020
143
Bonjour,

C'est du VB6, donc pas de "Of".

Pas d'autres moyens que Object/Variant apparemment, en regardant le type du tableau de contrôles (espion), j'ai :
Cmds Object
Item1 Variant/Object/CommandButton

Donc pas mieux, mais tu peux faire :
Dim MonBouton as CommandButton
Set MonBouton=MonParametre(1) 'MonParametre est le tableau congtenu dans un "Object"
MonBouton.Caption="12312315"

Je n'ai pas mieux en stock, dsl.

Mon site
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
9
Salut NHenry,

C'est un peu ce que je pensais.
Par contre dans mon cas, je ne comprends pas trop ton exemple. Pour trouver lequel des OptionButton est à True je ne peux que tous les balayer par un For Each.


Calade