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 :

Fonction Filter sur les resultats de plusieurs requêtes, possible ? [AC-2016]


Sujet :

IHM

  1. #1
    Membre à l'essai
    Homme Profil pro
    Analyste fonctionnel AMOA
    Inscrit en
    Janvier 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Analyste fonctionnel AMOA
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2018
    Messages : 27
    Points : 22
    Points
    22
    Par défaut Fonction Filter sur les resultats de plusieurs requêtes, possible ?
    Bonjour,

    Actuellement pour filtrer les enregistrements de mon formulaire en mode continu, j'utilise 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Private Sub BTN_Filtrer_Click()
     
        Forms("Journal_Frm").FilterOn = False
     
        'Vider le texte du filtre
        VARP_FormEnCours_Filtre_STR = ""
     
        'Créer le texte du filtre
        With Forms("Journal_Frm")
     
                'QUI
                'FILTRE_Jrn_Qui_Idv_Id
                If MODFCT_ControleIdVide_BOO(.Controls("FILTRE_Jrn_Qui_Idv_Id")) = False _
                Then VARP_FormEnCours_Filtre_STR = VARP_FormEnCours_Filtre_STR & " and [Jrn_Qui_Idv_Id]=" & .Controls("FILTRE_Jrn_Qui_Idv_Id").Value
     
                'QUOI
                'FILTRE_Jrn_Quoi_Ctg_Id
                If MODFCT_ControleIdVide_BOO(.Controls("FILTRE_Jrn_Quoi_Ctg_Id")) = False _
                Then VARP_FormEnCours_Filtre_STR = VARP_FormEnCours_Filtre_STR & " and [Jrn_Quoi_Ctg_Id]=" & .Controls("FILTRE_Jrn_Quoi_Ctg_Id").Value
     
                'FACTURE
                'FILTRE_Facture_FacturesId_TXC
                If MODFCT_ControleIdVide_BOO(.Controls("FILTRE_Jrn_Facture_Fct_Id")) = False _
                Then VARP_FormEnCours_Filtre_STR = VARP_FormEnCours_Filtre_STR & " and [Jrn_Facture_Fct_Id]=" & .Controls("FILTRE_Jrn_Facture_Fct_Id").Value
     
            End With
     
            'Si Filtre est vide alors Exit
            If VARP_FormEnCours_Filtre_STR = "" Then
                MsgBox "Aucun filtre choisi"
                Exit Sub
            End If
     
            'Supprimer le " and " du début
            VARP_FormEnCours_Filtre_STR = Right(VARP_FormEnCours_Filtre_STR, Len(VARP_FormEnCours_Filtre_STR) - 4)
     
        'Appliquer le filtre selon le texte
        Forms("Journal_Frm").Filter = VARP_FormEnCours_Filtre_STR
        Forms("Journal_Frm").FilterOn = True
    Les contrôles choisis dans l'exemple ci-dessus sont des listes déroulantes. Par exemple, si je sélectionne "Alimentation" dans la liste "FILTRE_Jrn_Quoi_Ctg_Id" alors cela n'affiche que les enregistrements dont la catégorie "quoi" ont l'id de "alimentation".

    Cependant, j'ai besoin d'aller plus loin dans mon filtre, en filtrant cette catégorie "quoi" selon plusieurs id et non pas un seul. Pour cela, j'ai essayé d'imaginer cette liste d'id via une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Categorie_Niveau_Req.Ctg_Id
    FROM Categorie_Niveau_Req
    WHERE (((Categorie_Niveau_Req.Niv1Id)=[Formulaires]![Journal_Frm]![FILTRE_Jrn_Quoi_Ctg_Id])) OR (((Categorie_Niveau_Req.Niv2Id)=[Formulaires]![Journal_Frm]![FILTRE_Jrn_Quoi_Ctg_Id])) OR (((Categorie_Niveau_Req.Niv3Id)=[Formulaires]![Journal_Frm]![FILTRE_Jrn_Quoi_Ctg_Id])) OR (((Categorie_Niveau_Req.Niv4Id)=[Formulaires]![Journal_Frm]![FILTRE_Jrn_Quoi_Ctg_Id])) OR (((Categorie_Niveau_Req.Niv5)=[Formulaires]![Journal_Frm]![FILTRE_Jrn_Quoi_Ctg_Id])) OR (((Categorie_Niveau_Req.Niv6)=[Formulaires]![Journal_Frm]![FILTRE_Jrn_Quoi_Ctg_Id]));
    Mais ce que je ne sais comment faire c'est quel code VBA je dois utiliser dans mon premier code ci-dessus pour que la fonction Filter filtre en fonction du résultat de la requête.

    Est ce possible svp ? Si oui, comment ?

    Cordialement.

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 547
    Points
    24 547
    Par défaut
    Bonjour,

    Utilises l'opérateur SQL IN() dans ton filtre.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [id_à_filtrer] IN(1, 3, 5, 7)
    ou encore avec la requête qui ne renvoi que l'id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [id_à_filtrer] IN(select id from table where condition)
    Cordialement,

  3. #3
    Membre à l'essai
    Homme Profil pro
    Analyste fonctionnel AMOA
    Inscrit en
    Janvier 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Analyste fonctionnel AMOA
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2018
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Que dire de mieux qu'un grand merci loufab !!!

    J'étais parti sur la création x fois d'une condition à chaque enregistrement, ce qui m'a créé une erreur car la ligne de code "Filter" était trop longue. Je suis donc parti toute l'après midi à la recherche sur internet d'autres solutions (avec des Recordset, DAO, etc) mais aucune solution trouvée pour mon cas.

    Tandis qu'avec le "IN" que tu me propose cela fonctionne impeccable. En fait, je ne savais pas qu'on pouvait mettre une requête après un IN. Solution simple mais hyper efficace. Je l'ai utiliser sur deux listes déroulantes en plus du reste et çà fonctionne.

    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
     
                'FILTRE_Jrn_Quoi_Ctg_Id
                If MODFCT_ControleIdVide_BOO(.Controls("FILTRE_Jrn_Quoi_Ctg_Id")) = False Then
                    VAR_Sql_STR = ""
                    VAR_Sql_STR = VAR_Sql_STR & " SELECT Categorie_Req.Ctg_Id FROM Categorie_Req WHERE (" _
                            & "((Categorie_Req.VAL_IdComplet_TXC) Like " _
                            & "(" & Chr(34) & "*" & Chr(34) & " & " & .Controls("FILTRE_Jrn_Quoi_Ctg_Id").Value & " & " & Chr(34) & "*" & Chr(34) & ")))"
                    VARP_FormEnCours_Filtre_STR = VARP_FormEnCours_Filtre_STR & " and [Jrn_Quoi_Ctg_Id] IN (" & VAR_Sql_STR & ")"
                End If
     
                'FILTRE_Jrn_PourQuoi_Ctg_Id
                If MODFCT_ControleIdVide_BOO(.Controls("FILTRE_Jrn_PourQuoi_Ctg_Id")) = False Then 'VARP_FormEnCours_Filtre_STR = VARP_FormEnCours_Filtre_STR & " and [Jrn_PourQuoi_Ctg_Id]=" & .Controls("FILTRE_Jrn_PourQuoi_Ctg_Id").Value
                    VAR_Sql_STR = ""
                    VAR_Sql_STR = VAR_Sql_STR & " SELECT Categorie_Req.Ctg_Id FROM Categorie_Req WHERE (" _
                            & "((Categorie_Req.VAL_IdComplet_TXC) Like " _
                            & "(" & Chr(34) & "*" & Chr(34) & " & " & .Controls("FILTRE_Jrn_PourQuoi_Ctg_Id").Value & " & " & Chr(34) & "*" & Chr(34) & ")))"
                    VARP_FormEnCours_Filtre_STR = VARP_FormEnCours_Filtre_STR & " and [Jrn_PourQuoi_Ctg_Id] IN (" & VAR_Sql_STR & ")"
                End If
    En fait ma table "ctg_Categorie_Tbl" comporte toutes les catégories qui peuvent être aussi bien des parents ou enfants (10 niveaux de parent/enfant)
    Id
    Libellé
    ParentId (qui est lié à l'Id de la même table).

    Via la requête Categorie_Req, j'ai une colonne qui met côte à côte et séparé par une étoile l'Id de tous les parents d'une catégorie. Donc si je choisi dans la liste déroulante la catégorie "Alimentation", la requête ci-dessus mis dans le "IN" remonte l'Id de "Alimentation" mais également de ses enfants "Boissons" et "Aliments", ses sous-enfants "Coca", "Jus de fruit", "Viande", etc.

    Encore merci.
    Bon WE.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 18h50
  2. Fonction MAX sur les lignes
    Par yostane dans le forum Langage SQL
    Réponses: 7
    Dernier message: 01/04/2006, 21h49
  3. questions sur les tabs a plusieurs dimensions
    Par rosviper45 dans le forum C
    Réponses: 16
    Dernier message: 27/11/2005, 14h20
  4. Focus sur les boutons avec plusieurs formulaire
    Par davids21 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/04/2005, 15h48

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