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 :

Erreur 400, lancement de macro depuis menu contextuel [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Points : 1 014
    Points
    1 014
    Par défaut
    Bonjour le forum,


    J'ai un petit souci. Je travaille avec une listview dans un formulaire (jusque là rien de bien foufou). J'ai besoin de creer un menu contextuel de type popup lors du click droit dans cet listView.
    en cherchant un peu j'ai trouvé ceci, à partir de quoi je vais faire mes test pour concevoir mon menu.

    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
    Private Sub lstv_Cahier_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
        If Button = 2 Then Call MenuClickDroit
    End Sub
     
    Private Sub MenuClickDroit()
        Dim CB As CommandBar
        Dim C As CommandBarButton
     
     
        CommandBars("MonContextuel").Delete
     
        Set CB = CommandBars.Add(Name:="MonContextuel", Position:=msoBarPopup, temporary:=True)
        With CB
            Set C = .Controls.Add(Type:=msoControlButton)
            With C
                .OnAction = "affichetoto"
                .FaceId = 2
                .Caption = "toto"
            End With
            Set C = .Controls.Add(Type:=msoControlButton)
            With C
                .OnAction = "affichezaza"
                .FaceId = 3
                .Caption = "zaza"
            End With
                .ShowPopup
        End With
     
    End Sub
     
    Sub affichetoto()
    MsgBox "C'est Toto"
    End Sub
     
    Sub affichezaza()
    MsgBox "Je m'appelle Zaza"
    End Sub
    Une fois dans mon formulaire, je réalise mon click droit et le menu s'affiche bien. Mais quand le click sur un choix, rien ne se passe. et si je click sur un deuxième choix par la suite, je me retrouve avec l'erreur 400 (Je ne sais pas ce qu'elle signifie). Quelqu'un aurait l'amabilité de me venir en aide ?

    Je n'ai pas précisé, je suis sous excel 2010. (je sais pas si ça change quelque chose mais dans le doute)

    J'ai éxécuté le programme en pas à pas, et tout fonctionne jusqu'à la ligne ".ShowPopup" . là il attend que je clique sur un bouton du menu, et lorsque c'est fait, il quitte la procédure MenuClickDroit.
    "On sera toujours mieux installé assis en 1ère que debout en 2nde", un illustre inconnu


    Avant de poser une question vérifiez si elle n'a pas déjà une réponse dans les cours et tutoriels
    Si votre problème est pensez à marquer la conversation comme telle
    Si un message est utile, pertinent, et/ou vous êtes d'accord avec, pensez à à l'inverse s'il est inutile, faux ou que vous n'êtes pas d'accord, pensez à

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Essaie comme ceci

    Dans le code du UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub lstv_Cahier_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
        If Button = 2 Then
            AfficherPopUpMenu
        End If
    End Sub
     
    Private Sub UserForm_Terminate()
        DeletePopUpMenu
    End Sub
    Dans un 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
    Sub DeletePopUpMenu()
        On Error Resume Next
        Application.CommandBars("MonContextuel").Delete
        On Error GoTo 0
    End Sub
     
    Sub AfficherPopUpMenu()
        ' Delete any existing popup menu.
        Call DeletePopUpMenu
     
        ' Create the popup menu.
        Call MenuClickDroit
     
        ' Display the popup menu.
        On Error Resume Next
        Application.CommandBars("MonContextuel").ShowPopup
        On Error GoTo 0
    End Sub
     
    Sub MenuClickDroit()
     
        ' Add the popup menu.
        With Application.CommandBars.Add(Name:="MonContextuel", Position:=msoBarPopup, _
             MenuBar:=False, Temporary:=True)
     
            ' First, add two buttons to the menu.
            With .Controls.Add(Type:=msoControlButton)
                .Caption = "toto"
                .FaceId = 2
                .OnAction = "affichetoto"
            End With
     
            With .Controls.Add(Type:=msoControlButton)
                .Caption = "zaza"
                .FaceId = 3
                .OnAction = "affichezaza"
            End With
     
        End With
    End Sub
     
    Sub affichetoto()
    MsgBox "C'est Toto"
    End Sub
     
    Sub affichezaza()
    MsgBox "Je m'appelle Zaza"
    End Sub
    MPi²

  3. #3
    Membre éprouvé Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Points : 1 014
    Points
    1 014
    Par défaut
    Parfait c'est exactement ce qu'il me fallait

    merci
    "On sera toujours mieux installé assis en 1ère que debout en 2nde", un illustre inconnu


    Avant de poser une question vérifiez si elle n'a pas déjà une réponse dans les cours et tutoriels
    Si votre problème est pensez à marquer la conversation comme telle
    Si un message est utile, pertinent, et/ou vous êtes d'accord avec, pensez à à l'inverse s'il est inutile, faux ou que vous n'êtes pas d'accord, pensez à

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

Discussions similaires

  1. [XL-2003] Message d'erreur lors de l'exécution d'une macro. depuis un menu contextuel
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/04/2015, 16h44
  2. erreur 400 dans ma macro :(
    Par Canoirode dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/09/2014, 16h18
  3. Erreur 400 après lancement Macro VBA Excel
    Par ananar dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 23/08/2008, 14h33
  4. Exécuter une macro depuis le menu contextuel du clic droit?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2008, 19h12
  5. Réponses: 1
    Dernier message: 26/12/2006, 14h13

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