ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "True"..

azerty6767

XLDnaute Junior
Bonjour,

Sur un UserForm, j'ai plusieurs ToggleButtons, qui sont nommés ("alfa" & i), où i prend plusieurs valeurs (boucle For Next).

Lorsque je sélectionne un des ToggleButtons (par exemple ("alfa" & 5)), je souhaiterais que cette action "dé-sélectionne" automatiquement les autres ToggleButtons...

J'ai réussi à le faire mais c'est vraiment lourd, avec des conditions "if". Exemple :

Code:
If UF.Controls("alfa1").Value = True then
 UF.Controls("alfa2").Value =false
UF.Controls("alfa3").Value=False
etc...

Etant donné qu'il y a un grand nombre de Toggle Buttons, le code devient vraiment lourd.

N'y aurait-il pas un code qui soit plus court, genre "Not Active ToggleButtons like "alfa*" = false, except Active ToggleButtons like "alfa' = true ?...

Hum,hum

Merci pour votre aide,



Olivier...
 

Theze

XLDnaute Occasionnel
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

Bonjour,

Une piste avec un module de classe. A mettre dans un module de classe nommé "Classe1" :
Code:
Public WithEvents GroupeTgb As MSForms.ToggleButton

Private Sub GroupeTgb_Click()

    'ici ton code...
    
End Sub


Private Sub GroupeTgb_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    Dim Tgb As MSForms.ToggleButton
    
    For Each Tgb In UserForm1.Controls
               
        Tgb.Value = False
        
    Next Tgb

End Sub
A mettre dans le module de ta form :
Code:
Dim Tgb() As New Classe1

Private Sub UserForm_Initialize()

    Dim BtnBascule As MSForms.ToggleButton
    Dim I As Integer
    
    For Each BtnBascule In Me.Controls
        
        I = I + 1
        
        ReDim Preserve Tgb(1 To I)
        
        Set Tgb(I).GroupeTgb = BtnBascule
        
    Next BtnBascule
    
End Sub

Hervé.
 

jpb388

XLDnaute Accro
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

Bonjour à tous,Theze
sans module de classe

Code:
Private Sub ToggleButton1_Click()
    Dim Ctl As Control
    For Each Ctl In Me.Controls
        If TypeOf Ctl Is MSForms.ToggleButton And Ctl.Name <> Tb.Name Then Ctl.Value = False
    Next Ctl
End Sub
 

Theze

XLDnaute Occasionnel
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

Bonjour jpb388,

L'évènement Click est appelé à chaque fois que la valeur est mise à False ce qui décoche automatiquement le bouton sur lequel on vient de cliquer obligeant ainsi à re-cliquer dessus d'où l'utilisation de l'évènement MouseDown qui est exécuté juste avant l'évènement Click !
Et puis, comme dis azerty6767 :
Etant donné qu'il y a un grand nombre de Toggle Buttons, le code devient vraiment lourd.
De ce fait, je pense que le module de classe est le plus indiqué enfin, c'est mon avis.
Il y a aussi les OptionBoutons qui évitent de devoir écrire tout ce code mais bon, azerty6767 a probablement ses raisons pour utiliser des ToggleButtons !

Hervé.
 

Efgé

XLDnaute Barbatruc
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

Bonjour azerty6767, jpb388, Theze :), Bonjour Jean-Marcel :)
Très en retard, mais comme j'ai monté le classeur....

Les options boutons seraient une bonne alternative, mais il y en a toujours un de validé, alors qu'avec les toggle, on peux les avoir tous à false. C'est a voir.
Cordialement
 

Pièces jointes

  • TogglButtons.xls
    47.5 KB · Affichages: 96
Dernière édition:

jpb388

XLDnaute Accro
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

re
Theze
je ne dis pas le contraire, ta solution est plus "professionnel", je soumettais seulement une autre solution que d'énumérer les toggleButton un par un en leur attribuant la valeur false et je suis du même avis que Jean-Marcel la solution option me parait plus approprié
amicalement
 

Efgé

XLDnaute Barbatruc
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

Re
@ jpb388 :)
...je soumettais seulement une autre solution que d'énumérer les toggleButton un par un en leur attribuant la valeur false...
Oui, mais cette solution oblige tout de même a crer un code par bouton.
C'est l'avantage des modules de classes, on met les boutons désirés dans la classe et ensuite un seul code pour tous.
Cordialement
 

Papou-net

XLDnaute Barbatruc
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

Bonjour à tous,

Intéressé par le sujet, je me permets de proposer une synthèse des codes initiés par Theze et Efgé, et qui va dans le sens d'un code aussi court que possible. Reprise du fichier de Efgé (j'espère qu'il ne m'en voudra pas).

Dans le module Userform1 :

Code:
Dim Buttons() As New Classe1

Private Sub UserForm_Initialize()
'Création de la liste pour le module de classe
Dim ButtonCount&, Obj As Object
ButtonCount = 0
For Each Obj In Me.Controls
    If TypeOf Obj Is msforms.ToggleButton And Obj.Name Like "Alpha*" Then
        ButtonCount = ButtonCount + 1
        ReDim Preserve Buttons(1 To ButtonCount)
        Set Buttons(ButtonCount).ButtonGroup = Me.Controls(Obj.Name)
    End If
Next Obj
End Sub
Dans le module Classe1 :

Code:
Dim Buttons() As New Classe1

Private Sub UserForm_Initialize()
'Création de la liste pour le module de classe
Dim ButtonCount&, Obj As Object
ButtonCount = 0
For Each Obj In Me.Controls
    If TypeOf Obj Is msforms.ToggleButton And Obj.Name Like "Alpha*" Then
        ButtonCount = ButtonCount + 1
        ReDim Preserve Buttons(1 To ButtonCount)
        Set Buttons(ButtonCount).ButtonGroup = Me.Controls(Obj.Name)
    End If
Next Obj
End Sub
Je me posais aussi la question de l'utilisation de ToggleButton mais, comme le précise si justement Efgé, on conserve la possibilité de n'avoir aucun contrôle activé. Reste qu'au final, c'est à Olivier de décider de la meilleure solution.

Bon dimanche à tous.

Cordialement.
 

Pièces jointes

  • Copie de TogglButtons.xls
    44.5 KB · Affichages: 56
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

Re à tous
@ Papou-net :)
Pas de problème.... "Il aurait été plus constructif que azerty6767 fournisse les débuts d'esquisse d'idée de projet"
Il me semble, avec ta proposition, qu'il y a un souci si le UserForm ne soit pas constitué "que " de Toggle... (Voir P.J)
La vérification
VB:
If O.Name <> Tmp And TypeOf O Is MSForms.ToggleButton Then
me semble nécessaire, a moins qu'une autre approche.....

Cordialement
 

Pièces jointes

  • TogglButtons(2).xls
    42 KB · Affichages: 50

Papou-net

XLDnaute Barbatruc
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

RE :

Bien vu, Efgé, j'ai oublié d'envisager cette possibilité. Il faut effectivement tester le type du contrôle, comme dans l'exemple ci-dessous :

Code:
Private Sub ButtonGroup_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim O As Object
For Each O In UserForm1.Controls
    If Not O Is ButtonGroup And TypeOf O Is msforms.ToggleButton Then O.Value = False
Next O
End Sub
Cordialement.
 

Pièces jointes

  • Copie 01 de TogglButtons.xls
    37.5 KB · Affichages: 51

Papou-net

XLDnaute Barbatruc
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

RE :

Autre possibilité, peut-être plus astucieuse : insérer les ToggleButton dans un Frame comme dans la copie ci-jointe.

Cordialement.
 

Pièces jointes

  • Copie 02 de TogglButtons.xls
    42 KB · Affichages: 79

Efgé

XLDnaute Barbatruc
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

Re à tous
Je ne sais pas ce qu'en pensera azerty6767, mais en tous cas, on commence à avoir un UserForm bien sympa...:D
Maintenant si on avait un signe de vie de sa part, nous serions moins inquiéts pour lui....:rolleyes:
Cordialement
 

Staple1600

XLDnaute Barbatruc
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

Bonsoir à toud


Une suggestion en passant (que faute de temps je n'ai point encore tester)
Et si on utilisant la propriété GroupName des contrôles ?
Vous voyez de quoi je veux parler ?
Désolé mais on m'intime l'ordre de participer à divers corvées ménagères.
Alors pour éviter les griefs et les moues réprobatrices, je suis obligé de vous quitter pour un temps
J'espère que vous aurez le temps de voir voir ce qu'on peut faire avec GroupName ;)
 

Papou-net

XLDnaute Barbatruc
Re : ToggleButton ("alfa" & i) sur UserForm : n'autoriser qu'un seul ToggleButton "Tr

groupName est une propriété des optionsButton mais pas des toogleButton
A priori

Bonsoir à tous,

@ Staple, Jean-Marcel :

En effet, on ne peut pas créer un groupe, exploitable par le code, avec des ToggleButton.

Mais on peut simuler un groupe avec un Frame en réglant sa propriété SpecialEffect à 0 (SpecialEffectFlat).

Cordialement.
 

Statistiques des forums

Discussions
312 205
Messages
2 086 199
Membres
103 156
dernier inscrit
Ludo94130