Les barres de commandes des compléments ne sont pas affichées ou supprimées dans Excel 2013 ou version ultérieure lorsque vous chargez ou déchargez les compléments

Symptômes

Lorsque vous utilisez des compléments dans Microsoft Excel 2013 ou une version ultérieure, vous rencontrez les problèmes suivants.

Problème 1

Lorsque vous chargez un complément Excel (xlam) ou un complément Excel 97-2003 (xla), les barres de commandes du complément ne s’affichent pas automatiquement. Au lieu de cela, vous devez fermer tous les classeurs, puis redémarrer Excel pour afficher les barres de commandes.

Problème 2

Lorsque vous déchargez un complément Excel (.xlam) ou un complément Excel 97-2003 (.xla) ou fermez un classeur avec macro Excel (.xlsm) qui contient des barres de commandes, les barres de commandes du complément ou du classeur prenant en charge les macros ne sont pas supprimées de tous les classeurs ouverts.

Cause

Ces problèmes se produisent en raison de l’interface SDI (Single Document Interface) dans Excel 2013 ou version ultérieure. Lorsque vous utilisez un objet CommandBar hérité pour créer des éléments de menu, les éléments de menu sont ajoutés à l’onglet Add-Ins du ruban. Dans Excel 2013 ou version ultérieure, chaque classeur a son propre ruban. Par conséquent, lorsque vous chargez ou déchargez des compléments après la création du ruban du classeur, le ruban n’est pas mis à jour.

L’exemple de code suivant crée des éléments de menu à l’aide de l’objet CommandBar :

Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:=msoControlPopup

Solution de contournement

Pour contourner le problème 1, fermez tous les classeurs ouverts, puis redémarrez Excel.

Pour contourner le problème 2, utilisez l’une des méthodes suivantes :

  • Remplacez les barres de commandes par un élément de ruban (XML) dans le complément ou le classeur prenant en charge les macros. Pour plus d’informations sur le ruban (XML), consultez Ribbon XML.

  • Dans le Workbook_BeforeClose’événement du complément ou du classeur prenant en charge les macros, effectuez une boucle dans toutes les fenêtres ouvertes et supprimez les barres de commandes. Voici un exemple de code :

    For Each wnd In Application.Windows
            wnd.Activate
            Application.CommandBars("<ToolbarName>").Delete
    Next wnd
    

Remarque

Dans ce code, l’espace réservé <ToolbarName> représente un nom de barre de commandes.