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 un bouton au menu standard avec une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Points : 71
    Points
    71
    Par défaut Ajouter un bouton au menu standard avec une macro
    Bonjour,
    J'ai trouvé beaucoup d'articles décrivant comment ajouter un bouton en utilisant Barre d'outils > Personnaliser >...
    Ou comment créer un bouton lançant une macro dans la feuille XL.

    Mais je cherchre à mettre un bouton qui exécute une macro dans le menu standard "Insertion".

    Comment dois je faire ?

    Je vous remercie.

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, voir ici ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Points : 71
    Points
    71
    Par défaut
    Merci. J'ai bien été voir ce tutoriel avant de poster cette discussion sur le forum mais je ne souhaite qu'ajouter un bonton au menu "Insertion" classique

    J'imagine utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CommandBars("MaBarre").Controls.Add(msoControlButton)
    Mais comment trouver le nom de "MaBarre" ? Elle s'appelle "Insert" ?

    Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Points : 437
    Points
    437
    Par défaut
    Bonjour,

    Dans un module normal

    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
    Option Explicit
     
    Sub créationMenu()
    Dim menuOutils As CommandBarControl, monMenu As CommandBarControl
     
    supprimeMenu
    Set menuOutils = Application.CommandBars.FindControl(, 30005)
     
    If menuOutils Is Nothing Then Exit Sub
     
    Set monMenu = menuOutils.Controls.Add(msoControlButton, 1, , , True)
     
        With monMenu
            .Caption = "Ma Macro"
            .Tag = "menuAjoute"
            .OnAction = ThisWorkbook.Name & "!sc"
            .FaceId = 3360
            .Style = msoButtonIconAndCaption
        End With
     
     
    End Sub
     
    Sub supprimeMenu()
        On Error Resume Next
        Application.CommandBars.FindControl(Tag:="menuAjoute").Delete
    End Sub
    Sub sc()
        MsgBox "Bonjour"
    End Sub
    Dans le module ThisWorkBook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        supprimeMenu
    End Sub
     
    Private Sub Workbook_Open()
        créationMenu
    End Sub
    On ajoute un bouton en bas du menu Insertion, ce bouton fait fonctionner la macro appelée sc

    Est ce ce que vous voulez?

    JP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Points : 71
    Points
    71
    Par défaut Parfait !!
    Si en action je passe ta macro sc.

    Par contre si je souhaite passer ma macro qui passe en paramètre objWorkbook as Workbook ça ne fonctionne pas je ne cormprends pas pourquoi.

    Tu l'auras remarqué je suis novice en matière de programmation vba

    Merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Points : 437
    Points
    437
    Par défaut
    Bonjour,

    Plus de détails seraient bien venus ou savoir ce que vous voulez exactement, joindre la macro à appeler

    JP

  7. #7
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Un exemple ICI pour passer des paramètres avec OnAction

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Points : 71
    Points
    71
    Par défaut
    Je souhaite passer l'objet Workbook
    Ma macro met à jour l'entête de page des feuilles du document EXCEL.

    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
    Public Sub subEventbeforeFooter(objWorkbook As Workbook)
     
        Dim strHeaderText As String
        Dim strOrigine As String
        Dim objWorksheet As Worksheet
     
        Application.StatusBar = "Mise à jour des entêtes en cours..."
     
     
        For Each objWorksheet In objWorkbook.Worksheets
     
                strHeaderText = Left("référence", 30)
                objWorksheet.PageSetup.LeftHeader = strHeaderText
     
                strHeaderText = Left("titre", 210)
                objWorksheet.PageSetup.CenterHeader = strHeaderText
     
                strHeaderText = Left("version", 10)
                objWorksheet.PageSetup.RightHeader = strHeaderText
     
            Next objWorksheet
        End If
     
        Application.StatusBar = ""
        Application.EnableCancelKey = xlDisabled
     
     
    End Sub
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OnAction = "!subEventbeforeFooter" & Workbooks
    Mais il me répond qu' il ne connait pas ma fonction

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Points : 437
    Points
    437
    Par défaut
    Bonjour,

    Si j'ai bien compris il s'agit à partir d'un certain classeur de réaliser la mise en page sur un autre classeur

    Dans le module ThisworkBook rien de changé

    Dans le module standard

    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
    49
    50
    51
    52
    53
    54
    55
    56
    Option Explicit
     
    Sub créationMenu()
    Dim menuOutils As CommandBarControl, monMenu As CommandBarControl
    Dim objWorkbook As String
     
    supprimeMenu
     
    Set menuOutils = Application.CommandBars.FindControl(, 30005)
     
    If menuOutils Is Nothing Then Exit Sub
     
    Set monMenu = menuOutils.Controls.Add(msoControlButton, 1, , , True)
     
    objWorkbook = "classeur_Exemple.xls"
     
        With monMenu
            .Caption = "Ma Macro"
            .Tag = "menuAjoute"
            .OnAction = "'subEventbeforeFooter """ & objWorkbook & """'"
            .FaceId = 3360
            .Style = msoButtonIconAndCaption
        End With
     
     
    End Sub
     
    Sub supprimeMenu()
        On Error Resume Next
        Application.CommandBars.FindControl(Tag:="menuAjoute").Delete
    End Sub
     
    Public Sub subEventbeforeFooter(objWorkbook As String)
        Dim strHeaderText As String
        Dim strOrigine As String
        Dim objWorksheet As Worksheet
     
        Application.StatusBar = "Mise à jour des entêtes en cours..."
     
        For Each objWorksheet In Workbooks(objWorkbook).Worksheets
     
                strHeaderText = Left("référence", 30)
                objWorksheet.PageSetup.LeftHeader = strHeaderText
     
                strHeaderText = Left("titre", 210)
                objWorksheet.PageSetup.CenterHeader = strHeaderText
     
                strHeaderText = Left("version", 10)
                objWorksheet.PageSetup.RightHeader = strHeaderText
     
            Next objWorksheet
        'End If
        Application.StatusBar = ""
        Application.EnableCancelKey = xlDisabled
     
    End Sub
    Cette façon de faire est trop restrictive car on ne peut faire la mise en page que sur le classeur dont le nom est passé en argument à la macro subEventbeforeFooter. Ce nom étant défini dans la macro créationMenu on ne peut pas revenir en arrière chaque fois. Je pense qu'il serait plus intéressant de récupérer le nom du classeur à mettre en page directement dans la macro subEventbeforeFooter par l'intermédiaire d'un inputBox ou autre. Peut être même passer par le classeur de macros perso pour que cela fonctionne sur tous les classeurs.

    JP

Discussions similaires

  1. [OL-2007] Disparition d'un menu crée avec une macro lors de la fermeture
    Par totojordi dans le forum Outlook
    Réponses: 0
    Dernier message: 20/12/2010, 14h25
  2. menu horizontal avec une phrase en dropdown pour chaque rubrique
    Par hayalou dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 23/11/2010, 13h13
  3. Ajouter un indice sur un submit avec une image
    Par pasc06 dans le forum Langage
    Réponses: 3
    Dernier message: 21/01/2009, 14h32
  4. créer dans excel un bouton avec une macro personnalisée
    Par deubelte dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/11/2008, 16h01
  5. Réponses: 1
    Dernier message: 11/04/2007, 12h16

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