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

Access Discussion :

Coexistence entre filtre SQL et filtre par formulaire


Sujet :

Access

  1. #1
    Membre régulier
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 150
    Points : 71
    Points
    71
    Par défaut Coexistence entre filtre SQL et filtre par formulaire
    Bonjour à tous,
    Je suis confronté depuis plusieurs jours à un curieux problème (pour l’illustrer j’ai confectionné une base-modèle que je pourrais vous transmettre si vous le jugiez utile).

    Description du modèle :
    • 2 tables tblMusiciens et tblOeuvres liées par une relation sur l'ID musicien,
    • 1 requête qryOeuvres munie d’un critère de filtre sur le nom d’un musicien puisé dans une comboBox du formulaire décrit ci-après,
    • 1 formulaire frmOeuvres sous forme de liste avec un bouton Clear destiné à purger la combo, entrainant le réaffichage de toutes les oeuvres

    Fonctionnement normal :
    • Sélection via la combo : OK (les oeuvres de ce musicien s'affichent)
    • Sélection via Souris appuyée sur une ligne : OK
    • Clic sur Clear : OK (toutes les oeuvres réapparaissent)

    Dysfonctionnement constaté :
    Après un clic droit de la souris pour trier sur les noms de musiciens ou les libellés des œuvres, impossible de reprendre le fonctionnement normal ci-dessus. Idem après un filtre.
    J’ai inséré dans le code VBA les réinitialisations de OrderBy, OrderByOn, Filter et FilterOn : aucun effet.

    Le seul moyen efficace que j’ai trouvé est de fermer puis réouvrir le formulaire à partir d’une macro externe. Ca marche mais nécessite une macro par formulaire (le nom n’étanat pas paramétrable).

    Serais-je passé à côté de quelque chose ?

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Si rien ne change après initialisation des paramètres de filtrage, ni sur initialisation de la propriété recordsource du formulaire, alors peut-être créer un sous-formulaire contenant les données, et l'insérer dans un formulaire principal depuis lequel filtrer les données du sous-formulaire. ça permettra peut-être d'éviter ce problème.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Je précise qu'en adoptant la solution avec le sous-formulaire, vous n'avez plus besoin de fermer et ouvrir le formulaire, mais juste d'utiliser la propriété SourceObject du contrôle sous-formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me!sousfrmOeuvres.SourceObject = "" ' initialisation
    Me!sousfrmOeuvres.SourceObject = "qryOeuvres"
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  4. #4
    Membre régulier
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 150
    Points : 71
    Points
    71
    Par défaut
    Bonjour et un grand merci pour vos suggestions.
    J'ai testé cette préonisation sur ma base de test et ne suis pas parvenu à tout faire fonctionner.
    J'ai créé un formulaire-enveloppe (indépendant) nommé envOeuvres contenant la liste déroulante cmbFiltreNomMusicien
    Dans envOeuvres j'ai inséré frmOeuvres en tant que sous-formulaire.

    Code dans Form_envOeuvres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Option Compare Database
    Option Explicit
     
    Private Sub cmbFiltreNomMusicien_AfterUpdate()
     DoCmd.ShowAllRecords
    End Sub
     
    Private Sub cmdClear_Click()
     Me!frmOeuvres.SourceObject = ""
     Me!frmOeuvres.SourceObject = "qryOeuvres"
    End Sub
    Code dans Form_frmOeuvres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Option Compare Database
    Option Explicit
     
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Parent.cmbFiltreNomMusicien.Value = Me.strNomMusicien.Value
     DoCmd.ShowAllRecords
    End Sub
    Le filtre fonctionne mais pas le cmdClear : Erreur 2101 "Le paramètre entré n'est pas valable pour cette propriété"
    Dansc l'espion j'ai vu que cette propriété contenait initialement frmOeuvres et ne pouvait accepter qryOeuvres.
    Je creuse.
    Merci encore.

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Dansc l'espion j'ai vu que cette propriété contenait initialement frmOeuvres et ne pouvait accepter qryOeuvres.
    oui, l'objet source c'est le nom du sous-formulaire, la source de données c'est RecordSource et il faut préciser la propriété Form de l'objet sous-formulaire avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.frmOeuvres.Form.Recordsource= "qryOeuvres"
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    autant pour moi, oui pour la propriété sourceobject du contrôle sous-formulaire, il faut donner le nom du sous-formulaire et pour la propriété recordsource du sous-formulaire, le nom de la requête.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

Discussions similaires

  1. Problème Filtre par formulaire
    Par cooldidi dans le forum IHM
    Réponses: 0
    Dernier message: 13/05/2008, 15h43
  2. Filtre par formulaire
    Par hugoclo dans le forum IHM
    Réponses: 0
    Dernier message: 04/01/2008, 20h58
  3. Réponses: 5
    Dernier message: 09/09/2007, 16h40
  4. Réponses: 3
    Dernier message: 23/02/2005, 16h51

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