XL 2016 [VBA] plusieurs ToggleButton à gérer ensemble

F22Raptor

XLDnaute Impliqué
Bonjour à tous,
Dans le fichier joint, j'affiche un formulaire avec des toggle buttons à l'intérieur d'un frame.
A l'ouverture, ils sont tous décochés.
Je voudrais qu'ils agissent comme des boutons d'options : un seul peut être coché à la fois.
J'ai tapé un code qui ... ne marche pas vraiment !

Avez vous une astuce pour gérer cela ?

Merci !
 

Pièces jointes

  • Multiple toggle.xlsm
    26.9 KB · Affichages: 15

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Sans module de classe:
VB:
Private Sub ToggleButtons(idx As Integer)
    Dim i As Integer
    NePasExecuter = True
    For i = 1 To 7
        If i <> idx Then Me.FramePtf.Controls("ToggleButton" & i).Value = False
    Next i
    NePasExecuter = False
End Sub

Private Sub ToggleButton1_Click()
If Not NePasExecuter Then ToggleButtons 1
End Sub

Private Sub ToggleButton2_Click()
If Not NePasExecuter Then ToggleButtons 2
End Sub

Private Sub ToggleButton3_Click()
If Not NePasExecuter Then ToggleButtons 3
End Sub

Private Sub ToggleButton4_Click()
If Not NePasExecuter Then ToggleButtons 4
End Sub

Private Sub ToggleButton5_Click()
If Not NePasExecuter Then ToggleButtons 5
End Sub

Private Sub ToggleButton6_Click()
If Not NePasExecuter Then ToggleButtons 6
End Sub

Private Sub ToggleButton7_Click()
If Not NePasExecuter Then ToggleButtons 7
End Sub

Bonne journée
 

F22Raptor

XLDnaute Impliqué
Merci !
Sur le précédent thread, j'ai trouvé ceci qui marche plutôt bien ! (valable pour chaque bouton)


Dim Var As Variant
Dim X As Control

Set Var = Me.ActiveControl
For Each X In UserForm1.Controls
If TypeName(X) = "ToggleButton" And X.Name Like "ToggleButton*" Then
X.Value = False
End If
Next

Var.Value = True
 

sousou

XLDnaute Barbatruc
Bonjour à tous. et pour le fun
Je soumet à votre réflexion et à vos remarques une solution qui peux être utile dans bien d'autres cas
Je l'utilise dans un userform calendrier que je viens de terminer
Cette solution consiste à trouver graphiquement quel contrôle est sollicité par l'utilisateur
 

Pièces jointes

  • Copie de Multiple toggle.xlsm
    18.8 KB · Affichages: 23

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Merci sousou, c'est une solution que j'utilise aussi depuis de nombreuses années dans un usfCalendrier...:) et autre cas de succession de contrôles.
Méthode plus légère à maintenir qu'un module de classe.

Bon après-midi
 

Paf

XLDnaute Barbatruc
Bonjour à tous,

un essai

VB:
Private Sub ToggleClik(Clicked)
 Dim Toggle As Control
 For Each Toggle In UserForm1.Controls
    Toggle.Value = Toggle.Name = Clicked
 Next
End Sub

et pour chaque toggle

Code:
Private Sub ToggleButton1_Click()
ToggleClik ActiveControl.Name
End Sub

Cette solution nécessite de "sortir" les toggle du Frame à cause ActiveControl.Name qui renvoie le nom du Frame.


Dommage qu'on ne puisse pas créer des groupes de contrôles ToggleButton comme on peut le faire avec des OptionButton

A+
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re bonjour,

@Paf: avec FramePtf.ActiveControle.Name:

VB:
Private Sub ToggleClik(Clicked)
 Dim Toggle As Control
 For Each Toggle In Me.FramePtf.Controls
    Toggle.Value = Toggle.Name = Clicked
 Next
End Sub



Private Sub ToggleButton2_Click()
ToggleClik FramePtf.ActiveControl.Name
End Sub

Private Sub ToggleButton3_Click()
ToggleClik FramePtf.ActiveControl.Name
End Sub

Private Sub ToggleButton4_Click()
ToggleClik FramePtf.ActiveControl.Name
End Sub

Private Sub ToggleButton5_Click()
ToggleClik FramePtf.ActiveControl.Name
End Sub

Private Sub ToggleButton6_Click()
ToggleClik FramePtf.ActiveControl.Name
End Sub

Private Sub ToggleButton7_Click()
ToggleClik FramePtf.ActiveControl.Name
End Sub

Bon après midi
 

Efgé

XLDnaute Barbatruc
Bonjour à tous

@job :)
Encore faut-il, dans ta proposition, connaitre le nombre de ToggleButton.
VB:
Public tablo(1 To 7) As New Classe1, flag As Boolean
Si tu passes à 10 - toujours un nombre fixe - le code plante.
C'est normal : le positionnement dynamique des boutons devrait impliquer le redimensionnement du USF...
Positionnement dynamique des boutons :
Code:
Me.StartUpPosition = 0
Me.Top = Application.Top + ((Application.Height) / 2) - (Me.Height / 2)
Me.Left = Application.Left + ((Application.Width) / 2) - (Me.Width / 2) - IIf(Application.Width > 2200, 102, 0)
D'où l’intérêt de boucler sur l’existant et d'utiliser un module de classe qui prend en compte "l'existant".
Enfin, à mon avis...

Cordialement
 

Discussions similaires