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

VBA Access Discussion :

Liste des menus et leur action associée ?


Sujet :

VBA Access

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut Liste des menus et leur action associée ?
    Bonjour à tous.

    J'ai une appli 2003 que je manipule en 2007.
    Cette appli a de nombreux menus personnalisés.

    Le problème c'est qu'avec 2007, il n'y a plus d'outil pour manipuler le menu.
    Atuellement mon client fait les modifs en 2003 quand nous avons besoin d'intrevenir sur les menus.

    Je cherche du code qui me permettrai de faire :
    La liste des menus personnalisé de l'application.
    L'action associée à chacune des entrées.

    L'idée est ensuite de convertir ceux-ci en ruban 2007 lors d'un projet de migration vers cette version.

    Je me suis essayé avec les objets CommandBar et CommandBarCOntrol mais j'en rammasse des tonnes et ceux qui m'intéressent vraiment sont perdus dans la masse et en plus j'ai des entrées sans OnAction donc je ne sais pas trop ce qu'elles font.

    Si quelqu'un peut m'aider avec cela ce serai très apprécié, mes lectures sur le sujet ne sont pas très informatives car elles parlent essentiellement de créatiom mais pas de documentation de menus existants.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 600
    Points : 34 273
    Points
    34 273
    Par défaut
    Salut,

    et as-tu la possibilité de passer par une autre bdd qui n'aurait "aucun" menu personnalisé, pour faire un différentiel ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Merci c'est une idée mais j'avais espéré quelque chose de moins "bricolé".

    Un truc qui teste une propriété du menu.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,

    En 2007, les menus personnalisés ne sont pas sous l'onglet Compléments du ruban ?

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Oui, ils sont là mais ma question est comment accéder aux informations, comme l'action déclenchée, par code ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Regarde ce lien au cas où :https://docs.microsoft.com/fr-fr/off...s-and-toolbars

    Juste une question, les anciennes versions d'access ne gérait pas les menus personnalisés sous forme de macros ?

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Autant que je sache tu pouvais appeler une macro, du code VBA, un formulaire ou un rapport.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    j'ai trouvé quelque chose d'intéressant ici :

    Understanding Excel Menus with VBA
    http://what-when-how.com/excel-vba/u...enus-with-vba/

    C'est pour Excel mais je pense que le gros du code doit fonctionner et il y a un programme d'inventaire des entrées de menu.
    Il semble qu'il y ai une propriété BuiltIn qui je pense va me permettre de distinguer les menus de Access de ceux créés par mon client.

    Je vous reviens quand j'ai validé mon intuition.

    A+

    P.S.

    J'ai aussi trouvé cela :
    Referencing command bar and control objects in Access
    https://www.techrepublic.com/article...cts-in-access/
    Moins complet mais avec des infos sur les éléments qui ne sont pas dans la référence précédente.

    Re A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Mon intuition était fausse mais à force d'essais/erreurs je suis parvenu au code suivant qui fait grosso-modo ce que je veux.

    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
    Option Compare Database
    Option Explicit
     
    Private Sub InventorierMenu()
        Dim cb As CommandBar
        Dim cbc As CommandBarControl
     
        For Each cb In Application.CommandBars
     
            If cb.BuiltIn = False Then
                Debug.Print String(10, "=")
                Debug.Print cb.Name, cb.NameLocal, cb.BuiltIn
                Debug.Print String(10, "-")
     
                For Each cbc In cb.Controls
     
                    Call AficherItemMenu(0, cbc)
     
                    If cbc.TYPE = msoControlPopup Then
                        Call InventorierItemMenu(1, cbc)
                    End If
     
                Next cbc
     
                Debug.Print String(10, ".")
                Debug.Print String(10, " ")
                DoEvents
            End If
     
        Next cb
     
    End Sub
    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
    Private Sub InventorierItemMenu(prmNiveau As Long, prmCBC As CommandBarControl)
        On Error GoTo err_InventorierItemMenu
     
        Dim cbc As CommandBarControl
     
        For Each cbc In prmCBC.Controls
            Call AficherItemMenu(prmNiveau, cbc)
            If cbc.TYPE = msoControlPopup Then
                Call InventorierItemMenu(prmNiveau + 1, cbc)
            End If
     
        Next cbc
     
    exit_InventorierItemMenu:
        Exit Sub
     
    err_InventorierItemMenu:
        Debug.Print "### Erreur au niveau " & prmNiveau & ", Entrée " & trim(prmCBC.Caption) & " : " & Err.Number & ", " & Err.Description
        Resume exit_InventorierItemMenu
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub AficherItemMenu(prmNiveau As Long, prmCBC As CommandBarControl)
        On Error Resume Next
        Debug.Print Space(prmNiveau * 4); prmCBC.Parent.Name; "|", 
        Debug.Print Trim(prmCBC.Caption),
        Debug.Print Trim(prmCBC.DescriptionText),
        Debug.Print Trim(prmCBC.TooltipText),
        Debug.Print Trim(prmCBC.OnAction);
        Debug.Print
        DoEvents
    End Sub
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Il y avait encore des trucs cachés, ici une version améliorée :

    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
    Private Sub AficherItemMenu(prmNiveau As Long, prmCBC As CommandBarControl)
        On Error Resume Next
     
        Select Case prmCBC.TYPE
            Case msoControlPopup
                Debug.Print Space(prmNiveau * 4); prmCBC.Parent.Name; "|";
                Debug.Print "Étiquette : "; Trim(prmCBC.Caption); "|";
                Debug.Print "Desc. :"; Trim(prmCBC.DescriptionText); "|";
                Debug.Print "Tip. :"; Trim(prmCBC.TooltipText); "|";
                Debug.Print "Action :"; Trim(prmCBC.OnAction);
                Debug.Print
                DoEvents
     
            Case msoControlButton
                Dim cbcb As CommandBarButton
                Set cbcb = prmCBC
     
                Debug.Print Space(prmNiveau * 4); cbcb.Parent.Name; "|";
                Debug.Print "Étiquette : "; Trim(cbcb.Caption); "|";
                Debug.Print "Desc. :"; Trim(cbcb.DescriptionText); "|";
                Debug.Print "Tip. :"; Trim(cbcb.TooltipText); "|";
                Debug.Print "Action :"; Trim(cbcb.OnAction); "|";
                Debug.Print "TypeLien :"; Trim(cbcb.HyperlinkType); "|";
                Debug.Print "Param :"; Trim(cbcb.Parameter); "|";
                Debug.Print "Raccourci :"; Trim(cbcb.ShortcutText); "|";
                Debug.Print
                DoEvents
     
            Case Else
                Call Err.Raise(5, , Error$(5) & " - Type inconnu")
        End Select
     
    End Sub
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Décembre 2013
    Messages : 150
    Points : 98
    Points
    98
    Par défaut
    Bonjour Marot_r,

    Par curiosité, je voudrais essayer tes menus.
    j'ai crée un formulaire avec 1 bouton qui appelle menu_Click.

    Et si je compile, j'ai l'erreur indiquée en PJ

    Une piste ?
    Merci.
    Images attachées Images attachées  

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    J'ai oublié de le préciser mais il faut une mettre une référence aux objets Microsoft Office car les commandBar ne sont pas des objets Access d'origine.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Décembre 2013
    Messages : 150
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    J'ai oublié de le préciser mais il faut une mettre une référence aux objets Microsoft Office car les commandBar ne sont pas des objets Access d'origine.

    A+
    Ok, ça compile maintenant.
    j'ai un bouton dans un formulaire qui appelle "InventorierMenu"

    je boucle dans InventorierMenu et j'ai toujours "cb.BuiltIn" à Faux

    est ce normal ( je suis en access 2007) ?
    du coup, rien ne s'affiche.

  14. #14
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 600
    Points : 34 273
    Points
    34 273
    Par défaut
    Salut,

    as-tu des menus spécifiques dans ta base ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Décembre 2013
    Messages : 150
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par Jean-Philippe André Voir le message
    Salut,

    as-tu des menus spécifiques dans ta base ?
    Non, c'est une base vide avec juste un formulaire et un bouton qui appelle la procedure

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Attention ce code n'est pas destiné à trouver les boutons dans les formulaire mais les entrées dans les barres de menus.

    Même si les contrôles portent des noms similaires ce sont des choses bien différentes.

    Ceci dit le code ne devrait pas entrer dans une boucle infinie mais comme je l'ai dit cela tiens plus du bricolage que de la programmation réfléchie et donc il y a peut-être des cas où cela peut arriver.

    As-tu tracé l'exécution pas à pas ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  17. #17
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Décembre 2013
    Messages : 150
    Points : 98
    Points
    98
    Par défaut
    Bonjour, en fait, ton code ne boucle pas indéfiniment. L’exécution pas à pas montre qu'il boucle un certain temps et sort.
    Il ne trouve rien (cb.BuiltIn" toujours à Faux).
    Apparemment, c'est parce que je n'ai pas de menu dans ma base.

    Comment en créer un ?

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Comment en créer un ?
    A priori en Access 2007 et suivante on ne peut pas. Il faut créer un ruban (et c'est un peu la m...).

    Ici un article qui explique le procédé.

    https://support.office.com/fr-fr/art...a-4e25bc9413de

    Sinon on peut peut-être y arriver par code VBA puisque que les objets existent toujours.

    Mon code est destiné aux applications crées avec les version antérieures de Access qui avait une possibilité de gérer des menus directement.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  19. #19
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Décembre 2013
    Messages : 150
    Points : 98
    Points
    98
    Par défaut
    Ok, Merci Marot_r pour toutes ces explications.
    J'ai commencé à créer un ruban personnalisé, mais ça bloque à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "http://schemas.microsoft.com/office/2006/01/customui"
    Comme tu dis, c'est un peu ..

    merci en tous cas.
    Bonne journée.

Discussions similaires

  1. [Python 2.X] comment avoir la list des EVT_ et leur actions ?
    Par tsumey dans le forum wxPython
    Réponses: 5
    Dernier message: 28/03/2016, 08h42
  2. Liste des tables avec leur nombre d'enregistrements
    Par emilie1t dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 09/10/2012, 16h28
  3. Cherche liste des EventID avec leur signification
    Par fadsys dans le forum PureBasic
    Réponses: 1
    Dernier message: 17/09/2009, 12h37
  4. Réponses: 4
    Dernier message: 26/03/2009, 14h58
  5. Réponses: 3
    Dernier message: 17/08/2007, 16h17

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