FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Les barres d'outils et les menus personnalisés- Ou trouver une description complète des fonctionnalités pour créer une barre de menus personnalisée par macro ?
 - Comment créer une barre d'outils personnelle par macro ?
 - Comment copier l'image d'un bouton ?
 - Comment afficher les menus dans leur intégralité ?
 - Comment ajouter la calculatrice Microsoft Windows dans un menu Excel ?
 - Comment savoir quel bouton d'une barre personnalisée a été cliqué ?
 - Comment ajouter une commande au menu contextuel des cellules ?
 - Comment réinitialiser le menu contextuel des cellules ?
 - Où sont passés mes menus et boutons personnalisés, dans Excel 2007 ?
 - Toutes les barres de menus ont disparu, comment les retrouver ?
 - Comment réafficher la barre de formule ?
 - Ou trouver la liste des faceID ?
 - Comment afficher un FaceID dans un contrôle Image d'un UserForm ?
 - Comment supprimer une ancienne barre d'outils personnelle qui continue d'apparaitre dans le classeur ?
 - Comment désactiver la barre d'outils 'EURO' sous Excel 2002 ?
 - Comment désactiver une transaction particulière dans le menu contextuel ?
 
4.1. Le ruban, la barre d'outils accès rapide et le bouton Office 2007
				(37)
			
Cet exemple est placé dans le module objet du classeur et utilise 
l'évènement Workbook_Open. 
De cette manière, la barre est créée automatiquement lors de l'ouverture du fichier.
Private Sub Workbook_Open()
    Dim CmdBar As CommandBar
    Dim Bouton As CommandBarButton
 
    'Création de la barre d'outils nommée 'MaBarrePerso'
    Set CmdBar = Application.CommandBars _
        .Add(Name:="MaBarrePerso", Position:=msoBarTop, Temporary:=True)
 
    'Ajout de 3 boutons dans la barre d'outils
    Set Bouton = CmdBar.Controls.Add(Type:=msoControlButton)
    With Bouton
        'Définit "l'image" qui va s'afficher sur le bouton
        .FaceId = 133
        'Définit quelle macro est associée au bouton.
        'Cette macro sera lancée à chaque fois que vous cliquez sur le bouton.
        .OnAction = "Macro1"
    End With
 
    Set Bouton = CmdBar.Controls.Add(Type:=msoControlButton)
    With Bouton
        .FaceId = 134
        .OnAction = "Macro2"
    End With
 
    Set Bouton = CmdBar.Controls.Add(Type:=msoControlButton)
    With Bouton
         .FaceId = 135
        .OnAction = "Macro3"
    End With
 
    CmdBar.Visible = True
End SubCe deuxième code utilise l'évènement Workbook_BeforeClose et supprime la barre personnelle lors de la fermeture du classeur.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Application.CommandBars("MaBarrePerso").Delete
End SubRappel :
Dans Excel 2007, les menus et barres d'outils personnels sont stockés dans l'onglet "Complément".
Effectuez un clic droit sur les barres d'outils.
Sélectionnez l'option Personnaliser dans le menu contextuel.
La boîte de dialogue "Personnalisation" s'affiche à l'écran.
Refaites un clic droit dans les barres d'outils, sur le bouton dont vous souhaitez copier l'image.
Sélectionnez l'option "Copier l'image du bouton".
Vous pouvez ensuite effectuer un collage de l'image sur un autre bouton en sélectionnant l'option "Coller l'image du bouton".
Pour coller l'image dans la feuille de calcul, fermez la boîte de dialogue "Personnalisation", sélectionnez une cellule puis effectuez le collage (Ctrl+V).
Dans Excel 2002, par défaut seuls les derniers éléments récemment utilisés s'affichent lorsque vous cliquez sur un menu.
Pour afficher tous les éléments des menus :
Effectuez un clic droit sur la barre de menus.
Sélectionnez l'option Personnaliser.
Cliquez sur l'onglet Options.
Cochez la case Toujours afficher les menus dans leur intégralité.
Cliquez sur le bouton Fermer pour valider.
Effectuez un clic droit sur la barre de menus.
Sélectionnez l'option Personnaliser.
Sélectionnez l'onglet Commandes dans la boîte de dialogue Personnalisation.
Choisissez Outils dans la liste des catégories.
Sélectionnez Personnaliser (avec l'icône de la calculatrice sur la gauche) dans la liste des commandes.
Gardez le bouton gauche de la souris enfoncé et faites glisser la calculatrice jusqu'à l'emplacement de votre choix dans 
la barre de menus.
Pendant que la boîte de dialogue Personnalisation est affichée, vous pouvez modifier le nom attribué en faisant un clic droit sur le bouton qui vient d'être ajouté.
Il est possible de récupérer l'information en utilisant la propriété ActionControl :
Placez ces trois procédures dans un module standard. La première macro crée une barre d'outils personnalisée. La deuxième 
macro est appelée lorsque vous cliquez sur un des boutons dans la barre d'outils. La troisième 
permet de supprimer la barre d'outils. 
Sub CreationBarre()
    Dim cbBarre As CommandBar
    Dim CB_B1 As CommandBarButton, CB_B2 As CommandBarButton
    Dim CB_B3 As CommandBarButton
 
    Set cbBarre = CommandBars _
        .Add(Name:="Ma barre perso", Position:=msoBarTop, Temporary:=True)
 
    Set CB_B1 = cbBarre.Controls.Add(Type:=msoControlButton)
    With CB_B1
        .FaceId = 353
        .Tag = "Premier bouton"
        .OnAction = "TestMacro"
    End With
 
    Set CB_B2 = cbBarre.Controls.Add(Type:=msoControlButton)
    With CB_B2
        .FaceId = 351
        .Tag = "Deuxième bouton"
        .OnAction = "TestMacro"
    End With
 
    Set CB_B3 = cbBarre.Controls.Add(Type:=msoControlButton)
    With CB_B3
        .FaceId = 352
        .Tag = "Troisième bouton"
        .OnAction = "TestMacro"
    End With
 
    cbBarre.Visible = True
End Sub
 
 
Sub TestMacro()
    MsgBox CommandBars.ActionControl.Tag
End Sub
 
 
Sub SuppressionBarre()
    On Error Resume Next
    CommandBars("Ma barre perso").Delete
End Sub
Pour ajouter une commande au menu contextuel (apparaissant sur click droit) d'une cellule, il suffit d'ajouter une 
entrée à la CommandeBar "Cell" (menu contextuel cellule feuille de calcul). 
' Rajout d'une entrée dans menu contextuel
'
Function MenuCell(stCde As String, stMess As String)
    Dim Mc As CommandBarControls
    Dim Bo As CommandBarButton
 
    Set Mc = CommandBars("Cell").Controls
    Set Bo = Mc.Add(msoControlButton, Temporary:=True)
    Bo.Caption = stMess
    Bo.OnAction = stCde
End Function
Exemple d'utilisation : 
Ajout d'une entrée Ajouter Prefixe, permettant, sur click droit sur une cellule, de remplacer la valeur de chaque cellule 
sélectionnée par la valeur courante précédée d'une chaine de caractére saisie dans une inputBox. 
'Initialisation dans l'évènement Workbook_open
'
Private Sub Workbook_Open()
    MenuCell "AjoutePrefixe", "Ajouter Prefixe"
End Sub' Fonction exemple..
'
Sub AjoutePrefixe()
    Dim Pre As String
    Dim s As Range, c As Object
 
   Pre = InputBox("prefixe")
       Set s = Selection
       For Each c In s
          c.Value = Pre & c.Value
       Next
End Sub
Le menu contextuel des cellules apparait lorsque vous faites un clic droit dans la feuille de calcul.
Celui ci peut être paramétré afin d'ajouter ou supprimer des transactions personnalisées.
La macro suivante permet de la réinitialiser le menu contextuel :
Application.CommandBars("cell").ResetVous pouvez atteindre les menus et boutons personnalisés en ouvrant l'onglet Complément dans le ruban.
Cette péripétie arrive parfois lorsque vous recevez des classeurs contenant des macros qui manipulent les barres d'outils et les barres de menus. Si la procédure n'est pas totalement maîtrisée, les menus ne sont pas correctement réinitialisés lors de la fermeture du classeur.
Utilisez ces macros, si vous pouvez encore accéder à l'éditeur de macros (Alt+F11):
Application.CommandBars("Worksheet Menu Bar").Enabled = True
et
Dim Cb As CommandBar
 
For Each Cb In Application.CommandBars
    If Cb.BuiltIn = True Then
        Cb.Enabled = True
    End If
NextDernier recours, recherchez les fichiers portant l'extension .xlb sur votre PC.
Ces fichiers servent à stocker les paramètres de la barre d'outils et sont généralement enregistrés à cet emplacement :
C:\Documents and Settings\Nom Utilisateur\ApplicationData\Microsoft\Excel\Excel10.xlb
Dans cet exemple, Excel10.xlb correspond à la version 2002 d'Excel.
Assurez vous qu'Excel est bien fermé.
Supprimez ces fichiers .xlb (c'est sans risque) ou sinon renommez les (par exemple: Excel10.xlb.old).
Redémarrez Excel. 
L'application affichera les barres d'outils par défaut.
Nota :
Règle générale: Quand vous recevez un classeur dont vous ne connaissez l'origine, ayez le réflexe de désactiver 
les macros lors de la première ouverture. Ensuite vérifiez que les procédures contenues dans le fichier ne risquent 
de provoquer des actions indésirables sur votre PC. S'il n'y a pas de problème, refermez le classeur puis ré-ouvrez 
le en activant les macros.
Si votre barre de formule a disparu :
Utilisez le menu Outils
Options
Onglet Affichage
Cochez l'option "Barre des formules"
Cliquez sur le bouton OK pour valider.
Sous Excel 2007 :
Cliquez sur le bouton Office
Cliquez sur le bouton "Options Excel"
Sélectionnez le menu "Options avancées"
Dans le groupe "Afficher", cochez l'option "Afficher la barre de formule"
Cliquez sur le bouton OK pour valider.
Les FaceID sont les petites icônes intégrées à MS Office, permettant de personnaliser les boutons des barres de menus.
Sub Liste_FaceIDs()
    Dim tBar As CommandBar
    Dim i As Long
 
    'Supprime la barre d'outils temporaire si elle existe.
    On Error Resume Next
    Application.CommandBars("BarreTemp").Delete
    On Error GoTo 0
 
    'Supprime le contenu de la feuille
    Worksheets("Feuil1").Pictures.Delete
    Worksheets("Feuil1").Cells.ClearContents
    Application.ScreenUpdating = False
 
    'Création barre d'outils
    Set tBar = Application.CommandBars.Add(Name:="BarreTemp")
 
    For i = 1 To 1870
        On Error Resume Next
        'Supprime le bouton précédent
        tBar.Controls(1).Delete
        On Error GoTo 0
 
        'Crée un nouveau bouton dans la barre d'outils
        With tBar.Controls.Add(Type:=msoControlButton)
            'Ajoute un FaceID
            .FaceId = i
            'Copie le FaceID
            .CopyFace
        End With
 
        'Effectue le collage dans la feuille
        Worksheets("Feuil1").Paste
 
        'Repositionne et nomme la nouvelle forme collée
        With Worksheets("Feuil1").Shapes(i)
            .Top = Cells(i, 1).Top
            .Left = 15
            .Name = "ID_" & i
        End With
 
    Next i
 
    'Supprime la barre d'outils temporaire
    Application.CommandBars("BarreTemp").Delete
    Application.ScreenUpdating = True
 
    MsgBox "Terminé."
End SubVous pouvez également visualiser l'ensemble des icônes dans le tutoriel de Fred Thomas :
Vous pouvez utiliser les FaceId comme image dans vos UserForm. L'avantage réside dans le stockage de ces 
icônes dans l'application et ne nécessite donc pas de gestion particulière des images lorsque vous transférez 
le classeur sur d'autres postes utilisateurs.
L'inconvénient : une dimension trop importante du conteneur (un contrôle Image par exemple) nuit à la qualité d'affichage.
La procédure suivante affiche un FaceID dans un contrôle Image, nommé Image1.
Private Sub UserForm_Initialize()
    Dim Cmb As CommandBarControl
    Dim cBar As CommandBar
 
    Set cBar = CommandBars.Add(Position:=msoBarFloating, MenuBar:=False, Temporary:=True)
    Set Cmb = cBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
 
    '964 = point d'exclamation
    Cmb.FaceId = 964
 
    Image1.PictureSizeMode = fmPictureSizeModeStretch
    Image1.Picture = Cmb.Picture
 
    cBar.Delete
End SubFaites un clic droit sur le menu en question et sélectionnez l'option "Supprimer la commande personnalisée".
Utilisez le menu Outils,
Macros complémentaire 
Décochez l'option "Outils pour l'Euro"
Cliquez sur le bouton OK pour valider
Le menu contextuel correspond à la liste de fonctions qui s'affiche lorsque vous effectuez un clic droit dans une cellule.
Vous pouvez désactiver un ou plusieurs éléments en spécifiant son ID
La liste des Ids du menu contextuel
Couper : 21
 
Copier : 19 
Coller : 22 
Collage spécial : 755 
Insérer : 3181 
Supprimer : 292 
Effacer le contenu  :   3125 
Insérer un commentaire : 2031 
Effacer le commentaire : 1592
 
Afficher le commentaire : 1593 
Format de cellule : 855 
Liste de choix : 1966 
Ajouter un espion : 5685 
Lien hypertexte : 1576 
Modifier le lien hypertexte : 1577 
Ouvrir le lien hypertexte : 1015 
Supprimer le lien hypertexte : 3626
Un exemple pour griser le bouton Format de cellule du menu contextuel :
Sub Desactiver() 
    With Application.CommandBars("Cell") 
        Set Ctrl = .FindControl(ID:=855) 
        Ctrl.Enabled = False 
        Set Ctrl = Nothing 
    End With 
End SubEt pour le réactiver :
Sub reactiver() 
    With CommandBars("Cell") 
        Set Ctrl = .FindControl(ID:=855) 
        Ctrl.Enabled = True 
        Set Ctrl = Nothing 
    End With 
End Sub


