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

IHM Discussion :

Gestion d'un menu persistant


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 134
    Points : 52
    Points
    52
    Par défaut Gestion d'un menu persistant
    hello à tous, j'utilise un formulaire indépendant qui me sert de Menu (F_Menu_General) pour ouvrir les autres formulaires. Mon problème a été la gestion de la fenêtre de ce Menu, qui devait rester ouverte en permanence, ainsi que la gestion des fenêtres qui s'ouvrent à côté, calées à un endroit bien précis et à la taille voulue (DoCmd.MoveSize c'est pas mal à mon niveau).
    Pour la gestion des fenêtres appelées via le menu, voici le petit code que j'utilise, et qui est exécuté lorsque j'appuie sur un bouton du 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
    Private Sub Btn_Patient_Click()
    On Error GoTo Err_Btn_Patient_Click
     
        Dim stDocName As String
        Dim stLinkCriteria As String
     
    '**********************************
    For Each oObj In Application.CurrentProject.AllForms
          If oObj.Name <> "F_Menu_General" Then
          DoCmd.Close acForm, oObj.Name, acSaveYes
          End If
    Next oObj
     
    '**********************************
     
        stDocName = "F_Menu_Patient"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
    Exit_Btn_Patient_Click:
        Exit Sub
     
    Err_Btn_Patient_Click:
        MsgBox Err.Description
        Resume Exit_Btn_Patient_Click
     
    End Sub
    Le seul problème, c'est que je ne veux pas qu'il ferme les formulaires ( DoCmd.Close) , mais les masque tout simplement (.visible = false, ça marche pas sur les variables), ce qui augmenterait la vitesse globale de la navigation dans ma base.
    Une idée?
    Merci +++!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 134
    Points : 52
    Points
    52
    Par défaut
    j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each oObj In Application.CurrentProject.AllForms
          If oObj.Name <> "F_Menu_General" Then
          oObj.Name.Visible = False
          End If
    Next oObj
    mais il me met "Objet requis" en erreur. Pourtant oObj.Name doit prendre le nom exact du/des formulaire ouvert.
    capte pas

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par stagolee
    Le seul problème, c'est que je ne veux pas qu'il ferme les formulaires ( DoCmd.Close) , mais les masque tout simplement (.visible = false, ça marche pas sur les variables), ce qui augmenterait la vitesse globale de la navigation dans ma base.
    Une idée?
    Je te conseille plutôt de travailler sur les formulaires réellement ouverts (et non pas la liste de tous les formulaires de ton application).
    Application.Forms te retourne la collection des fomulaires actuellement ouverts dans ton application.

    Ensuite, tu ne peux pas utiliser la propriété Visible sur un objet de type AccessObject comme ceux contenus dans la collection AllForms.

    En revanche, si tu utilises la collection Application.Forms, celle-ci contient le "véritable" objet de type Access.Form qui possède effectivement la propriété Visible.

    Je te propose le code suivant:
    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
     
    Private Sub Btn_Patient_Click()
        Dim stDocName As String
     
        ' Cacher tous les Forms ouverts sauf Me
        ' (ici le mot clé Me représente le formulaire Menu F_Menu_General
        '   qui contient le bouton Btn_Patient)
        CacherForms Me
     
        stDocName = "F_Menu_Patient"
        DoCmd.OpenForm stDocName
    End Sub
     
    Public Sub CacherForms(oFormMenu As Access.Form)
        Dim oForm As Access.Form, sNomFormMenu As String
     
        sNomFormMenu = oFormMenu.Name
        For Each oForm In Application.Forms
            If oForm.Name <> sNomFormMenu Then
                oForm.Visible = False
            End If
        Next oForm
    End Sub

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 134
    Points : 52
    Points
    52
    Par défaut
    wow! merci pour ton aide, je teste ça dès que possible, et je fais un CR

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 134
    Points : 52
    Points
    52
    Par défaut
    que dire à part MERCI, ça marche nickel.
    Seul bémol, je suis frustré de ne pas tout comprendre dans cette technique :

    "ici le mot clé Me représente le formulaire Menu F_Menu_General"
    comment l'appli sait que c'est F_Menu_General ? ce n'est indiqué nul part dans ce code

    ok pour l'appel de la fonction CacherForms, mais "Me" tout seul veut ici donc dire sauf le formulaire en cours, c'est ça? je ne connaissais pas cette fonction.

    - quelle différence entre oForm et oFormMenu ? est-ce des noms de variables arbitraires ou est-ce des fonctions vba?

    si j'ai bien compris le reste, oForm.Name correspond a un des formulaires ouverts, listé dans Application.Forms. on va comparer le nom de ce formulaire ouvert à oFormMenu.Name (nom du Menu?, mais comment sait-il que c'est F_Menu_General ?)

    bon je vais arrêter là ma "réflexion", il me manque encore trop de connaissances pour faire des questions pertinentes

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

Discussions similaires

  1. [VC2005] Simplifier la gestion d'un menu
    Par Philippe320 dans le forum MFC
    Réponses: 2
    Dernier message: 01/02/2008, 10h47
  2. Gestion de deux menu déroulant avec php/Mysql
    Par dragon2 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/01/2008, 19h00
  3. Gestion d'un menu (selon vous)
    Par rvzip64 dans le forum Delphi
    Réponses: 11
    Dernier message: 08/06/2007, 19h15
  4. Gestion d'un menu
    Par rafiq25 dans le forum C#
    Réponses: 2
    Dernier message: 22/03/2007, 15h03
  5. [JSP]Gestion d'un menu dynamique
    Par joebarteam88 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 16/08/2005, 12h35

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