Tester valeurs de 18 boutons à Bascule (USERFORM / VBA)

Salut à tous,

J'ai besoin de votre aide afin de raccourcir et simplifier un code en VBA.

Je ne pense pas qu'il soit nécessaire que je m'explique, le code étant assez parlant mais tout de même. Alors, j'ai créé un UserForm avec plusieurs boutons à bascule (exactement 18). J'ai réussi à mettre au point la macro qui fait que quand "le" bouton est enclenché il s'affiche en vert.

Cependant, comme je l'ai précisé j'ai 18 boutons, je voudrais que vous m'aidiez alors à factoriser se code pour qu'il y es UNE seule macro qui s'applique à tous les boutons mais individuellement.

Je vous remercie par avance pour votre aide !

Private Sub ToggleButton1_Click()
    With ToggleButton1
        If .Value = True Then
            .BackColor = &H80FF80    'Vert
        End If
        If .Value = False Then
            .BackColor = &H8000000F 'Vert
        End If
    End With
End Sub

Private Sub ToggleButton2_Click()
    With ToggleButton2
        If .Value = True Then
            .BackColor = &H80FF80    'Vert
        End If
        If .Value = False Then
            .BackColor = &H8000000F 'Vert
        End If
    End With
End Sub
Private Sub ToggleButton3_Click()
    With ToggleButton2
        If .Value = True Then
            .BackColor = &H80FF80    'Vert
        End If
        If .Value = False Then
            .BackColor = &H8000000F 'Vert
        End If
    End With
End Sub

Cdlt,

Bonjour,

Tu veux éviter d'avoir à gérer 18 événement click?

Ou bien gérer les 18 événements, mais en appelant toujours la même macro?

Yann

Salut,

Je veux surtout gérer les 18 événements avec la même macro. Enfin, il s'agit pour l'utilisateur de sélectionner des "trucs" qui conditionneront la création de feuilles (une feuille par bouton à bascule).

Cdlt,

Tien, voici une proposition alors!

Private Sub ToggleButton3_Click()

Call MEF(ActiveControl.Name, ActiveControl.Value)

End Sub

Sub MEF(nomBouton As String, valeurBouton As Variant)
Newtruc.Controls(nomBouton).BackColor = IIf(valeurBouton = True, &H80FF80, &H8000000F)
End Sub

Dit moi si c'est bon pour toi!

Yann

Re,

Sa marche bien merci, mais j'aurai quand même 18 macros nan ? Je te taquine, au moins j'ai pas 500 lignes C'est parfait.

Et, aurait-tu une solution (où quelqu'un d'autre) pour tester la valeur des boutons 1 par 1 ?

Pour que :

Si le bouton1 = True, que cela créé une feuille nommé par la valeur .caption du bouton;

Si le bouton1 = False, que cela ne créé aucune feuille.

Merci par avance !

Cdlt,

J'ai faillit mordre à l'hameçon! :p

Oui du coup tu auras tes 18 procédures événementielles!

Je pense que tu as deux solutions,:

- tu crée les feuilles dans la macro de mise en forme du bouton (mais je déconseille, ça peut être ramer un peu, et puis dans le cas ou tu te trompe il faudra gérer la suppression de la feuille)

- tu crée les feuille lors de la validation d'un bouton, en bouclant sur tous les boutons de ton formulaire via boucle for Each.

Et du coup ça te donne:

Private Sub CommandButton1_Click()

Dim ctrl As Variant
Dim Feuill As Worksheet

Application.ScreenUpdating = False

For Each ctrl In Me.Controls

    If TypeName(ctrl) = "ToggleButton" And ctrl.Value = True Then

        Set Feuill = Sheets.Add(After:=Sheets(Sheets.Count))
        Feuill.Name = "Feuille créée par " & ctrl.Name

    End If

Next ctrl

Application.ScreenUpdating = True

End Sub

=> Le code se déclenche quand tu clique sur "Continuer"

Bonjour,

Après quelques essais, je ne pense pas que tu puisses obtenir une seule macro pour 18 contrôles, chaque contrôles doit avoir sa macro, donc obligatoirement 18 macros identiques comme L-Yann a proposé.

pour ce qui est de la création des feuilles voici une macro pour un CommandButton :

Private Sub CommandButton1_Click()
        For i = 1 To 18
            With Me.Controls("ToggleButton" & i)
                If .Value = True Then
                    Set NewSheet = Sheets.Add(After:=Sheets(Sheets.Count))
                    NewSheet.Name = .Caption
                End If
            End With
        Next i
End Sub

A plus !

Re,

Nikel ! C'est vraiment ce que je chercher ! Et j'allez le mettre dans la procédure du bouton "Continuer" of course

Bon je vais imprégner de ton vos codes , sa peut être super utile à l'avenir.

Merci à vous L-Yann & Braters !

Cdlt,

EDIT :

L-Yann j'ai une erreur quand j'utilise ton code à la ligne suivante :

 If TypeName(ctrl) = "ToggleButton" And ctrl.Value = True Then

Braters sa marche bien !

Pas de jalousie s'il vous plait

Bonjour,

Avec un module de classe, une seule et unique macro peut gérer autant de contrôles que nécessaire ....

Content d'avoir pu t'aider!

James007 je suis curieux de savoir comment tu ferai ça! Je ne vois pas comment ajouter une méthode à un objet existant dans excel, mais peut etre est ce que ce n'est pas ça! ^^

Si tu as un exemple qui traîne c'est volontiers!

Edit: Je viens de voir que tu avais une erreur, j'ai testé chez moi ça fonctionnait bien. :/ Excel te renvois quoi comme message d'erreur?

James007 a écrit :

Bonjour,

Avec un module de classe, une seule et unique macro peut gérer autant de contrôles que nécessaire ....

)

Je t'avoue que les "modules de classes" pour moi reste une zone mystérieuse et obscure que j'ai pas eu le courage d'explorer.

Je me demande sans cesse : Qu'elle pourrait être la différence entre, mes "modules" à moi, que j'aime et qui sont normaux de mon point de vue et, ces occultes et sombres "modules de classes" ? (Je bricole du VBA moi)

Je vais regarder sur internet, car tu à réveiller mon courage et ma curiosité

EDIT :

http://www.info-3000.com/vbvba/modulesdeclasse.php

Je comprend UN PEU à quoi cela peut servir, mais j'ai du mal à modéliser le fonctionnement dans ma tête.

Je pense qu'un jour je serait obligé de m'y intéresser et à ce moment là, je comprendrais (j'espère )

Merci à tous,

Cdlt,

Merci James007 pour m'avoir fait découvrir ces modules qui ont l'air bien plus compétents.

J'ai essayé de mettre en pratique sur le souci de VH_AE, lorsque j'appuie sur les ToggleButton, ils se mettent bien en vert clair mais lorsque je les désactive, ceux-ci se remettent en gris et non en vert foncé comme la macro est censée le faire, je ne comprend pas.

A plus !

24vh-ae-toggle.xlsm (19.61 Ko)
Rechercher des sujets similaires à "tester valeurs boutons bascule userform vba"