Code VBA bouton de bascule sous excel

Fermé
Neliville51 Messages postés 92 Date d'inscription mercredi 9 juillet 2008 Statut Membre Dernière intervention 5 juillet 2011 - 9 sept. 2010 à 11:41
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 - 9 sept. 2010 à 19:42
Bonjour à tous et à toutes,

Bon voilà mon problème:
J'essaie de gérer de la documentation sous excel via vba. J'aimerais faire appliquer un code à l'ensemble des boutons de bascule de ma feuille excel. Voici le code que j'ai rédigé:

Private Sub ToggleButton1_Click()
Dim actif As Boolean
actif = ToggleButton1.Value

If actif Then
With ToggleButton1
.BackColor = vbGreen
.Caption = "Actif"
End With
Else
With ToggleButton1
.BackColor = vbRed
.Caption = "Inactif"
End With
End If

End Sub

Ce code marche pour le ToogleButton1 et j'aimerais que ça le fasse sur l'ensemble des "toobglebutton" (bouton de bascule) de ma feuille.

Merci d'avance à tous ceux et celles qui sauront m'éclaircir sur le sujet.

A bientôt


1 réponse

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
9 sept. 2010 à 19:42
Bonjour,

Je propose la solution suivante :

1/ Créer une fonction "traiter" générique qui prend en paramétre le bouton en question :


Sub traiter(bouton As ToggleButton)

With bouton
    If .Value Then
        .BackColor = vbGreen
        .Caption = "Actif"
    Else
        .BackColor = vbRed
        .Caption = "Inactif"
    End If
End With

End Sub




Cette fonction s'utilise dans les macros des boutons bascule de la manière suivante

exemple pour le bouton 1 :


Sub ToggleButton1_Click()
    Call traiter(ToggleButton1)
End Sub




2/ Ensuite générer automatiquement toutes les macros "_Click" par la macro suivante :


Sub Init_Macro_Bascule()

Dim Code As String
Dim s As Shape

For Each s In Sheets("Feuil1").Shapes
    If Mid(s.Name, 1, 12) = "ToggleButton" Then
        Code = "Sub " & s.Name & "_Click" & vbCrLf
        Code = Code & "Call traiter(" & s.Name & ")" & vbCrLf
        Code = Code & "End Sub"
        With ThisWorkbook.VBProject.VBComponents("Feuil1").CodeModule
            NextLine = .CountOfLines + 1
            .InsertLines NextLine, Code
        End With
    End If
Next s

End Sub



3/ effacer les macros de la Feuil1 puis lancer la macro "Init_Macro_Bascule"

J'ai supposé que tous les boutons sont dans la Feuil1.
Mettre les deux macros "traiter" et "Init_Macro_Bascule" dans un module à part.



Voila j'espere que c'est assez clair .
A+
3