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

Contribuez Discussion :

Créer un "vrai" menu déroulant dans un formulaire


Sujet :

Contribuez

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Créer un "vrai" menu déroulant dans un formulaire
    Bonjour,

    Je ne sais ce que vous en pensez mais personnellement, je trouve que quelque fois le "mieux" peut être l'ennemi du bien. Exemple, la personnalisation des menus et barres d'outils dans Access depuis la version 2007. Avant, un clic droit et deux ou trois manip et l'affaire était réglée pour des besoins simples. Maintenant il faut maîtriser le XML et construire une usine à gaz pour le moindre menu et la moindre fonction !?

    Bref, j'ai fabriqué mon menu maison :

    1 - J'ai créé trois tables (pas indispensable mais pratique pour gérer le contenu des menus) :
    . Table "Menu" : Elle me permet d'identifier les différents menus que je souhaite gérer (contenu : un id automatique, un nom et un oui/non pour actif/inactif).

    . Table "Type" : Pas indispensable mais pratique si on souhaite pouvoir gérer différents type de fonctions (imprimer un état, ouvrir un formulaire, voir un état, exécuter une fonction...)

    . Table "Fonctions" : Elle me permet de liste les fonctions de l'ensemble des menus (elle en lien avec la table menu évidemment) (contenu : un ide automatique, un nom, l'id du menu lié, l'id du type de la fonction, un oui/non pour actif/inactif et un champ texte pour la saisie de l'élément lié (état, formulaire, fonction...))

    2 - J'ai créé une fenêtre qui me permet de gérer mes tables.

    3 - Dans le formulaire où je veux le menu :
    . Je crée un champ liste déroulante. Son contenu est basé sur la table "Fonctions" en filtrant par l'id du menu et l'actif/inactif. En code évènement de la liste j'utilise...
    Sur réception de focus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Liste_Menu_Imprimer_GotFocus()
        Me.Liste_Menu_Parametre.Dropdown
    End Sub
    Sur clic :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Liste_Menu_Imprimer_Click()
        Call Action_Menu(Me.Liste_Menu_Imprimer)
    End Sub
    + La fonction action menu qui permet de traiter la fonction appelée selon son type :
    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
    Function Action_Menu(REF_Num As Integer)
     
    Dim Parametre As String
    Dim stDocName As String
    Dim stLinkCriteria As String
    Dim Typ As Integer
     
     
    'Test du paramètre Num
    'If REF_Num = False Or REF_Num = "" Or REF_Num = 0 Or REF_Num < 0 Or IsNull(REF_Num) Then Exit Function
     
    Typ = DLookup("MENDET_MENTYP", "MENu_DETail", "MENDET_Num = " & REF_Num)
     
    If Typ = 1 Then 'Ouvrir un formulaire
        stDocName = DLookup("MENDET_Parametre", "MENu_DETail", "MENDET_Num = " & REF_Num)
        DoCmd.OpenForm stDocName, , , stLinkCriteria
    End If
     
    If Typ = 2 Then 'Voir un état
        stDocName = DLookup("MENDET_Parametre", "MENu_DETail", "MENDET_Num = " & REF_Num)
        DoCmd.OpenReport stDocName, acViewPreview, , , acDialog
    End If
     
    If Typ = 3 Then 'Exécuter une requête
        stDocName = DLookup("MENDET_Parametre", "MENu_DETail", "MENDET_Num = " & REF_Num)
        DoCmd.SetWarnings False 'Désactive les messsages d'alerte
        DoCmd.OpenQuery stDocName 'Exécution de la requête
        DoCmd.SetWarnings True 'Réactive les messages d'alerte
    End If
     
    If Typ = 4 Then 'Exécuter une fonction
        stDocName = DLookup("MENDET_Parametre", "MENu_DETail", "MENDET_Num = " & REF_Num)
        'Call stDocName
    End If
     
    If Typ = 5 Then 'Imprimer un état
        stDocName = DLookup("MENDET_Parametre", "MENu_DETail", "MENDET_Num = " & REF_Num)
        DoCmd.OpenReport stDocName, acNormal, , , acDialog
    End If
     
     
    Parametre = 0
     
    End Function
    . Je crée un bouton et je lui donne le nom du menu. La macro d’événement sur clic c'est "AtteindreContrôle" + le nom de la liste déroulante (il doit exister l'équivalent en vba mais je ne connais pas, dsl).

    Je place le bouton où je souhaite (c'est totalement libre, cool non ?)
    Je réduit la liste déroulante à 0 en largeur et je la place sur le coté gauche du bouton.

    Résultat :
    En apparence, seulement un bouton visible.
    Quand vous cliquez sur le bouton, le focus est dirigé vers la liste déroulante et elle est automatiquement ouverte.
    Si vous cliquez sur une fonction, le traitement est exécuté.
    Si vous cliquez en dehors de la liste, elle est automatiquement fermée.

    Voilà, comme un bon vieux menu déroulant.

    Merci de me dire ce que vous en pensez et de me suggérer des améliorations.
    Les solutions les plus simples sont les plus efficaces

  2. #2
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Salut, lolo

    Maintenant il faut maîtriser le XML et construire une usine à gaz pour le moindre menu et la moindre fonction !?
    Le XML est un extraordinaire outil de stockage d'informations mais, selon moi, un piètre langage pour humains. Microsoft prend le risque d'un ruban ultra sophistiqué au prix d'une accessibilité douteuse. C'est un choix et j'espère qu'il n'est pas le premier d'une longue liste.

    Tu as reproduit l'ancien système, ne dérogeant pas à ton surnom. Tant mieux s'il te satisfait.

    Tu peux envoyer directement un nom de fonction qui existe dans ton code, avec tous ses paramètres en l'inscrivant dans une chaîne que tu lances grâce à la fonction VBA EVal( Expression).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function OuvreEtat( NomEtat)
        docmd.openform NomEtat 
    end function
    C'est forcément un Function, car un Sub n'est pas "vu" par Eval.

    Ensuite, l'éxécution de ta procédure depuis une chaîne est réalisable comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str= "OuvreEtat( ""MonEtat"")"
    Eval str

  3. #3
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Bonsoir,

    Peux tu nous montrer le résultat capture écran et/ou base exemple.

    @++

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Merci pour les informations mumen et je prend ta référence à mon surnom comme un compliment, autodidacte je suis, autodidacte je reste.
    Le code n'est pas très abouti, je le reconnais bien volontiers.

    J'ai effectivement cherché à retrouver la simplicité perdue avec l'arrivée d'indigeste XML imposé par Microsoft.

    Dolphy35, voici 2 captures d'écrans (dsl, je ne suis pas un pro du graphisme) :

    Le menu se déroule aussi bien en cliquant sur le nom ou sur la flèche de déroulement. La fonction cliquée, le menu se referme.
    Images attachées Images attachées   
    Les solutions les plus simples sont les plus efficaces

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Salut,

    Trés belle initiative que de créer un gestionnaire de menu, plutot que le ruban, j'ai eu la même idée mais avec une approche différente...

    Je vais mettre des captures écran.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Voila ce que j'ai fait pour avoir un menu performant et qui tienne la route, quelque soit la version d'Access.

    Ce menu est en fait un lanceur d'objet, il peut exécuter des requetes, des modules, ouvrir des états, des formulaires, des pages Web, des documents PDF, etc...

    On peut définir l'icone de chaque objet à partir d'une bibliothèque sur le disque ou utiliser les icones par défaut, lui associer une aide, un libellé et le nom de l'objet concerné (formulaire, requête, état, etc...), mettre un mot de passe éventuellement.

    Il peut aussi ouvrir des sous dossiers, qui contiennent eux même des objets et il n'y a aucune limite de l'arborescence.

    Ce gestionnaire est multi applications et multi clients.

    Voila la page d'accueil du menu :
    Nom : menu.jpg
Affichages : 7189
Taille : 109,3 Ko

    Le contenu d'un sous menu (ici Admin) :
    Nom : menu admin.jpg
Affichages : 7020
Taille : 118,3 Ko

    Le gestionnaire de menu qui permet de mettre à jour celui ci :
    Nom : gestionnaire menu.jpg
Affichages : 11274
Taille : 142,5 Ko

    Et enfin un exemple de formulaire lancé grace au menu, ici celui des paramêtres utilisateur, ou l'utilisateur peut personnaliser le menu, formulaire et autre :
    Nom : parametre.jpg
Affichages : 9993
Taille : 141,4 Ko

    C'est une approche radicalement différente du Ruban et de ton menu.

    Voila

Discussions similaires

  1. [AC-2010] Créer un menu déroulant dans un formulaire
    Par lololebricoleur dans le forum IHM
    Réponses: 5
    Dernier message: 01/04/2013, 10h22
  2. [SP-2010] Griser un champ selon le menu déroulant dans un formulaire
    Par sebfreu dans le forum SharePoint
    Réponses: 3
    Dernier message: 24/01/2012, 11h34
  3. Menu déroulant dans un formulaire
    Par basto dans le forum IHM
    Réponses: 1
    Dernier message: 15/03/2007, 15h21

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