Comment personnaliser les menus contextuels dExcel 2016 dans VBA

Comment personnaliser les menus contextuels dExcel 2016 dans VBA

Avant Excel 2007, les programmeurs VBA utilisaient l'objet CommandBar pour créer des menus personnalisés, des barres d'outils personnalisées et des menus de raccourcis personnalisés (clic droit). À partir d'Excel 2007, l'objet CommandBar est dans une position plutôt étrange. Si vous écrivez du code pour personnaliser un menu ou une barre d'outils, Excel intercepte ce code et ignore bon nombre de vos commandes.

Au lieu d'afficher votre amélioration d'interface bien pensée, Excel 2007 (comme les versions ultérieures) vide simplement vos menus et barres d'outils personnalisés dans un onglet de ruban fourre-tout nommé Compléments.

Les personnalisations des menus et des barres d'outils se retrouvent dans le groupe Compléments → Commandes de menu ou dans le groupe Compléments → Barres d'outils personnalisées. Mais la personnalisation des menus contextuels (qui utilise également l'objet CommandBar) fonctionne toujours comme elle l'a toujours fait - enfin, en quelque sorte.

En bout de ligne ? L'objet CommandBar n'est plus très utile, mais il reste le seul moyen de personnaliser les menus contextuels.

Ajout d'un nouvel élément au menu contextuel Cellule

Ci-dessous, vous trouverez un exemple de code qui ajoute un nouvel élément au menu contextuel qui apparaît lorsque vous cliquez avec le bouton droit sur une cellule. Vous devez pouvoir adapter ces exemples à vos besoins.

Vous pouvez améliorer un peu l'utilitaire Change Case en le rendant disponible à partir du menu contextuel Cellule.

La procédure AddToShortcut ajoute un nouvel élément de menu au menu contextuel Cellule. Vous pouvez l'adapter pour pointer vers vos propres macros en modifiant les propriétés Caption et OnAction de l'objet nommé NewControl.

Sous AddToShortCut()
  Dim Bar en tant que CommandBar
  Dim NewControl en tant que CommandBarButton
  Supprimer à partir du raccourci
  Définir la barre = Application.CommandBars ("Cellule")
  Définir NewControl = Bar.Controls.Add _
     (Tapez :=msoControlButton, ID :=1, _
     temporaire : = vrai)
  Avec NewControl
    .Caption = "&Changer la casse"
    .OnAction = "ChangeCase"
    .Style = msoButtonIconAndCaption
  Terminer par
Fin du sous-marin

Lorsque vous modifiez un menu contextuel, cette modification reste en vigueur jusqu'au redémarrage d'Excel. En d'autres termes, les menus contextuels modifiés ne se réinitialisent pas lorsque vous fermez le classeur qui contient le code VBA. Par conséquent, si vous écrivez du code pour modifier un menu contextuel, vous écrivez presque toujours du code pour inverser l'effet de votre modification.

La procédure DeleteFromShortcut supprime le nouvel élément de menu du menu contextuel Cellule :

Sub DeleteFromShortcut()
  En cas d'erreur Reprendre ensuite
  Application.CommandBars ("Cellule").Controls _
    ("&Changer la casse").Supprimer
Fin du sous-marin

Cela montre comment le nouvel élément de menu s'affiche après un clic droit sur une cellule.

Comment personnaliser les menus contextuels d'Excel 2016 dans VBA

Le menu contextuel Cellule affichant un élément de menu personnalisé : Changer la casse.

La première commande réelle après la déclaration de quelques variables appelle la procédure DeleteFromShortcut. Cette instruction garantit qu'un seul élément de menu Modifier la casse s'affiche dans le menu contextuel Cellule. Essayez de commenter cette ligne (mettez une apostrophe au début de la ligne) et exécutez la procédure plusieurs fois, mais ne vous laissez pas emporter !

Cliquez avec le bouton droit sur une cellule et vous pouvez voir plusieurs instances de l'élément de menu Modifier la casse. Débarrassez-vous de toutes les entrées en exécutant plusieurs fois DeleteFromShortcut (une fois pour chaque élément de menu supplémentaire).

Enfin, vous avez besoin d'un moyen d'ajouter l'élément de menu contextuel lorsque le classeur est ouvert et de supprimer l'élément de menu lorsque le classeur est fermé. Faire cela est facile. Ajoutez simplement ces deux procédures événementielles au module de code ThisWorkbook :

Sous-classeur privé_Open()
Appel AddToShortCut
Fin du sous-marin
Private Sub Workbook_BeforeClose (Annuler en tant que booléen)
Appel DeleteFromShortcut
Fin du sous-marin

La procédure Workbook_Open est exécutée lorsque le classeur est ouvert et la procédure Workbook_BeforeClose est exécutée avant la fermeture du classeur. Juste ce que le docteur à prescrit.

Qu'est-ce qui est différent dans Excel 2013 et Excel 2016 ?

Si vous avez utilisé VBA pour travailler avec des menus contextuels dans Excel 2007 ou une version antérieure, vous devez être conscient d'un changement important.

Dans le passé, si votre code modifiait un menu contextuel, cette modification était en vigueur pour tous les classeurs. Par exemple, si vous avez ajouté un nouvel élément au menu contextuel Cellule, ce nouvel élément apparaîtra lorsque vous cliquerez avec le bouton droit sur une cellule de n'importe quel classeur (ainsi que d'autres classeurs que vous ouvrirez ultérieurement). En d'autres termes, des modifications de menu contextuel ont été apportées au niveau de l' application .

Excel 2013 et Excel 2016 utilisent une interface de document unique, ce qui affecte les menus contextuels. Les modifications que vous apportez aux menus contextuels affectent uniquement la fenêtre de classeur active. Lorsque vous exécutez le code qui modifie le menu contextuel, le menu contextuel des fenêtres autres que la fenêtre active ne sera pas modifié. C'est un changement radical par rapport à la façon dont les choses fonctionnaient auparavant.

Autre rebondissement : si l'utilisateur ouvre un classeur (ou crée un nouveau classeur) lorsque la fenêtre active affiche le menu contextuel modifié, le nouveau classeur affiche également le menu contextuel modifié. En d'autres termes, les nouvelles fenêtres affichent les mêmes menus contextuels que la fenêtre qui était active lors de l'ouverture des nouvelles fenêtres.

Bottom line: Dans le passé, si vous ouvriez un classeur ou un complément qui modifiait les menus contextuels, vous pouviez être assuré que les menus contextuels modifiés seraient disponibles dans tous les classeurs. Vous n'avez plus cette assurance.

Créer des menus contextuels personnalisés dans Access 2007

La fenêtre de conception de macros est différente dans Access 2007 par rapport aux versions ultérieures. Développez donc les sections suivantes pour suivre si vous utilisez Access 2007.

Étape 1 pour Access 2007 : créer un groupe de macros contenant les commandes de menu

Au cours de cette étape, vous créez un groupe de macros, dont chaque macro constituera une commande distincte dans votre menu contextuel.

Qu'est-ce qu'un macrogroupe ?

Un groupe de macros est un objet macro unique contenant au moins deux macros indépendantes. Les macros individuelles sont identifiées en tapant un nom pour chaque macro dans la colonne Noms de macro. Dans l'illustration suivante,  Macro3  est un groupe de macros. NotFoundMsg  et  FoundMsg  sont des macros individuelles au sein du groupe, chaque macro étant composée de deux actions de macro.

Exemple de groupe de macros

Remarque :  La  colonne Nom de la macro  est masquée par défaut. Pour afficher la  colonne Nom de la macro  , sous l'  onglet Conception  , dans le   groupe  Afficher/Masquer , cliquez sur Noms de macro .

  1. Sous l'  onglet Créer  , dans le   groupe  Autre , cliquez sur Macro . Si cette commande n'est pas disponible, cliquez sur la flèche située sous le  bouton Module  ou  Module de classe  , puis cliquez sur  Macro .

  2. Sous l’  onglet Conception  , dans le  groupe Afficher/Masquer  , cliquez sur  Noms de macro  pour afficher la  colonne Nom de macro  .

  3. Pour chaque commande que vous souhaitez dans votre menu contextuel personnalisé :

    • Dans la  colonne Nom de la macro  , saisissez le texte que vous souhaitez afficher dans le menu contextuel (par exemple, « Imprimer le rapport » ou « Enregistrer »).

      Remarque :  Pour créer une clé d'accès afin que vous puissiez utiliser le clavier pour choisir la commande, tapez une esperluette (&) avant la lettre que vous souhaitez utiliser comme clé d'accès dans le nom de la commande (par exemple, "&Enregistrer"). Cette lettre sera soulignée sur le menu.
    • Dans la  colonne Action  , sélectionnez la première action que vous souhaitez exécuter lorsque vous cliquez sur la commande dans le menu contextuel.

    • Si vous souhaitez effectuer d'autres actions lorsque vous sélectionnez cette commande, ajoutez-les sur les lignes suivantes. Pour chaque action ultérieure, laissez la  cellule Nom de la macro  vide.

      Remarque :  Pour créer une ligne entre deux commandes de menu, tapez un trait d'union (-) dans la  colonne Nom de la macro  entre les commandes de menu appropriées.
  4. Enregistrez et nommez la macro, par exemple   mcrShortcutMenuCommands .

L'illustration suivante montre un exemple de groupe de macros pour un menu personnalisé ou un menu contextuel.

Un groupe de macros de menu en mode Création

Étape 2 pour Access 2007 : créer une macro qui crée le menu

Cette étape peut sembler redondante, mais pour créer le menu contextuel à partir du groupe de macros que vous avez créé à l'étape 1, vous devez créer une deuxième macro contenant l'  action de macro AddMenu  . Cette macro est parfois appelée « macro de menu ».

  1. Sous l'  onglet Créer  , dans le   groupe  Autre , cliquez sur Macro . Si cette commande n'est pas disponible, cliquez sur la flèche située sous le  bouton Module  ou  Module de classe  , puis cliquez sur  Macro .

  2. Sur la première ligne de la macro, sélectionnez  AddMenu  dans la  liste Action  .

  3. Sous  Arguments d'action , dans la  zone Nom du menu  , tapez le nom du menu (par exemple, « Commandes de rapport »). Cet argument n'est pas obligatoire, mais il est recommandé si, à l'étape 3, vous envisagez d'ajouter le menu à un onglet du ruban (tel que l'  onglet Compléments  d'un formulaire ou d'un état). Si le menu est ajouté en tant que menu contextuel à l'étape 3, l'  argument Nom du menu  est ignoré.

  4. Dans la  zone Nom de la macro de menu  , entrez le nom de la macro que vous avez créée à l'étape 1.

  5. Enregistrez et nommez la macro, par exemple  mcrAddShortcutMenu .

L'illustration suivante montre un exemple de macro de menu qui crée le menu que nous avons conçu à l'étape 1.

Une macro de menu en mode Création

Étape 3 pour Access 2007 : attacher le menu à un contrôle, un formulaire, un état ou une base de données

Selon l'endroit où vous souhaitez que le menu apparaisse, utilisez une ou plusieurs des procédures suivantes.

  • Ajouter le menu à l'onglet Compléments d'un formulaire ou d'un rapport

    Utilisez cette procédure si vous souhaitez que le menu apparaisse sur l’  onglet Compléments  pour un formulaire ou un rapport spécifique, comme indiqué dans l’illustration suivante :

    Onglet Compléments contenant un menu personnalisé

    1. Dans le volet de navigation, cliquez avec le bouton droit sur le formulaire ou l'état dans lequel vous souhaitez que le menu apparaisse, puis cliquez sur  Mode Création .

    2. Sous l'  onglet Conception  , dans le  groupe Afficher/Masquer  , cliquez sur  Feuille de propriétés .

    3. Sélectionnez l’objet entier en sélectionnant  Formulaire  ou  Rapport  dans la liste en haut du volet des tâches Feuille de propriétés.

    4. Sous l’   onglet  Autre de la feuille de propriétés, dans la zone de propriétés Menu contextuel  , tapez le nom de la macro que vous avez créée à l’étape 2 (dans cet exemple, « mcrAddShortcutMenu »).

      La prochaine fois que vous ouvrirez le formulaire ou le rapport, l'  onglet Compléments  apparaîtra dans le ruban. Cliquez sur l'onglet pour voir le menu.

      Pour plus d'informations sur les techniques de personnalisation du ruban, telles que l'ajout d'onglets personnalisés ou le masquage des onglets par défaut, consultez l'article  Créer un ruban personnalisé dans Access .

      Le ruban est un composant de l'interface utilisateur de Microsoft Office Fluent.

  • Ajouter le menu en tant que menu contextuel pour un formulaire, un rapport ou un contrôle

    Utilisez cette procédure si vous souhaitez que le menu apparaisse lorsque vous cliquez avec le bouton droit sur un formulaire, un état ou un contrôle spécifique, comme indiqué dans l'illustration suivante :

    Un menu contextuel simple

    1. Dans le volet de navigation, cliquez avec le bouton droit sur le formulaire ou l'état dans lequel vous souhaitez que le menu contextuel apparaisse, puis cliquez sur  Mode Création .

    2. Sous l'  onglet Conception  , dans le  groupe Afficher/Masquer  , cliquez sur  Feuille de propriétés .

    3. Sélectionnez le contrôle ou l'objet auquel vous souhaitez attacher le menu contextuel.

      Remarque :  Pour sélectionner l'objet entier, sélectionnez  Formulaire  ou  Rapport  dans la liste en haut du volet des tâches Feuille de propriétés.

    4. Sous l’  onglet Autre  de la feuille de propriétés, dans la  zone de propriétés Barre de menus contextuels  , tapez le nom de la macro que vous avez créée à l’étape 2 (dans cet exemple, « mcrAddShortcutMenu »).

  • Ajouter le menu en tant que menu contextuel global

    Cette procédure remplace tous les menus contextuels par défaut de la base de données actuelle. Les menus contextuels personnalisés que vous avez attachés à des formulaires, rapports ou contrôles spécifiques ne sont pas affectés.

    1. Cliquez sur le  bouton Microsoft Office  , puis sur  Options d'accès .

    2. Dans la   boîte de dialogue  Options d'accès , cliquez sur Base de données actuelle .

    3. Sous  Options du ruban et de la barre d'outils , dans la  zone Barre de menu contextuel  , tapez le nom de la macro que vous avez créée à l'étape 2 (dans cet exemple, « mcrAddShortcutMenu »).

  • Les menus contextuels personnalisés remplacent les menus contextuels par défaut pour les objets auxquels ils sont attachés. Si vous souhaitez conserver certaines commandes Access à utiliser dans ces menus, utilisez l'  action RunCommand  pour placer les commandes dans les groupes de macros des menus dans lesquels vous souhaitez les utiliser.

  • Un menu contextuel personnalisé attaché à un contrôle remplace tout autre menu contextuel personnalisé défini dans la base de données. Un menu contextuel personnalisé associé à un formulaire ou à un état remplace un menu contextuel global personnalisé.

  • Lorsque vous spécifiez une macro de menu pour un formulaire, un état ou pour la base de données, Access exécute cette macro de menu chaque fois que le formulaire, l'état ou la base de données est ouvert. Si vous apportez des modifications à la macro de menu ou au groupe de macros qui définit ses commandes alors que le formulaire, l'état ou la base de données est ouvert, vous devez fermer le formulaire, l'état ou la base de données et le rouvrir pour voir les modifications.

  • Pour créer un sous-menu, suivez l'étape 1 pour créer un groupe de macros distinct contenant uniquement les commandes du sous-menu. Ensuite, suivez à nouveau l'étape 1 pour définir les commandes du menu de niveau supérieur. Ajoutez le sous-menu en tant qu'élément dans le groupe de macros de niveau supérieur à l'aide de l'  action de macro AddMenu  . L'illustration suivante montre le groupe de macros d'un menu contenant un sous-menu, puis affiche le menu contextuel obtenu. La troisième ligne du groupe de macros crée le  sous-menu Exporter vers...  ( mcrSubMenu ).

    Un menu contextuel contenant un sous-menu

    Vous pouvez créer plusieurs niveaux de sous-menus en utilisant  les actions AddMenu  dans les groupes de macros pour chaque niveau de menu. Assurez-vous de fournir une valeur pour l'  argument Nom du menu  pour chaque  action AddMenu  , sinon le sous-menu apparaîtra sous la forme d'une ligne vide dans le menu de niveau supérieur.

  • Les conditions de macro sont prises en charge uniquement dans la macro du menu de niveau supérieur. En d’autres termes, vous pouvez utiliser une condition dans une macro de menu pour déterminer si un menu ou un menu contextuel particulier sera affiché, mais uniquement pour les menus du niveau supérieur. Vous ne pouvez pas utiliser de conditions pour afficher ou masquer des commandes ou des sous-menus dans les menus. Vous pouvez également utiliser une condition pour masquer ou afficher un menu contextuel personnalisé ou un menu contextuel global.

  • Facultativement, la macro de menu que vous créez à l'étape 2 peut faire partie d'un groupe de macros. Par exemple, si vous disposez de plusieurs menus contextuels pour différents objets ou contrôles, vous pouvez créer un seul objet macro contenant toutes les macros de menu nécessaires. Assurez-vous d'afficher la  colonne Nom de la macro  et de saisir un nom unique pour chaque macro. À l'étape 3, utilisez la notation suivante pour faire référence à la macro :  macrogroupname.macroname . Par exemple,  mcrAddShortcutMenus.AddMenu2 .


Feuille intelligente 9.1.1

Feuille intelligente 9.1.1

Smartsheet est une plateforme de travail dynamique qui vous permet de gérer des projets, de créer des flux de travail et de collaborer avec votre équipe.

SharePoint

SharePoint

SharePoint est un système de collaboration basé sur le Web qui utilise une variété d'applications de flux de travail, des bases de données de « liste » et d'autres composants Web, ainsi que des fonctionnalités de sécurité pour donner le contrôle aux groupes professionnels qui travaillent ensemble.

Calendrier perpétuel 1.0.38/1.0.36

Calendrier perpétuel 1.0.38/1.0.36

Van Nien Calendar est une application d'affichage de calendrier sur votre téléphone, vous aidant à voir rapidement la date luni-solaire sur votre téléphone, organisant ainsi votre travail important.

Microsoft Outlook 2021

Microsoft Outlook 2021

Microsoft Outlook est une application commerciale et de productivité développée par Microsoft Corporation.

Cliquez vers le haut

Cliquez vers le haut

ClickUp est l'une des plateformes de productivité les mieux notées pour toutes les entreprises. Les grandes entreprises comme Google, Booking.com, San Diego Padres et Uber utilisent toutes ClickUp pour augmenter la productivité sur le lieu de travail.

Visionneuse PDF-XChange 2.5.322.10

Visionneuse PDF-XChange 2.5.322.10

Le PDF est devenu un format couramment utilisé pour lire, créer et envoyer des documents texte. À son tour, le nombre de programmes utilisés pour ce type de documentation a augmenté. PDF-XChange Viewer fait partie d'un nombre croissant de visualiseurs PDF.

Apache OpenOffice

Apache OpenOffice

Apache OpenOffice propose une suite complète d'applications Office qui rivalisent avec Microsoft 365, notamment dans Excel, PowerPoint et Word. Il vous permet de gérer vos projets plus efficacement et prend en charge plusieurs formats de fichiers.

Télécharger iTaxviewer 1.8.7

Télécharger iTaxviewer 1.8.7

Le logiciel iTaxViewer est aujourd'hui le logiciel de lecture de fichiers XML le plus populaire. Ce logiciel est une application de lecture des déclarations fiscales électroniques au format XML de la Direction Générale des Impôts.

Lecteur PDF Nitro

Lecteur PDF Nitro

Nitro PDF Reader est un éditeur PDF pratique qui couvre toutes les tâches de base que la plupart des gens effectuent quotidiennement avec des documents PDF.

Lecteur Foxit 12

Lecteur Foxit 12

Foxit Reader est avant tout un lecteur PDF et vous permet également de créer des fichiers PDF, de les signer, de les modifier et d'ajouter des annotations. Il fonctionne sur les systèmes d'exploitation, il existe des plugins pour divers programmes du package Microsoft Office.