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 :

Générer un état access en fonction de résultat d'un filtre [AC-2010]


Sujet :

Access

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut Générer un état access en fonction de résultat d'un filtre
    Bonjour à toutes et à tous,

    Je suis entrain de créer une simple application sur access et je souhaite pouvoir extraire quelques résultats générés par un de mes formulaires. Je m'explique :

    soit ma table (T) et soit (F) un formulaire contenant un module de recherche multicritère qui me permet d'afficher les résultats sous une sous table (sous formulaire) tout dépend des critères qu'on a mis sur ce module.
    Je souhaite par la suite, créer un état qui contient uniquement les résultats de recherche après filtrage, et c'est là où je bloque. J'ai cherché partout sur les forums et les tuto mais j'ai rien trouvé.
    Y a-t-il quelqu'un qui a une idée de la génération d'un état qui change après chaque filtrage ?
    Merci par avance, je vous serais très reconnaissante.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonjour,

    Il faut créer un état dont la source correspond à la source de ton sous-formulaire et l'ouvrir à partir de ton formulaire en transmettant le filtre du sous-formulaire par l'argument de la commande Docmd.OpenReport.

    Cordialement,

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour

    pour etre plus précis, c'est le 4 eme argument de OpenReport qui accepte le filtre
    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DoCmd.OpenReport "xxxx", acViewPreview, , IIf(Me.FilterOn, Me.filter, Null)

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour vos retours.
    Alors suivant la réponse de "madefemere", j'ai réussi à avoir un état lié à ma table de la sous-forme mais... je n'ai pas pu avoir des résultats liés uniquement aux résultats du filtre en utilisant ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DoCmd.OpenReport "xxxx", acViewPreview, , IIf(Me.FilterOn, Me.filter, Null)
    Alors, sachant que ma sous-forme est : sformReport donc j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport "sformReport", acViewPreview, , IIf(Me.FilterOn, Me.filter, Null)
    Quel est le problème s'il vous plait ?

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonsoir,

    Non, voilà ce que tu devrais faire :
    1- Tu as un sous-formulaire qui est basé sur une requête ou une table ou un code SQL. C'est ce qui est écrit dans sa propriété Données - Source ou que tu modifierais en VBA avec "Recordsource".
    2- Tu crées un état "E_xxxx" ayant la même source (Requête, état ou code SQL).

    Comment tu fais le filtre sur ton sous-formulaire ?
    Tu modifies le Recordsource OU tu lui appliques un filtre en utilisant sa propriété Filter ?
    Parce que la suite dépend de cela.

    Cordialement,

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Pour le sous formulaire , effectivement il est basé sur ma table principale ( au fait, j'ai une seule table).
    Pour le filtre je n'utilise pas la propriété Filter : ci joint une capture d'écran du formulaire et la sform incluse Nom : Form et sform.PNG
Affichages : 1104
Taille : 31,6 Ko
    et sur le code je modifie le Recordsource pour l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.Form![SousForm].Form.RecordSource = SQL_String
             DoCmd.Requery "SousForm"

  7. #7
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    tu peux utiliser ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport "sformReport", acViewPreview, , IIf(Me.SubForm.Form.FilterOn, Me.SubForm.Form.filter, Null)
    SubForm=nom de l'objet qui contient la sous forme

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Toujours Rien.. , vous n'avez pas d'autres idées ?

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonjour,

    Peux-tu donner la totalité de ton code pour filtrer ton sous-formulaire.
    Que contient ton SQL_String ?

    Cordialement,

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Biensur, Le voila :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    Private Sub Btn_Recherche_Click()
    '
    ' Fonction attachée au bouton permettant de modifier les filtres sur la recherche d'articles
    '
    On Error Resume Next
    Dim SQL_String As String
    SQL_String = "SELECT Produits.* FROM Produits"
    '
    ' Initialisation du filtre afin de determiner si la concaténation de la châine commence par un where ou un and
    '
    Filtre_Actif = False
    '
    ' Filtre désignation 'dans la châine'
    '
    CF_Filtre = Me.Designation
    If IsNull(CF_Filtre) Or CF_Filtre = "" Then CF_Filtre = ""
    Select Case CF_Filtre
    Case Is > ""
        Select Case Filtre_Actif
        Case True
            SQL_String = SQL_String & " AND ((Produits.Nom_Produit) Like " & Chr(34) & "*" & CF_Filtre & "*" & Chr(34) & ")"
        Case False
            SQL_String = SQL_String & " WHERE (((Produits.Nom_Produit) Like " & Chr(34) & "*" & CF_Filtre & "*" & Chr(34) & ")"
        End Select
        '
        Filtre_Actif = True
    End Select
     
    '
    ' Filtre Famille_Produit
    '
    CF_Filtre = Me.F_Produit
    If IsNull(CF_Filtre) Or CF_Filtre = "" Then CF_Filtre = ""
    Select Case CF_Filtre
    Case Is > ""
        Select Case Filtre_Actif
        Case True
            SQL_String = SQL_String & " AND ((Produits.Famille_Produit) = " & Chr(34) & CF_Filtre & Chr(34) & ")"
        Case False
            SQL_String = SQL_String & " WHERE (((Produits.Famille_Produit) = " & Chr(34) & CF_Filtre & Chr(34) & ")"
        End Select
        '
        Filtre_Actif = True
    End Select
     
    '
    'Stock Statut
    '
    CF_Filtre = Me.Statut_Stock
    If IsNull(CF_Filtre) Or CF_Filtre = "" Then CF_Filtre = ""
    Select Case CF_Filtre
    Case Is > ""
        Select Case Filtre_Actif
        Case True
            SQL_String = SQL_String & " AND ((Produits.Product_Statut) = " & Chr(34) & CF_Filtre & Chr(34) & ")"
        Case False
            SQL_String = SQL_String & " WHERE (((Produits.Product_Statut) = " & Chr(34) & CF_Filtre & Chr(34) & ")"
        End Select
        '
        Filtre_Actif = True
    End Select
     
     
    '
    ' Filtre Fournisseur 'dans la châine'
    '
    CF_Filtre = Me.Fournisseurs
    If IsNull(CF_Filtre) Or CF_Filtre = "" Then CF_Filtre = ""
    Select Case CF_Filtre
    Case Is > ""
        Select Case Filtre_Actif
        Case True
            SQL_String = SQL_String & " AND ((Produits.Fournisseur) Like " & Chr(34) & "*" & CF_Filtre & "*" & Chr(34) & ")"
        Case False
            SQL_String = SQL_String & " WHERE (((Produits.Fournisseur) Like " & Chr(34) & "*" & CF_Filtre & "*" & Chr(34) & ")"
        End Select
        '
        Filtre_Actif = True
    End Select
     
    '
    ' opérateur de fin de chaine
    '
    Select Case Filtre_Actif
        Case True
            SQL_String = SQL_String & ");"
        Case False
            SQL_String = SQL_String & ";"
        End Select
     
     
    '
    ' Changement du RecordSource du sous formulaire en fonction des filtres !
    '
    Me.Form![liste_Produits].Form.RecordSource = SQL_String
     
    DoCmd.Requery "liste_Produits"
     
    End Sub

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonsoir,

    Donc, il te faut créer un état avec comme source la table "Produits" et y mettre les champs nécessaires, disons l'état "E_Produit".

    Ensuite,en partant de ce que tu fais (utiliser le code du recordsource de ton sous-formulaire), il faut attribuer ce code à la source de ton état par code.
    Attention, cette opération ne peut se faire qu'avec un état en mode création
    Pour que le variable correspondant SQL_String soit disponible, il faut le mettre en "PUBLIC" dans l'en-tête de tes modules.

    Ensuite, le code pour l'ouverture de ton état ressemblerait à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Application.Echo False
    DoCmd.OpenReport "E_Produit", acViewDesign                     'Ouvrir l'état en mode création
    Reports!SE_PrixLocation.Report.RecordSource = SQL_String   'Attribuer la valeur de la source du sous-formulaire
    DoCmd.Close acReport, "E_Produit", acSaveYes                   'Fermer l'état 
    Application.Echo True
    DoCmd.OpenReport "E_Produit", acViewPreview                     'Ouvrir l'état en mode création
    Cordialement,

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Le code me permet d'ouvrir l'état mais un état contenant une seule ligne qui contient sur toutes les colonne la valeur #Nom!.
    Il me semble que ce code ouvre l'état en mode création puis il supprime la source de l'état (qui est censé être la table) et il ne ramène pas par la suite le recordsource de la sform. ps: j'ai mis SQL_String en public.

  13. #13
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonjour,

    On y arrive !!
    Si :
    Le code me permet d'ouvrir l'état mais un état contenant une seule ligne qui contient sur toutes les colonne la valeur #Nom!.
    Donc on a un problème dans la source de l'état. Si tu imprimes le SQL_String avec unen première ligne du code, qu'est-ce que ça donne ?
    Quand tu dis :
    ps: j'ai mis SQL_String en public.
    Est-ce que c'est dans l'en-tête des modules du formulaire que tu le définis ? (pour que le variable soit accessible à tous les modules)

    Cordialement

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    comment peut on imprimer SQL_String avec un en première ligne du code (j'ai pas compris )
    Pour la déclaration de SQL_String , oui je l'ai définis dans l'en tête ... c'est à dire juste après "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Option Compare Database
    " , j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Public SQL_String As String
    , c'est bien ca ??

  15. #15
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut [Résolu] : Grace à vouuuuuss!
    Re bonjour,

    Alors , j'ai pu trouver des réponses pour mes deux dernières question et à ce qu'il parrait le code que vous m'avez donné fonctionne et exactement comme je le voulais!
    Je vais mettre quelques détails pour que cette discussion pourra aider plus tard des personnes comme ca m'a aidé moi cette fois ci. Donc le problème pour mon code était ca :
    lorsque vous me l'avez fourni, je travaillais sur deux procédures d'évenement sur clique : la première en cliquant sur Recherche et ca m'affichera par la suite les résultats sur lécran ( ce qui fonctionnait depuis le début) et la deuxième en cliquant sur un bouton qui m'affichera uniquement les résultats de ma recherche sur un état que j'ai déjà créé (et c'est là où était mon problème). La solution est donc de mettre le code suivant avec la programmation du bouton Recherche (que j'ai déjà partagé) sans créer un deuxième bouton pour afficher l'état :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Debug.Print SQL_String
    Application.Echo False
    DoCmd.OpenReport "E_Produit", acViewDesign                     'Ouvrir l'état en mode création
    Reports!E_Produit.Report.RecordSource = SQL_String   'Attribuer la valeur de la source du sous-formulaire
    DoCmd.Close acReport, "E_Produit", acSaveYes                   'Fermer l'état 
    Application.Echo True
    DoCmd.OpenReport "E_Produit", acViewPreview                     'Ouvrir l'état en mode création
    et ca me donne exactement ce que j'ai souhaité avoir.

    Vraiment je trouve pas les mots pour vous remercier. Merci infiniment.

    Bien à vous.

  16. #16
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonjour,

    En fait, je proposais d'imprimer la valeur de SQL_String dans la fenêtre d'exécution en mettant un
    avant la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reports!SE_PrixLocation.Report.RecordSource = SQL_String   'Attribuer la valeur de la source du sous-formulaire
    Peut-être qu'un exemple vaut mieux que tout ce texte.

    Tu trouveras en pièce jointe une petite base exemple très simple avec 2 méthodes :
    La première en changeant la source du sous-formulaire et la deuxième en utilisant la propriété Filter du sous-formulaire :

    Une seule table "T_CouleurLivraison" avec 5 champs.
    - Méthode 1 (ce que tu utilises): - Formulaire "F_Recherche_SQL_source" avec le sous-formulaire "F_CouleurLivraison" et ouverture de l'état "E_CouleurLivraison_SQL_Source" avec la source du sous-formulaire.
    - Méthode 2 : - Formulaire "F_Recherche_Filter" avec le sous-formulaire "F_CouleurLivraison" et ouverture de l'état "E_CouleurLivraison_Filtre" en utilisant la propriété Filter du sous-formulaire.

    Cordialement,
    Fichiers attachés Fichiers attachés

  17. #17
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Merci madefemere , je vais essayer par la suite la deuxième methode en utilisant la propriété du filtre. Le sujet est maintenant résolu comme j'ai expliqué sur mon dernier message.
    Merci encore et espérons que ce sujet servira d'autres personnes.

    Bien à vous.

  18. #18
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut Résultats non filtré sur l'état après transformation de la base en .accde
    Bonjour A tous,

    J'ai encore besoin de votre aide.
    Mainetanant et après finalisation de mon application, j'ai procédé à sa transformation en fichier .accde au lieu .accdb. apparement et à cause de mon état qui est déja ouvert en mode création pour s'adapter au filtre, je n'ai plus un état correspondant aux résultats après filtrage. ... avez vous une solution ?
    j'ai vraiment besoin de votre aide

  19. #19
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonjour,

    Argh !!
    Tu as utilisé la première ou la deuxième méthode ?

    Je crois bien qu'on ne peut pas modifier la source d'un état avec un fichier .accde (impossible de passer en mode création). Donc il te faut obligatoirement passer par la méthode 2.

    Cordialement,

  20. #20
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    J'ai utilisé la première méthode ..
    Donc vous confirmez que c'est a cause de l'ouverture de l'état en mode création que ca ne fonctionne pas en .accde ??
    Pourriez vous m'aider sur le code à mettre pour faire les choses avec la 2eme méthode ???
    En utilisant la deuxième méthode , dois je modifier toute la méthode utilisée pour l'affichage des résultats sur le sous formulaire ???
    Je suis Perdue !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/02/2014, 17h37
  2. [Toutes versions] Créer un état mis en forme en fonction des résultats d'une requête
    Par Rodrigue dans le forum IHM
    Réponses: 1
    Dernier message: 19/11/2010, 09h07
  3. Réponses: 6
    Dernier message: 05/01/2009, 16h33
  4. Réponses: 4
    Dernier message: 15/08/2008, 19h34
  5. Réponses: 13
    Dernier message: 28/09/2007, 11h55

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