IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ajouter puis supprimer des menus personnalisés à la barre de menus d'excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 94
    Points : 116
    Points
    116
    Billets dans le blog
    1
    Par défaut Ajouter puis supprimer des menus personnalisés à la barre de menus d'excel
    Bonjour

    J'ai récemment été confronté à la modification d'un fichier excel qui "emmenait" avec lui des menus personnalisés. Au jour où j'écris ce topic mon problème n'a pas été résolu et j'ai donc recréé mon document afin d'y créer mes menus personnalisés par macro pour pouvoir les modifier ensuite.

    Voilà donc ma question, comment ajouter puis supprimer des menus personnalisés de la barre des menus d'excel par macro ?

    Voilà le code que je me suis bidouillé pour créer les menus et des éléments de menu dedans. Il génère 2 menus perso (menu 1 et menu 2) avec pour chacun d'eux 2 items qui déclencheront 1 macro chacun :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     Private Sub Workbook_Open()
        Dim CmdBar As CommandBar
        Dim Menu As CommandBarControl
        Dim Item As CommandBarControl
     
        'déclaration de la barre d'outils des menus excel
        Set CmdBar = Application.CommandBars("Worksheet Menu Bar")
     
     
        'Ajout du menu perso "menu 1"
        Set Menu = CmdBar.Controls.Add(Type:=msoControlPopup)
        With Menu
            .Caption = "Menu 1"
        End With
     
        Set Item = Menu.Controls.Add(Type:=msoControlButton, ID:=Menu.ID)
        With Item
            .Caption = "item 1"
            .OnAction = "macr01"
     
        End With
     
        Set Item = Menu.Controls.Add(Type:=msoControlButton, ID:=Menu.ID)
        With Item
            .Caption = "item 2"
            .OnAction = "macro2"
        End With
     
     
        'Ajout du menu "Menu 2"
        Set Menu = CmdBar.Controls.Add(Type:=msoControlPopup)
        With Menu
            .Caption = "Menu 2"
        End With
     
        Set Item = Menu.Controls.Add(Type:=msoControlButton, ID:=Menu.ID)
        With Item
            .Caption = "item 1 (du menu 2)"
            .OnAction = "macro3"
        End With
     
        Set Item = Menu.Controls.Add(Type:=msoControlButton, ID:=Menu.ID)
        With Item
            .Caption = "item 2 (du menu 2)"
            .OnAction = "macro4"
        End With
     
    End Sub
    Le problème c'est que si je ferme excel et que je l'ouvre à nouveau, je récupère ces menus alors qu'ils ne m'intéressent plus.
    Il faut donc que je puisse les supprimer lors de la fermeture du document excel. Mais là je sèche. Merci d'avance pour votre aide

    Nota : la solution pourra je pense figurer dans la FAQ qui m'a inspirée pour ce code : http://excel.developpez.com/faq/?page=BarreOutils

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 94
    Points : 116
    Points
    116
    Billets dans le blog
    1
    Par défaut
    oups...

    Je suis tombé sur la réponse... Un bel et bon exemple complet et très fonctionnel !

    http://vb.developpez.com/srcvba/?pag...face#vbaExMenu

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131
    Par défaut
    Bonjour

    On en sortira peut-être ...

    1. Je te suggère de créer tes menus dans une procédure à part de l'évènement Open et de l'appeler dans cet évènement. C'est plus propre et plus maintenable

    2. Dans la création de ton menu, pense à ajouter une propriété Tag à ton menu, c'est à mon sens plus facile de gérer la suite

    3. L'idée est de pouvoir cacher ou afficher le menu (Deactivate de la feuille ou activate de la feuille), et de le supprimer à la fermeture du fichier.

    Dans la même logique que le point 1, je propose des macros indépendantes, appelées lors de l'évènement ad hoc.

    Voici le code de création du menu avec la propriété Tag
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        'Ajout du menu perso "menu 1"
        Set Menu = CmdBar.Controls.Add(Type:=msoControlPopup)
        With Menu
            .Caption = "Menu 1"
            .Tag = "MonFichier"
        End With
    Voici les procédures de gestion du menu. Le principe est d'itérer sur les contrôles de la barre et d'agir lorsque le contrôle possède le tag voulu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Sub CacherMenu()
        Dim Menu As CommandBarControl
     
        For Each Menu In Application.CommandBars("Worksheet Menu Bar").Controls
            If Menu.Tag = "MonFichier" Then
                Menu.Visible = False
                Exit For
            End If
        Next Menu
    End Sub
     
    Sub AfficherMenu()
        Dim Menu As CommandBarControl
     
        For Each Menu In Application.CommandBars("Worksheet Menu Bar").Controls
            If Menu.Tag = "MonFichier" Then
                Menu.Visible = True
                Exit For
            End If
        Next Menu
    End Sub
     
    Sub SupprimerMenu()
        Dim Menu As CommandBarControl
     
        For Each Menu In Application.CommandBars("Worksheet Menu Bar").Controls
            If Menu.Tag = "MonFichier" Then
                Menu.Delete
                Exit For
            End If
        Next Menu
    End Sub
    Tu gères les procédures dans les évènements du classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub Workbook_Activate()
        AfficherMenu
    End Sub
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        SupprimerMenu
    End Sub
     
    Private Sub Workbook_Deactivate()
        CacherMenu
    End Sub
     
    Private Sub Workbook_Open()
        CreerMenu
    End Sub
    Ok?

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 94
    Points : 116
    Points
    116
    Billets dans le blog
    1
    Par défaut
    Salut et merci

    Je test ta solution aujourd'hui, elle me semble effectivement bien propre et je donnerais mes impressions.

    A bientôt

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Une réponse "à peu près" complète ici
    http://www.developpez.net/forums/sho...d.php?t=461562

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    En plus des contributions de mes collègues, un petit cours sur les barres de commandes :

    http://starec.developpez.com/tuto/barrecommande/ (Auto-pub )

    Bien que cela soit réalisé sous Access, les applications Office partagent la même bibliothèque.

    Starec

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Bonjour Starec, t'as pas fini d'envoyer les utilisateurs d'Excel sur le forum Access ?
    Ne t'inquiètes pas, quand il faut je les envoies sur Excel
    A moins que tu fasses un tuto sur les barres de commandes dans Excel, en plus de tes généreurses contributions.
    Dernière modification par Invité ; 07/04/2008 à 10h20.

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 94
    Points : 116
    Points
    116
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alexsolex Voir le message
    oups...

    Je suis tombé sur la réponse... Un bel et bon exemple complet et très fonctionnel !

    http://vb.developpez.com/srcvba/?pag...face#vbaExMenu
    Citation Envoyé par Pierre Fauconnier Voir le message
    Bonjour

    On en sortira peut-être ...

    1. Je te suggère de créer tes menus dans une procédure à part de l'évènement Open et de l'appeler dans cet évènement. C'est plus propre et plus maintenable
    [...]
    Ok?
    J'ai mis ton point 1 dans l'exemple que je mentionnais et qui me semble à peu de chose prêt, très semblable à ce que tu proposes. Vu que je n'ai guère de temps et que la solution recopiée de l'exemple me convient, je vais m'en tenir là et donc tagger comme 'résolu' le sujet.

    Je te remerci infiniment pour ton aide ici et dans l'autre sujet ( http://www.developpez.net/forums/sho...d.php?t=518479 ), merci également à tous les autres pour la richesse des exemples et cours fournis.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/01/2010, 19h32
  2. Ajouter/Modifier/Supprimer des elements d'une bdd
    Par Ramdoulou dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 31/03/2008, 18h39
  3. ajouter ou supprimer des composants Windows
    Par kovrov dans le forum Windows XP
    Réponses: 7
    Dernier message: 16/04/2007, 15h10
  4. [CSV] Ajouter et supprimer des ligne dans un fichier CSV
    Par gpsevasion dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 17h00
  5. Ajout de bouton de commandes dans la barre de menus
    Par vanessaf22 dans le forum IHM
    Réponses: 9
    Dernier message: 21/07/2003, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo