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 :

Pb Menu OnAction dans Module de Classe


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 61
    Points : 63
    Points
    63
    Par défaut Pb Menu OnAction dans Module de Classe
    Bonjour à tous,

    Voila mon Pb, J'ai créer 2 element de Menu personnalisé depuis un Module de classe comme ceci...
    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
           
    Private Sub CreateItemMenuWmb()
       Dim PMnu As Object
       DeleteItemMenuWmb
       Set PMnu = CommandBars(cWmb).Controls.Add(Type:=msoControlPopup, Before:=8)
       With PMnu
          .Caption = "Mode Edition"
       End With   
    With CommandBars(cWmb).Controls("Affichage")
          .Controls.Add(Type:=msoControlButton).Caption = cM52
          .Controls(cM52).OnAction = "MenuClick"
          .Controls(cM52).Tag = "52"
       End With
       With CommandBars(cWmb).Controls(cM2)
          .Controls.Add(Type:=msoControlButton).Caption = cM53
          .Controls(cM53).OnAction = "MenuClick"
          .Controls(cM53).Tag = "53"
       End With
       Set PMnu = Nothing
    End Sub
    
    Private Sub MenuClick
       Select Case CommandBars.ActionControl.Tag
       'Réponse au evenements...
       End Select
    End sub
    Mais voila, lorsque je clique sur un élement de menu, Excel m'affiche une boite
    Impossible de trouver la macro "MenuClick"
    Tous ça, parce que MenuClick est referencé dans mon module de classe.
    En effet lorsque je reference "MenuClick" dans un module normal, cela fonctionne parfaitement...
    Ma question est:
    Y a t'il moyen de renseigné OnAction de manière à ce que je puisse répondre à mes évenements de click dans mon module de classe

    D'avance Merci de vos réponses

    Laurent
    C++ BUILDER & DELPHI

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Laurent GAUDILLIER et le forum
    enlever le private,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub MenuClick
       Select Case CommandBars.ActionControl.Tag
       'Réponse au evenements...
       End Select
    End sub
    mais je pense qu'il faut que la macro MenuClick se trouve dans un module général, comme pour une Function : quand tu veux qu'excel travaille tout seul, faut pas trop lui compliquer la tâche
    À moins que la syntaxe de OnAction admette une syntaxe te permettant la désignation du module
    .
    Tu peux tenter avec "AAA.MenuClick" ou "AAA!MenuClick" (AAA étant le nom informatique de la feuille).
    Mais ce matin, je suis flemmard, et j'ai pas envie de tester.
    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 61
    Points : 63
    Points
    63
    Par défaut
    Bonsoir,

    J'ai tout essayer mais sans resultats. Je peut toujours mettre MenuCklick dans
    un module standard mais je perd ainsi l'avantage de la POO, c'est dommage
    Je vais devoir me résigné
    C++ BUILDER & DELPHI

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Comme le dit Gorfaël, tu peux utiliser la procédure en la préfixant avec l'objet issu de la classe, du moment que tu la mette Public.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 61
    Points : 63
    Points
    63
    Par défaut
    Bonjour à tous,

    Le Pb est que mème en préfixant MenuClick du nom de mon instance de classe
    en l'ocurrence ici : LGProc.Menuclick , ça ne fonctionne pas !
    je précise que mon sub MenuClick est déclaré Public

    Merci quand mème pour votre aide
    Amicalement Laurent
    C++ BUILDER & DELPHI

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Peux-tu donner le code qui appelle cette procédure?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    Bonjour à tous (edition, apres verif)

    une tite question :
    Ton module de classe, ne concerne pas ton menu popup mais les différents objets qui sont placés. Cela impliquent que seuls les événements de ces contrôles ne peuvent être gérés par ton module de classe. l'événement généré par ton menu s'effectue dans un module standard.

    regarde le fichier joint
    Wilfried

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Salut Wilfried,

    C'était la raison d'être de ma question. J'ai supposé que la procédure de la classe devait être appelée suite à un événement... Je ne vois pas trop comment faire dans ce cas...

    Ce serait bien que l'on ait une explication du contexte...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 61
    Points : 63
    Points
    63
    Par défaut
    Bonsoir,
    Et bien voila pour Shématiser:

    Module de Classe CMenus
    dans CMenus, je gère la contruction de ma MenuBar et j'ai quelques
    routines qui permettent de grisé un element de menu...

    module de classe CProc
    C'est là que je souhaite gèrer la réponse aux click de ma MenuBar
    Je précise que CProc initialise instance de CMenus

    Effectivement, en plaçant ma Sub MenuClick dans un module Standard, ça fonctione parfaitement Ex:
    Module Standard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        
    Public Sub MenuClick()
        CProc.MenuClick  ' Appel de ma sub MenuClick dans CProc
    end Sub
    Mais on doit reconnaitre que ça fait un peu "Bidouille"
    Donc, je répète ma question:
    Ya t'il un moyen de manière à ce que je puisse récupèrer Les clicks de mes menus directement dans mon CProc


    Ce qui m'étonne, c'est pourquoi Menu.OnAction ne puisse pas directement appeler une méthode de classe publique soit au travers d'une autre classe(CProc), soit mème une méthode de classe de ce mème module en l'occurence (CMenu) pour ce qui me concerne
    Pae Exemple Menu.OnAction = "CProc.MenuClick" et là, ça ne fonctionne pas, il m'affiche que la Sub "CProc.MenuClick" est introuvable...

    Amicalement Laurent
    C++ BUILDER & DELPHI

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Si cProc est le nom de ta classe, j'ai des doutes que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Sub MenuClick()
        CProc.MenuClick  ' Appel de ma sub MenuClick dans CProc
    end Sub
    fonctionne, car il faut créer une instance de la classe et renseigner le nom de cette instance...

    Cela étant, je pense que c'est la seule solution et je ne vois pas trop en quoi cela fait bidouille. Tu ne sais renseigner comme procédure OnAction qu'une procédure publique d'un module standard.

    Tu devrais donc avoir quelque part dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public MaProc As cProc
     
    Sub Initialisation()
        Set MaProc As New cProc
        ...
    End Sub
     
    Sub OnClick()
        MaProc.OnClick
    End Sub
    et tu peux alors, à la création du bouton, préciser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonBouton.OnAction = "OnClick"
    Perso, je ne trouve pas que cela fait bidouille et cela n'enlève rien à la programmation POO
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 61
    Points : 63
    Points
    63
    Par défaut
    Bonsoir Pierre

    Effectivement, tu n'as pas de solution miracle, c'est bien ce que je craignais ...
    Perso moi qui suis un adept de Delphi, je m'aperçois que VB à malheureusement beaucoup de carences au niveau POO !!
    En effet, sous Delphi un Pointeur de méthode peut pointer sur une méthode classe sans aucun Pb

    Je vais devoir faire avec

    Merci à toi de t'ètre interressé à mon Pb

    Bonsoir Laurent
    C++ BUILDER & DELPHI

Discussions similaires

  1. [XL-2007] Adapter petit code dans module de classe
    Par eliot.raymond dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 15/11/2012, 15h13
  2. Find Range dans module de classe
    Par ylemasson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2011, 11h45
  3. Pb ajout objet dans module de classe
    Par steph6499 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 06/02/2011, 17h55
  4. Gestion erreur dans module de class E97
    Par Eric_03 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/12/2008, 16h45
  5. Utilisation composant timer dans module de classe
    Par MaximeM dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/06/2007, 13h35

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