Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/04/2011, 11h52   #1
Membre confirmé
 
Avatar de Oliv'83
 
Homme Mon prénom cherche, c'est pas très dur...
Directeur commercial
Inscription : mars 2008
Messages : 356
Détails du profil
Informations personnelles :
Nom : Homme Mon prénom cherche, c'est pas très dur...
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Directeur commercial
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : mars 2008
Messages : 356
Points : 216
Points : 216
Par défaut Filtrer les données d'une requête en passant par VBA

Bonjour à tous,

Je voudrais pouvoir filtrer les résultats d'une requête qui me sert à allimenter un état. J'arrive bien à filtrer le résultat sur l'état mais pas sur la requête. Je ne suis pas sûr de mon explication donc voici le code concerné :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim periode_debut As Date
Dim periode_fin As Date
Dim stLinkCriteria As String
 
periode_debut = Me.Txt_Date_Debut
 
periode_fin = Me.Txt_Date_Fin
 
stLinkCriteria = "[Date_début] BETWEEN #" & Format(periode_debut, "MM/dd/yyyy") & "# AND #" & Format(periode_fin, "MM/dd/yyyy") & "#"
 
DoCmd.OpenReport "Etat_Cumul_Mensuel_Statistique", acViewPreview, , stLinkCriteria
DoCmd.OpenQuery "rqt_Cumul_Mensuel_Statistique"
 
End Sub
Dans ce cas Etat_Cumul_Mensuel_Statistique s'affiche sans problème avec le filtre mais je n'arrive pas à formuler la même chose pour rqt_Cumul_Mensuel_Statistique, car je ne sais pas comment lui transmettre le filtre stLinkCriteria.

Merci d'avance de votre aide

Oliv'
Oliv'83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2011, 16h10   #2
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Hello Oliv
Joli filtre, juste une proposition de concentation maximale du code
Code :
DoCmd.OpenReport "Etat_Cumul_Mensuel_Statistique", acViewPreview, ,"[Date_début] BETWEEN #" & Format(Txt_Date_Debut, "MM/dd/yyyy") & "# AND #" & Format(Txt_Date_Fin, "MM/dd/yyyy") & "#"
ou un peu moins maximale
Code :
1
2
3
Dim stLinkCriteria As String
stLinkCriteria = "[Date_début] BETWEEN #" & Format(Txt_Date_Debut, "MM/dd/yyyy") & "# AND #" & Format(Txt_Date_Fin, "MM/dd/yyyy") & "#"
DoCmd.OpenReport "Etat_Cumul_Mensuel_Statistique", acViewPreview, , stLinkCriteria
effectivement, je ne pense pas qu'il soit possible de filtrer une requête

une solution consiste à mettre déja le texte SQL de ta requête dans une variable, puis d'y rajouter le filtre qui t'interresse.

Attentiion, suivant le SQL, le filtre peut se placer à différents endroits.

je ne sais pas non plus récupérer le SQL d'une requête enregistrée mais c'est peut être possible
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/04/2011, 18h36   #3
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Sous réserve que la colonne filtrée soit affichée, on doit pouvoir faire comme ça
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim periode_debut As Date
Dim periode_fin As Date
Dim strRequete As String
Dim strFilter As String
Dim fm As Access.Form
 
strRequete = "rqt_Cumul_Mensuel_Statistique"
periode_debut = Me.Txt_Date_Debut
periode_fin = Me.Txt_Date_Fin
strFilter = "[Date_début] BETWEEN #" & Format(periode_debut, "MM/dd/yyyy") & "# AND #" & Format(periode_fin, "MM/dd/yyyy") & "#"
' S'assure que la requête est fermée, puis l'ouvre
DoCmd.Close acQuery, strRequete
DoCmd.OpenQuery strRequete, acViewNormal, acReadOnly
' Filtre l'affichage de la requête
Set fm = Screen.ActiveDatasheet
fm.Filter = strFilter
fm.FilterOn = True
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/04/2011, 19h42   #4
Membre confirmé
 
Avatar de Oliv'83
 
Homme Mon prénom cherche, c'est pas très dur...
Directeur commercial
Inscription : mars 2008
Messages : 356
Détails du profil
Informations personnelles :
Nom : Homme Mon prénom cherche, c'est pas très dur...
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Directeur commercial
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : mars 2008
Messages : 356
Points : 216
Points : 216
Bonsoir Messieurs,

Et merci pour vos réponses.

Simplifi je reconnais que l'on pouvait bien mieux concentrer le code comme tu me le proposes mais comme je ne suis pas un "professionnel" j'aime bien essayer de trouver des formules assez "bateau" que je puisse réutiliser facilement. Dans ce cas précis il ne me reste qu'à changer une fois les 2 Me.Txt_... pour que cela fonctionne avec un autre formulaire...

LedZeppII, merci ton code fonctionne parfaitement et j'obtiens exactement ce que je souhaitais. Je ne suis pas assez érudit en VBA pour comprendre la ligne 15 mais cela fonctionne alors dès que j’aurais 2 minutes je me concentrerai pour essayer de la comprendre. Pourquoi faut il impérativement contrôler que la requête soit fermée?

Encore une fois merci à vous 2 et bonne soirée et n'oubliez pas d'aller à la chasse aux oeufs demain. Joyeuses Pâques.

Oliv'
Oliv'83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 11h39   #5
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Merci beaucoup
je ne connaissais pas
Code :
Set fm = Screen.ActiveDatasheet
j'ai donc appris quelquechose
Joyeuses Pâques
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 19h20   #6
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Citation:
Envoyé par Oliv'83 Voir le message
Je ne suis pas assez érudit en VBA pour comprendre la ligne 15 mais cela fonctionne alors dès que j’aurais 2 minutes je me concentrerai pour essayer de la comprendre.
L'objet Screen du modèle objet Access permet de récupérer une référence au formulaire actif (.ActiveForm), à l'état actif (.ActiveReport), ou à l'objet table (ou requête) actif (.ActiveDatasheet).
Comme Screen.ActiveDatasheet renvoie une référence à un objet de type Form, on peut y appliquer un filtre.

Citation:
Envoyé par Oliv'83 Voir le message
Pourquoi faut il impérativement contrôler que la requête soit fermée?
Ce n'est pas un impératif.
C'est juste une précaution que j'ai l'habitude de coder.


A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/04/2011, 12h07   #7
Membre confirmé
 
Avatar de Oliv'83
 
Homme Mon prénom cherche, c'est pas très dur...
Directeur commercial
Inscription : mars 2008
Messages : 356
Détails du profil
Informations personnelles :
Nom : Homme Mon prénom cherche, c'est pas très dur...
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Directeur commercial
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : mars 2008
Messages : 356
Points : 216
Points : 216
Citation:
Envoyé par LedZeppII Voir le message
L'objet Screen du modèle objet Access permet de récupérer une référence au formulaire actif (.ActiveForm), à l'état actif (.ActiveReport), ou à l'objet table (ou requête) actif (.ActiveDatasheet).
Comme Screen.ActiveDatasheet renvoie une référence à un objet de type Form, on peut y appliquer un filtre.
Merci de tes précisions mais je n'y comprends pas grand chose . Je vais attendre la fin de ma saison (mi-octobre) et je me repencherai sérieusement dessus.

Bonne journée à tous

Oliv'
Oliv'83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h12.


 
 
 
 
Partenaires

Hébergement Web