Microsoft 365 Création d'une barre personnalisée dans Excel

doudel

XLDnaute Nouveau
Bonjour,
Je me surnomme Doudel et je suis nouveau sur ce forum et de manière générale un peu néophyte sur les forums. Je suis autodidacte, comme beaucoup, et je trouve mon inspiration sur les forums et les cours, de préférence en vidéo :)

Aujourd'hui je fais appelle à vous car je suis bloqué depuis quelque temps. Je tente de créer une barre de menu personnalisée sur Excel. Elle doit me permettre de lancer des macros. Sur le fond cela fonctionne mais sur la forme c'est plus compliqué.
Je souhaiterais savoir comment mettre les différents boutons les uns sous les autres et je souhaiterai également savoir s'il est possible de reproduire ce genre de contrôle mais du coup les uns à côté des autres :

1669624253820.png

Actuellement j'obtiens ceci :

1669624350845.png


VB:
Sub CommandBarreCréerAvecBoutonEtMenu()
Dim LaBarre As CommandBar
Dim LeBouton
Dim MonMenu
 

    
    Set LaBarre = Application.CommandBars.Add
    With LaBarre
    .Name = "Barredonnée"
    .Position = msoBarFloating
 
  
    Set MonControl = CommandBars("Barredonnée").Controls _
        .Add(Type:=msoControlButton, ID:=280)
        With MonControl
            .Style = msoButtonIconAndCaption
            .Caption = "Ajouter une donnée"
            .OnAction = "Macro1"
        End With
    
          
    Set MonControl = CommandBars("Barredonnée").Controls _
        .Add(Type:=msoControlButton, ID:=280)
        With MonControl
            .Style = msoButtonIconAndCaption
            .Caption = "Modifier une donnée"
            .OnAction = "Macro2"
        End With
  
  
    Application.CommandBars("Barredonnée").Visible = True
End With
End Sub

Merci
 

Pièces jointes

  • 1669623765534.png
    1669623765534.png
    1.2 KB · Affichages: 21
Solution
A priori je suis obligé de passer par un logiciel tiers et par un fichier annexe. il s'agit d'un fichier qui doit être utilisé par d'autres personnes. Doivent-elles avoir accès au fichier de configuration de la barre personnalisée ou peut-on l'inclure dans le fichier transmis aux utilisateurs ?
Bonjour,
Une fois que vous aurez téléchargé gratuitement l'outil Custom UI Editor for Microsoft Office, vous pourrez créer des barres d'outils qui seront intégrées à vos fichiers Office, les utilisateurs verront ces barres et pourront les utiliser sans avoir elles-mêmes l'outil, qui ne sert qu' à la création des barres.

doudel

XLDnaute Nouveau
A priori je suis obligé de passer par un logiciel tiers et par un fichier annexe. il s'agit d'un fichier qui doit être utilisé par d'autres personnes. Doivent-elles avoir accès au fichier de configuration de la barre personnalisée ou peut-on l'inclure dans le fichier transmis aux utilisateurs ?
 

Gégé-45550

XLDnaute Accro
A priori je suis obligé de passer par un logiciel tiers et par un fichier annexe. il s'agit d'un fichier qui doit être utilisé par d'autres personnes. Doivent-elles avoir accès au fichier de configuration de la barre personnalisée ou peut-on l'inclure dans le fichier transmis aux utilisateurs ?
Bonjour,
Une fois que vous aurez téléchargé gratuitement l'outil Custom UI Editor for Microsoft Office, vous pourrez créer des barres d'outils qui seront intégrées à vos fichiers Office, les utilisateurs verront ces barres et pourront les utiliser sans avoir elles-mêmes l'outil, qui ne sert qu' à la création des barres.
 

patricktoulon

XLDnaute Barbatruc
re
bonjour
oui avec commandbars on ne peut qu'avoir des petit boutons
pour les mettres en dessous l'un de l'autre ,il faut construire 2/ commandbars
ci joint un exemple avec les 3 boutons en dessous l'un de l'autre et un menu

NE PAS OUBLIER DE LANCER DELETEBAR A LA FERMETURE DU CLASSEUR

VB:
Sub CommandBarreCréerAvecBoutonEtMenu()
    Dim LaBarre As CommandBar
    Dim Moncontrol As Object
    Dim lignebar(1 To 3) As CommandBar

    deleteBars

    'on créée 3 barres
    Set lignebar(1) = Application.CommandBars.Add
    Set lignebar(2) = Application.CommandBars.Add
    Set lignebar(3) = Application.CommandBars.Add


    With lignebar(1)
        .Name = "Barredonnée1"
        Set Moncontrol = .Controls.Add(msoControlButton, , , , True)
        With Moncontrol
            .Style = msoButtonIconAndCaption
            .Caption = "Ajouter une donnée"
            .OnAction = "Macro1"
            .FaceId = 989
        End With

        Set Moncontrol = .Controls.Add(msoControlPopup, , , , True)
        With Moncontrol
            .Caption = "menu Format de donnée"

            For i = 1 To 5
                Set itemmenu = .Controls.Add(msoControlButton, , , , True)
                With itemmenu
                    .Style = msoButtonIconAndCaption
                    .Caption = "format" & i
                    .OnAction = "Macro1"
                    .FaceId = 989
                End With
            Next

        End With



        .Visible = True
    End With

    With lignebar(2)
        .Name = "Barredonnée2"
        Set Moncontrol = .Controls.Add(msoControlButton, , , , True)
        With Moncontrol
            .Style = msoButtonIconAndCaption
            .Caption = "Modifier une donnée"
            .OnAction = "Macro2"
            .FaceId = 989
        End With
        .Visible = True
    End With

    With lignebar(3)
        .Name = "Barredonnée3"
        Set Moncontrol = .Controls.Add(msoControlButton, , , , True)
        With Moncontrol
            .Style = msoButtonIconAndCaption
            .Caption = "Supprimer une donnée"
            .OnAction = "Macro2"
            .FaceId = 989
        End With
        .Visible = True
    End With
End Sub

Sub deleteBars()
    Dim i&
    For i = 1 To 3
        On Error Resume Next
        CommandBars("Barredonnée" & i).Delete
    Next
End Sub
ça donne ça
demo.gif
 

doudel

XLDnaute Nouveau
Bonjour,
Une fois que vous aurez téléchargé gratuitement l'outil Custom UI Editor for Microsoft Office, vous pourrez créer des barres d'outils qui seront intégrées à vos fichiers Office, les utilisateurs verront ces barres et pourront les utiliser sans avoir elles-mêmes l'outil, qui ne sert qu' à la création des barres.
Bonjour,
Celle solution fonctionne pour moi et me permet de créer de belles barres. Merci également à patricktoulon pour son aide.
A bientôt
 

laurent950

XLDnaute Barbatruc
Bonjour @patricktoulon,

C'est possible d'avoir un menu perso qui ne soit pas inclus dans complément ?
Je suis arrivé à mette les icônes à côté et pas en dessous.
A suivre pour finir le développement.
Si tu as la réponse a la question du menu placé en dehors de complément merci.

VB:
Private Sub Workbook_Open()
' Déclaration des variables
  Dim Cbar As CommandBar
  Dim Cbut As CommandBarButton
  Dim Cpop1 As CommandBarPopup

' Création de la barre de menus
    Set Cbar = Application.CommandBars.Add(Name:="MaBarre", Position:=msoBarTop, Temporary:=True)
        Cbar.Protection = msoBarNoMove + msoBarNoCustomize '<-- protection de la barre de menus'insertion sur la barre de menus d'un bouton de commande

' Insertion sur la barre de menus "Shapes"
    Set Cpop1 = Cbar.Controls.Add(msoControlPopup)
        With Cpop1
            .Caption = "Shapes" '<-- label du menu
            .Tag = "smShps" '<-- étiquette
        End With

' Insertion dans le sous-menu (Des Différentes Méthodes des traitements des Shapes)
    Set Cpop1 = Cpop1.Controls.Add(msoControlPopup)
        With Cpop1
            .Caption = "LesMethodes" '<-- label du sous-menu
            .Tag = "smShps1" '<-- étiquette
            .BeginGroup = True '<-- barre de séparation
        End With

' Insertion dans les sous-sous-menu  (Méthodes 1 traitement des Shapes)
    Set Cbut = Cpop1.Controls.Add(Type:=msoControlButton, ID:=165)
        With Cbut
            .Style = msoButtonIconAndCaption '<-- bouton avec icône + texte
            .Caption = "GrouperShapes" '<-- label du bouton
            .OnAction = "Ecrire ici le nom du module vba" '<-- procédure à exécuter
        End With

' Affichage de la barre de menus
        Cbar.Visible = True

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Destruction de cette barre à la fermeture du Classeur Excel au moyen de cette Macro.
    On Error Resume Next
        Application.CommandBars("MaBarre").Delete
    On Error GoTo 0
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonjour Laurent
C'est possible d'avoir un menu perso qui ne soit pas inclus dans complément ?
la réponse est simple c'est NON 😭
pour la simple raison que la manipulation de application.commandbar et tout ces controls et toutes les fonctions possibles fonctionne en rétrocompatibilité depuis office 2007

donc tout commandbar ajoutée va dans un onglet nommée "complément"
 

laurent950

XLDnaute Barbatruc
Bonsoir @patricktoulon

Je te remercie pour cette information, dont il n'est pas possible de créer un menu autrement que depuis complément, je te remercie encore pour m'avoir confirmé cela Patrick.

Je viens tous juste de rentrer, beaucoup de monde sur les routes.

Pour te détailler la commande de ce menu dont j'avais envie d'associer ce bout de code.

Accueil :
---->> édition
------->>Rechercher et sélectionner :
---------->> Atteindre
------------->> Cellules
---------------->> Objects
Cela me sélectionne tous les Shapes d'une feuille

Alors j'ai créer un code qui :
depuis une InputBox, avec choix d'une zone à l'écran ou sont les Shapes qui doivent être grouper = tous les Shapes à l'intérieur de cette plage seront grouper.

VB:
Sub A0_GouperShapes()
' Selection a l'écran des Shapes devant être regroupé dans l'emprise d'uneplage
'
Dim Forme As Shape
Dim LesFormes As ShapeRange
Dim ListeForme() As Variant
    ReDim ListeForme(0)
Dim ma_selection As Range
    Set ma_selection = Application.InputBox("choissiez une cellule ou une plage", Type:=8)
Dim ws As Worksheet
    Set ws = Worksheets(ma_selection.Parent.Name)
Dim PlageForme As Range
'
    On Error GoTo errorHandler
    For Each Forme In ws.Shapes
        Set PlageForme = Range(Forme.TopLeftCell.Address, Forme.BottomRightCell.Address)
            If Not Intersect(ma_selection, PlageForme) Is Nothing Then
                ListeForme(UBound(ListeForme)) = Forme.Name
                ReDim Preserve ListeForme(UBound(ListeForme) + 1)
            End If
    Next Forme
' Suppimé la derniére dimension qui est vide
    ReDim Preserve ListeForme(UBound(ListeForme) - 1)
' Création des Groupes pour les Formes (De la Plage de sélèction)
    ws.Shapes.Range(ListeForme).Group.Select
' Créer une variable pour les formes groupé
    Set LesFormes = Selection.ShapeRange
' Créer un nom a se groupe
    LesFormes.Name = "Image - " & Split(LesFormes.Name, " ")(1)
'
'   Permet de sortir de la procédure et évite la gestion d'erreur (errorHandler), si la macro
'   s'est déroulée sans encombre.
        Exit Sub
'
errorHandler:
'indique le numéro et la description de l'erreur survenue
    'MsgBox Err.Number & vbLf & Err.Description
    MsgBox "Aucune Shapes dans la zone de selection Ou Une seule Shapes Sélectionné."
End Sub

Puis je me suis dit que construire un menu personnalisé serait bien.

Je veux bien ton astuce si tu es d'accord
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 183
Membres
112 677
dernier inscrit
Justine11