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 :

Utilisation du menu sous Access 2003


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 241
    Points : 145
    Points
    145
    Par défaut Utilisation du menu sous Access 2003
    Bonjour,

    J'ai créé un menu à l'aide du tutoriel disponible ici et ça fonctionne bien. J'ai un sous-menu intitulé Matériel et diverses sous-sous menus associés décrivant l'etat de ce matériel (en état, en panne, etc ...). J'aimerais ouvrir le même formulaire en filtrant les enregistrements et ce, en appuyant sur les divers boutons du sous-sous menu correspondant.
    Pour cela, j'ai écrit des procédures déclenchées par la propriété OnAction du bouton correspondant de mon menu comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub CmdSpareSousTension()
     
        VpMenu = "SpareSousTension"
        DoCmd.OpenForm "FrmMateriel", acNormal
     
    End Sub
    Public Sub CmdSpareHorsTension()
     
        VpMenu = "SpareHorsTension"
        DoCmd.OpenForm "FrmMateriel", acNormal
     
    End Sub
    La variable VpMenu (Publique) est récupérée dans mon formulaire FrmMateriel sur l'événement Open form et analysée. Elle filtre les enregistrements comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Open(Cancel As Integer)
     
        Dim StrCritere As String
        Select Case VpMenu
            Case "SpareSousTension"
                StrCritere = "Equipement Disponible pour Maintenance"
            Case "SpareHorsTension"
                StrCritere = "Equipement en Etat mais Hors Tension"
        End Select
        Me.Filter = "DescStatEqp = " & Chr(34) & StrCritere & Chr(34)
        Me.FilterOn = True
     
    End Sub
    Ca fonctionne bien pour la première action. Mais quand je retourne dans mon menu et que je prends un autre critère (le formulaire étant déjà ouvert), le formulaire ne se met pas à jour avec mon nouveau filtrage. En fait, quand mon formulaire est ouvert il ne s'ouvre pas une deuxième fois même en cliquant sur une autre option du menu. Par conséquent, je ne génère pas d'événement Open Form et donc mon analyse n'est pas faite pour les autres fois ...
    Aucun autre événement du formulaire n'est d'ailleurs visité lorsqu'on appuie sur un autre sous-sous menu (j'ai vérifié).
    Comment faire alors ?
    Dois-je tester si mon formulaire est déjà ouvert pour le fermer et le réouvrir avec le nouveau filtre ?
    C'est peu élégant ...

    Merci pour votre aide.

  2. #2
    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
    Bonsoir Vandrie,
    il faudrait que la procédure n'ouvre le formulaire que si celui-ci ne l'est pas déjà et manipule le filtre de ton formulaire.

    Exemple: Pour deux boutons du menu, dont les propriétés caption sont :
    CmdSpareSousTension et CmdSpareHorsTension; la propriété OnAction des boutons appelle la même procédure : CmdSpare.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Sub CmdSpare()
     'Si le formulaire FrmMateriel n'est pas chargé alors l'ouvrir
     If Not Application.CurrentProject.AllForms("FrmMateriel").IsLoaded Then
       Docmd.OpenForm "FrmMateriel"
     End if
     While Not Application.CurrentProject.AllForms("FrmMateriel").IsLoaded
         DoEvents
      Wend
     'Appliquer le filtre au formulaire selon le libellé du bouton appuyé
     Forms("FrmMateriel").Filter = "DescStatEqp = " & IIF(CommandBars.ActiveControl.Caption="CmdSpareSousTension","'Equipement Disponible pour Maintenance'","'Equipement en Etat mais Hors Tension'")
     Forms("FrmMateriel").FilterOn = True
    End Sub

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 241
    Points : 145
    Points
    145
    Par défaut
    Merci beaucoup, je vais essayer ça.

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 241
    Points : 145
    Points
    145
    Par défaut Ca fonctionne !
    Bonsoir Ilank,

    J'ai tapé le code que vous m'aviez laissé et je peux dire que ça fonctionne parfaitement bien. Je vous remercie.

    J'ai regardé dans l'aide Access concernant la fonction DoEvents() mais l'explication en anglais n'est pas limpide. Pouvez-vous m'en dire plus ? A quoi cela sert-il ?

    Cette partie de code signifie quoi exactement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     While Not Application.CurrentProject.AllForms("FrmMateriel").IsLoaded
         DoEvents
      Wend
    Merci de prendre du temps pour moi.

  5. #5
    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
    Bonsoir vandrie,
    le DoEvents redonne la main au système. Le code attend que le formulaire soit chargé pour poursuivre; ça ne sert strictement rien ici.
    Alors pourquoi l'écrire tu me diras ? Je ne sais pas.

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

Discussions similaires

  1. Barre de Menu sous access 2003
    Par vandrie dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/02/2009, 04h29
  2. Problème de table liées sous Access 2003
    Par FuRioX dans le forum Access
    Réponses: 2
    Dernier message: 05/04/2006, 12h19
  3. Probleme formulaire sous access 2003
    Par pedrosystem dans le forum Access
    Réponses: 2
    Dernier message: 28/02/2006, 17h02
  4. Utilisation de formulaire sous access 2000
    Par 24 faubourg dans le forum IHM
    Réponses: 3
    Dernier message: 29/11/2005, 11h54
  5. PB importation classeur excel sous access 2003
    Par techinfo37 dans le forum Access
    Réponses: 6
    Dernier message: 04/10/2005, 20h41

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