Ajouter des commandes de menu personnalisées, Excel VBA

Chaque fois qu’un contrôle est ajouté à une barre de menus via le code, l’onglet Compléments devient visible et la nouvelle commande apparaît dans le groupe Commande de menu. Peu importe où la commande a été placée dans les anciennes versions d’Excel. Toutes les commandes ajoutées sont affichées dans l’ordre dans lequel elles ont été créées, de haut en bas et de gauche à droite.

En plus des applications existantes des versions antérieures d’Excel, il est toujours possible dans Excel de fournir à l’utilisateur des commandes définies par l’utilisateur via l’objet COMMANDBAR. Cette méthode nécessite uniquement que le fichier soit dans un format de fichier prenant en charge les macros (*xlam) sont enregistrés, car le code est toujours transporté avec le classeur.

Dans Excel, il n’y a plus de véritables barres de menus. Toutes les commandes créées sur différentes barres de menus sont placées dans le même groupe Commande de menu. Lors de la suppression de commandes individuelles, les références exactes lors de la création des contrôles individuels doivent être strictement respectées. Afin d’éviter d’éventuelles erreurs, il est conseillé de ne pas spécifier de barre de menu spéciale, mais de se référer à la barre de menu active à la fois lors de la création et de la suppression.

Application.CommandBars.ActiveMenuBar

Lors de la création d’un nouveau bouton, la valeur de l’argument temporaire facultatif doit être définie sur True pour créer temporairement le nouveau contrôle. Jusqu’à Excel inclus, les champs temporaires sont automatiquement supprimés à la fermeture de l’application Excel. Les contrôles non temporaires restent visibles après le redémarrage de l’application Excel jusqu’à ce qu’ils soient supprimés manuellement ou par code.

Public Sub AjouterCommandeMenu()
Dim cmdBar As CommandBar
Dim ctl As CommandBarButton
Dim strCaption As String
' Barre de menus active
Set cmdBar = Application.CommandBars.ActiveMenuBar
' Composer le nom et la désignation des boutons
strCaption = "Bouton sur le " & cmdBar.Name
' Supprimer tout élément existant du même nom
On Error Resume Next
cmdBar.Controls(strCaption).Delete
On Error GoTo 0
' bouton d'insertion
Set ctl = cmdBar.Controls.Add( _
Type:=msoControlButton, _
Temporary:=True)
With ctl
.Caption = strCaption
.Style = msoButtonCaption
.OnAction = "MaMacro"
End With
End Sub

Si l’utilisateur clique sur le bouton nouvellement créé, la procédure stockée dans la propriété OnAction est appelée.

Public Sub MaMacro()
MsgBox "BONJOUR " & Application.UserName
End Sub

La procédure ci-dessus affecte uniquement un texte de légende pour l’identification au nouveau bouton via la propriété Caption, ce qui rend les contrôles difficiles d’accès ultérieurement. Une identification plus simple des contrôles est obtenue en attribuant un texte unique à l’élément dans la propriété TAG. La commande de menu peut ensuite être référencée avec précision à l’aide de la méthode FindControl. Dans l’exemple suivant, la propriété de balise Mon Bouton est affectée au nouveau bouton. La propriété TAG permet l’utilisation de caractères spéciaux en plus des espaces.

Public Sub AjouterEtiqMenuCommande()
Dim cmdBar As CommandBar
Dim ctl As CommandBarControl
Set cmdBar = Application.CommandBars.ActiveMenuBar
' Supprimer tout élément existant du même nom
On Error Resume Next
cmdBar.FindControl(Tag:="Mon Bouton").Delete
On Error GoTo 0
' bouton d'insertion
Set ctl = cmdBar.Controls.Add( _
Type:=msoControlButton, _
Temporary:=True)
With ctl
.Tag = "Mon Bouton"
.Caption = "Bouton avec étiquette"
.Style = msoButtonCaption
.OnAction = "MaMacro"
End With
End Sub

 

 

S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x