Mettre en variable le caption d'un control userForm

Bonjour à tous,

J'ai un petit souci avec la mise en variable d'un bouton option dans un UserForm :

J'ai un bouton pour lancer une macro :

Private Sub CommandButton1_Click()
Load TYPE_ACHAT
TYPE_ACHAT.Show
MsgBox TYPE_ACHAT_CHOISI
End Sub

Celui-ci lance donc un UserForm appelé "TYPE_ACHAT" qui s'ouvre correctement.

Dans ce UserForm, j'ai plusieurs boutons option (avec bien evidemment un Caption pour chacun d'entre eux)

J'ai également un bouton "OK" dans ce UserForm avec le code suivant :

Private Sub OK_Click()
Dim Ctrl As Control, TYPE_ACHAT_CHOISI As String
    For Each Ctrl In Me.Controls
     If TypeOf Ctrl Is MSForms.OptionButton Then
      If Ctrl.GroupName = "ACHATS" Then
        If Ctrl.Value = True Then
         TYPE_ACHAT_CHOISI = Ctrl.Name
         ''MsgBox TYPE_ACHAT_CHOISI
         Exit For
        End If
      End If
     End If
    Next Ctrl
 Unload TYPE_ACHAT
End Sub

Cela dit, quand je sélectionne une option et que je clique sur le bouton OK, la mise en variable "TYPE_ACHAT_CHOISI = Ctrl.Name" ne fontionne pas car rien ne s'affiche dans mon "MsgBox TYPE_ACHAT_CHOISI" (= ligne 3 dans le code de mon CommandButton1.

Un expert aurait-il la solution svp ????

En vous remerciant par avance pour votre aide précieuse.

Sébastien

Hello,

Essaie de remplacer le

Ctrl. Name

Par

Ctrl. Caption

Rag

Bonjour,

Les OptionButton n'ont pas de ".GroupName = "ACHATS"

Fournir un fichier avec le UserForm SVP

A+

Si j’ai bien mis le groupname ACHATS sur tous boutons options mais ça ne marche pas

Idem si je remplace Ctrl.Name par Ctrl.Caption

En VBA il n'existe pas de GroupName sur les boutons d'options : ça c'est du "charabia" !

Bonjour…

En complément, ton code laisse à penser que tu as des contrôles d’option et que tu veux récupérer leur nom (Name) ou leur titre (Caption). Essaie donc plutôt (avec 5 de ces contrôles nommés O1, O2 … O5) :

Dim n As Byte            ‘vieille habitude avec Otpion Explicit (déclaration obligatoire)
Private Sub OK_Click()
    For n = 1 To 5
        If Me("O" & n) Then MsgBox Me("O" & n).Name & " : " & Me("O" & n).Caption
    Next
    'Unload Me
End Sub

Maintenant, plutôt que de trimbaler une quantité de boutons, on peut passer par 1 seul contrôle ListBox et 25 cas (propriété ListStyle en Option ou pas). En le nommant Lst on aura simplement

Private Sub Lst_Click()
    MsgBox Lst     ‘ou autre utilisation
End Sub

Étant bien entendu que ses items sont déjà définis, par exemple avec

Dim n As Byte
Private Sub UserForm_Initialize()
    For n = 1 To 25: Lst.AddItem Chr(n + 64): Next
End Sub

Nota : je choisis toujours des noms simples ou indexés quand ils sont de même type (ce qui a déjà été fait avec OK)

10usf-et-options.xlsm (21.95 Ko)

Bonjour Foxy94, le Forum,

Utilise plutôt la propriété Tag de tes OptionButtons en inscrivant ACHATS dans ceux souhaités.

Même si par commodité tu laisse la propriété GroupName renseignée.

Private Sub OK_Click()
Dim Ctrl As Control, Ret as String
Ret=Chr(10) & Chr(13)
For Each Ctrl In Me.Controls
     If TypeOf Ctrl Is MSForms.OptionButton Then
       If Ctrl.Tag= "ACHATS" and Ctrl.Value = True then MsgBox (Ctrl.Name & Ret & Ctrl.Caption)
      End If
Next
End Sub

Bons tests, bonne continuation

errare...

L'insistance des uns et des autres à proposer des solutions de tout poil m'amène à découvrir la propriété GroupName

Dans ces conditions à condition de bien s'en servir, le code annoncé devrait fonctionner : Si ça ne marche pas c'est que l'un des OptionButton n'est pas GroupName= "ACHATS" ou le GroupName est mal orthographié ou en minuscule...

A+

25codenameob-vg.xlsm (19.76 Ko)
Rechercher des sujets similaires à "mettre variable caption control userform"