Autres Gestion de treize OptionButton dans un Frame1 d'UserForm1

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Webperegrino

XLDnaute Accro
Supporter XLD
(Excel 2003)

Bonjour le Forum,

Dans un UserForm j’ai placé un Frame1 contenant un premier CommandButton1 à action spécifique et douze autres qui auront la même réaction (CommandButton2 à CommandButton13).

Dans le code VBA j’y ai mis un :
For i= 2 to 13 pour ne pas multiplier cette macro sous forme de « Private Sub OptionButton2_Click() à Private Sub OptionButton13_Click() ».

Voici la codification actuelle qui fonctionne si je clique sur le pourtour du Frame1 :

VB:
Private Sub Frame1_Click()
Dim i As Integer
If Me.Controls("OptionButton1").Value = True Then
  ActiveCell = ""
End If
For i = 2 To 13
  If Me.Controls("OptionButton" & i).Value = True Then
    ActiveCell = Me.ListBox1 & Chr(10) & Me.Controls("OptionButton" & i).Caption
  End If
Next i
Unload Me
End Sub

Le problème est que pour sortir de l’userform il me faut cliquer sur le bord du Frame1.
Je voudrais sortir de l’Userform dès qu’un ctrl.Value passe en True.
Pour cela comment modifier la composition macro ci-dessus pour appliquer le « Unload Me » dès qu’un des OptionButton passe en True ou me faut-il faire 12 fois ceci en changeant le n° du CommandButton, de 2 à 13 -que je voudrais éviter- ?

VB:
Private Sub OptionButton2_Click()
For Each ctrl In UserForm1.Frame1.Controls
  If ctrl.Value = True Then ActiveCell = Me.ListBox1 & Chr(10) & ctrl.Caption
Next
Unload Me
End Sub
et ainsi jusqu'à OptionButton13.

Merci
Webperegrino
 
Le Forum,
Bonjour Jean-Marie (ChTi160),
Merci d'avoir si vite répondu.
ActiveCell = "" : Exit For
... ainsi que ... & ctrl.Caption : Exit For
... ne me donnent pas plus de résultat : il faut toujours cliquer sur le bord du Frame pour appliquer la macro.
A vrai dire ce n'est pas trop gênant mais il faut à chaque fois cliquer de cette manière pour revenir dans la feuille Excel.
Henri (Webperegrino)
 
Bonjour,

Si tu veux sortir sur l'action d'un des optionbutton il faut tous les traiter, pas le choix.
A tester faute de fichier fourni :
VB:
Private Sub OptionButton1_Click()
    traiterOpt 1
End Sub

Private Sub OptionButton2_Click()
    traiterOpt 2
End Sub

Private Sub OptionButton3_Click()
    traiterOpt 3
End Sub

Private Sub traiterOpt(opt As Long)
    If opt = 1 Then
        ActiveCell = ""
    Else
        ActiveCell = Me.ListBox1 & Chr(10) & Me.Controls("OptionButton" & opt).Caption
    End If
    Unload Me
End Sub
eric
 
Re
(pas d Ordi)
je ne comprends pas pourquoi tu utilises la procedure Click du frame?
tu pourrais utiliset une Class avec tes OptionButton
et via cette class gerer les actiin sur tes OptionButton.
essaye de mettre un fichier exemple de ce que tu as et ce que tu veux (avec explications)
edit :bonsoir Eric
jean marie
 
Le Forum, Jean-Marie,
Bonsoir Éric,
Éric, c'est exactement ce que j'avais appliqué une fois pour l'OptionButton1 et la même programmation pour les douze suivant, mais je cherchais une limitation de création de lignes de VBa... et ça fonctionnait bien.
Jean-Marie, j'essaie de créer un fichier simplifié avec cela et reviens vers vous.
Et pour répondre à la question #5 : ... sinon, après un choix d'OptionButton dans le Frame, l'UserForm reste à l'écran et la macro ne se poursuit pas pour modifier le contenu de ActiveCell. En cliquant sur le Frame, on sort de l'Userform, ActiveCell est changé en conséquence du choix. Ça fonctionne mais c'est un peu "lourd" à la longue après multi-saisies.

Pour faire une réduction des lignes VBA, j'ai aussi pensé à l'étude de fin des OptionButton1 à 13 du style :
slig=Right(OptionButton.name,2)'ok si deux chiffres
If Not IsNumeric(slig) Then slig= Right(slig,1)'correction si entre 1 et 9
Lig=Vla(slig)
Webperegrino
 
Absolument Éric, c'est ce que j'avais aussi placé avec succès.
Autrement, j'ai aussi remplacé mon contenu Frame1 par une deuxième ListBox et ai indiqué "sortir de l'Userform et placer dans ActiveCell" dès qu'un choix dans ListBox : ça fonctionne très bien sans bouton Validation.
Donc dans le cas d'un Frame1 cliquer sur le bord du Frame1 ou cliquer sur un bouton Validation reviendront au même : après choix dans Frame1 cliquer ailleurs pour sortir.
Donc je crois que je vais abandonner les OptionButton et utiliser une deuxième ListBox c'est plus pratique.
Merci en tout cas de vous être penchés tous les deux sur cette programmation d'OptionButton.
Webperegrino
 
Re
pas evident de comprendre le but de la procedure.
tu ne peux normalement avoir qu un seul OptionButton a True dans le frame
et tu recuperes la ligne selectionnee dans une ListBox
le tout tu le mets dans une cellule(ActiveCell)
j attends le fichier
avec un module de Class
tu aurais un truc du genre
VB:
ActiveCell=IIf(Optb.Name =“OptionButton1”, “” ,Me.ListBox1 & Chr(10) & OptB.Caption)
jean marie
 
Excellent, Jean-Marie,
Aucune urgence car cet exercice est pour me permettre d'augmenter mes connaissances dans la pratique des OptionButton.
Mon fichier original fonctionne déjà très bien avec listbox2 ou appui en bas du Frame sous choix n° 13.
C'était juste pour limiter le nombre de "clics" à l'usage...
Merci encore et bon week-end,
Webperegrino
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
281
Réponses
3
Affichages
665
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Retour