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

F22Raptor

XLDnaute Occasionnel
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 !
 

Fichiers joints

Roblochon

XLDnaute Occasionnel
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 Occasionnel
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 Accro
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
 

Fichiers joints

Roblochon

XLDnaute Occasionnel
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+
 

Roblochon

XLDnaute Occasionnel
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
 

job75

XLDnaute Barbatruc
Re, bonsoir sousou, Pierre,

Fichier joint avec module de classe, voyez les codes de UserForm1, Module1 (déclaration des variables Public), Classe1.

A+
 

Fichiers joints

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
 

job75

XLDnaute Barbatruc
Bonsoir Efgé,

Bien sûr on peut toujours compliquer le code pour un nombre quelconque de boutons.

Mais le nombre de boutons étant connu il est plus simple d'adapter tablo(1 To 7) ce n'est pas la mer à boire...

A+
 

Discussions similaires


Haut Bas