Appliquer un filtre sur une requete

8 réponses
Avatar
flateur18
Hello tlm,

Est-il possible d'appliquer la commande "DoCmd.ApplyFilter" sur une requete?

Si oui comment filtrer que les champs contenant "xxx" n'importe où dans la même ligne?

Pour faire ça mode création on fait dans critères : like '*xxx*'

Quel est l'équivalent en Visual Basic?

Merci d'avance

8 réponses

Avatar
3stone
Salut,

flateur18 wrote:
Est-il possible d'appliquer la commande "DoCmd.ApplyFilter" sur une
requete?




"sur une requête" ne vaux pas dire grand chose...

- soit c'est une requête action qui contiendra éventuellement
une ou des clauses Where
- soit c'est une requête de sélection (avec ou sans critère)
et elle sera la source d'un objet (liste, formulaire, état...)


Si oui comment filtrer que les champs contenant "xxx" n'importe où
dans la même ligne?




lorsque l'on a besoin de chercher "n'importe où", c'est en général
suite à un problème de conception...

Si l'on doit chercher/filtre "Paris", on cherchera dans la localité
et/ou éventuellement dans le nom de la rue, mais certainement
pas dans le nom ou le code postal du client...


Pour faire ça mode création on fait dans critères : like '*xxx*'

Quel est l'équivalent en Visual Basic?



ton "DoCmd.ApplyFilter" du début peut englober plusieurs champs...
et s'appliquer sur le formulaire en cours...

DoCmd.ApplyFilter ,"[Ville]='Paris' OR [Rue]='Paris' OR ID3"

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
flateur18
3stone a écrit le 09/07/2010 à 14h45 :
Salut,

flateur18 wrote:
Est-il possible d'appliquer la commande "DoCmd.ApplyFilter" sur une
requete?





"sur une requête" ne vaux pas dire grand chose...

- soit c'est une requête action qui contiendra éventuellement
une ou des clauses Where
- soit c'est une requête de sélection (avec ou sans
critère)
et elle sera la source d'un objet (liste, formulaire, état...)


Si oui comment filtrer que les champs contenant "xxx" n'importe

dans la même ligne?





lorsque l'on a besoin de chercher "n'importe où", c'est en
général
suite à un problème de conception...

Si l'on doit chercher/filtre "Paris", on cherchera dans la
localité
et/ou éventuellement dans le nom de la rue, mais certainement
pas dans le nom ou le code postal du client...


Pour faire ça mode création on fait dans critères : like
'*xxx*'

Quel est l'équivalent en Visual Basic?




ton "DoCmd.ApplyFilter" du début peut englober plusieurs
champs...
et s'appliquer sur le formulaire en cours...

DoCmd.ApplyFilter ,"[Ville]='Paris' OR [Rue]='Paris' OR ID3"

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)


Tu n'as pas très bien compri mon problème, ou c'est moi ki me suis mal exprimé,

J'ai une colonne date dans une requete simple (ou je choisi des colonnes de mes table)
Dans la colonne date qui est de format "text" j'ai par ex:

21-may-2010 11:05:11
14-jun-2010 15:20:52
...

je veux que mon filtre me donne la date d'hier

donc je fais

dim myDate as string
dim myDay as string
dim myMonth as string

myDay = Day(Date - 1)
myMonth = Month (Date - 1)
muDate = myDay & "-" & myMonth ' ce qui donne "myDate = 11-jul" pour la date d'hier

' j'ouvre ma requete pour y appliquer le filtre
DoCmd.OpenQuery "Siebel_debrief_Anomaly_Report", acViewNormal, acEdit
DoCmd.ApplyFilter , "[Part Tracker Last Updated Date] like ' * " & myDate & " * ' "

Mais cela ne marche pas, j'ai une erreur de syntaxe ici -----------------î

par contre quand je fais :
DoCmd.ApplyFilter , "[Part Tracker Last Updated Date] like ' * 11-jul * ' "
ça marche nikel

mon but c'est de l'automatiser donc j'ai besoin de la variable myDate
comment l'integrer à mon "DoCmd.ApplyFilter "

Merci
Avatar
3stone
Salut,

flateur18 wrote:
Tu n'as pas très bien compri mon problème, ou c'est moi ki me suis mal
exprimé,




c'est pas étonnant, avec un tel charabia ;-)


J'ai une colonne date dans une requete simple (ou je choisi des
colonnes de mes table)
Dans la colonne date qui est de format "text" j'ai par ex:




Pourquoi au format texte ???
Une date se sauve dans un champ au format date !


je veux que mon filtre me donne la date d'hier

donc je fais

dim myDate as string
dim myDay as string
dim myMonth as string

myDay = Day(Date - 1)
myMonth = Month (Date - 1)
muDate = myDay & "-" & myMonth ' ce qui donne "myDate = 11-jul"
pour la date d'hier

' j'ouvre ma requete pour y appliquer le filtre
DoCmd.OpenQuery "Siebel_debrief_Anomaly_Report", acViewNormal, acEdit
DoCmd.ApplyFilter , "[Part Tracker Last Updated Date] like ' * " &
myDate & " * ' "




Pourquoi ne complètes tu pas la requête par sa clause Where ?
D'autre part, ton ApplyFiltre s'applique au formulaire en cours
et non à une quelconque requête que tu aurais ouverte.

Dans l'éditeur, place le curseur sur une commande et appuie
sur la touche magique: F1


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
flateur18
3stone a écrit le 13/07/2010 à 14h37 :
Salut,

flateur18 wrote:
Tu n'as pas très bien compri mon problème, ou c'est moi ki me
suis mal
exprimé,





c'est pas étonnant, avec un tel charabia ;-)


J'ai une colonne date dans une requete simple (ou je choisi des
colonnes de mes table)
Dans la colonne date qui est de format "text" j'ai par ex:





Pourquoi au format texte ???
Une date se sauve dans un champ au format date !


je veux que mon filtre me donne la date d'hier

donc je fais

dim myDate as string
dim myDay as string
dim myMonth as string

myDay = Day(Date - 1)
myMonth = Month (Date - 1)
muDate = myDay & "-" & myMonth ' ce qui donne
"myDate = 11-jul"
pour la date d'hier

' j'ouvre ma requete pour y appliquer le filtre
DoCmd.OpenQuery "Siebel_debrief_Anomaly_Report", acViewNormal,
acEdit
DoCmd.ApplyFilter , "[Part Tracker Last Updated Date] like ' * "
&
myDate & " * ' "





Pourquoi ne complètes tu pas la requête par sa clause Where ?
D'autre part, ton ApplyFiltre s'applique au formulaire en cours
et non à une quelconque requête que tu aurais ouverte.

Dans l'éditeur, place le curseur sur une commande et appuie
sur la touche magique: F1


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)


C'est vrai que c'est du charabia ;)

En fait le fichier source est formaté en general sur toutes les colonnes.
Je ne peux pas y toucher car il est dans un emplacement réseau en lecture seule et lié à ma table access.

C'est vrai que le bouton F1 m'a souvent sauvé la vie :D mais pas cette fois.
Pour te dir ça fais plus d'une semaine que je suis sur cette même ligne de code car c'est la clé.

je programme en c++ en java ... il y a toujours un moyen de détourner les beugs mais ici appart ApplyFilter j'ai rien trouvé d'autre pour appliquer mon filtre.

le WHERE peut être une sollution, mais comment l'utiliser dans mon cas?
puis-je utiliser SET .....Where monchamp = une variable string ?

Je n'ai aucun formulaire!!! le résultat est envoyé par mail automatiquement avec un bouton que j'ai configuré pour.

je change tous les jours la date manuellement pour avoir les résultats de la veille, ça commence à m'enerver, de plus quand je ne suis pas là personne ne saura faire (les vaccances approchent ;))

Merci de ta patience
Avatar
3stone
Salut,

flateur18 wrote:
[...]
je veux que mon filtre me donne la date d'hier

donc je fais

dim myDate as string
dim myDay as string
dim myMonth as string

myDay = Day(Date - 1)
myMonth = Month (Date - 1)
muDate = myDay & "-" & myMonth ' ce qui donne
"myDate = 11-jul"
pour la date d'hier








Ton problème, en plus du champ texte, est que le mois
est au format anglais :

21-may-2010 11:05:11
14-jun-2010 15:20:52
...

Pour réellement automatiser, il te faut donc une fonction
qui retraduise cela en véritable date.
Ensuite, dans ta requête, tu crées un champ calculé (qui utilisera
la fonction) et tu y ajoutes un critère.

RealDate: ConvertDate([Part Tracker Last Updated Date])

et dans la ligne critère, tu écris [Entrez la date du filtre]
il suffira de saisir par exemple: 12-06-2010


La fonction à coller dans un module général:

Function MyDate(s As String) As Date
Dim JD As Integer
Dim MD As Integer
Dim AD As Integer
Dim Darray
'
Darray = Split(s, "-")
If UBound(Darray) = 2 Then
'/Jour
JD = Val(Darray(0))
'/Mois
Select Case UCase(Darray(1))
Case "JAN": MD = 1
Case "FEB": MD = 2
Case "MAR": MD = 3
Case "APR": MD = 4
Case "MAY": MD = 5
Case "JUN": MD = 6
Case "JUL": MD = 7
Case "AUG": MD = 8
Case "SEP": MD = 9
Case "OCT": MD = 10
Case "NOV": MD = 11
Case "DEC": MD = 12
Case Else: MD = Month(Date)
End Select
'/Année
AD = Val(Left(Darray(2), 4))
'/Date valide
MyDate = DateSerial(AD, MD, JD)
Else
MyDate = Date
End If
End Function

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
flateur18
3stone a écrit le 13/07/2010 à 22h29 :
Salut,

flateur18 wrote:
[...]
je veux que mon filtre me donne la date d'hier

donc je fais

dim myDate as string
dim myDay as string
dim myMonth as string

myDay = Day(Date - 1)
myMonth = Month (Date - 1)
muDate = myDay & "-" & myMonth ' ce qui donne
"myDate = 11-jul"
pour la date d'hier











Ton problème, en plus du champ texte, est que le mois
est au format anglais :

21-may-2010 11:05:11
14-jun-2010 15:20:52
...

Pour réellement automatiser, il te faut donc une fonction
qui retraduise cela en véritable date.
Ensuite, dans ta requête, tu crées un champ calculé (qui
utilisera
la fonction) et tu y ajoutes un critère.

RealDate: ConvertDate([Part Tracker Last Updated Date])

et dans la ligne critère, tu écris [Entrez la date du filtre]
il suffira de saisir par exemple: 12-06-2010


La fonction à coller dans un module général:

Function MyDate(s As String) As Date
Dim JD As Integer
Dim MD As Integer
Dim AD As Integer
Dim Darray
'
Darray = Split(s, "-")
If UBound(Darray) = 2 Then
'/Jour
JD = Val(Darray(0))
'/Mois
Select Case UCase(Darray(1))
Case "JAN": MD = 1
Case "FEB": MD = 2
Case "MAR": MD = 3
Case "APR": MD = 4
Case "MAY": MD = 5
Case "JUN": MD = 6
Case "JUL": MD = 7
Case "AUG": MD = 8
Case "SEP": MD = 9
Case "OCT": MD = 10
Case "NOV": MD = 11
Case "DEC": MD = 12
Case Else: MD = Month(Date)
End Select
'/Année
AD = Val(Left(Darray(2), 4))
'/Date valide
MyDate = DateSerial(AD, MD, JD)
Else
MyDate = Date
End If
End Function

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)


effectivement je fais :

Private Sub Command52_Click()
Dim destinataires As String
Dim Ydate As Date
Dim Yday As String
Dim Ymonth As String

Ydate = Date - 1
Yday = Day(Date - 4)
Ymonth = Month(Date - 1)
If Ymonth = "1" Then
Ymonth = "jan"
End If
....
...
If Ymonth = "12" Then
Ymonth = "Dec"
End If

'Selection de la date souhaitée (dans un filtre)
Dim maDate As String

maDate = "*" & Yday & "-" & Ymonth & "*"
'MsgBox (maDate)
DoCmd.OpenQuery "ma_query", acViewNormal, acEdit
DoCmd.ApplyFilter , "[champ_date] like maDate " ????? c'est là que j'ai tout essayé sans succès ????

'envoi du mail
DoCmd.SetWarnings False
destinataires = "moi" & ";" & "mail2" ...
DoCmd.SendObject acSendQuery, "ma_query", acFormatXLS, destinataires, , , "nom_du_fichier " & Date, "Hi," & vbLf & "Please find attached the anomalies debrief for " & Date - 1, False

End Sub


Quand je fais :
DoCmd.ApplyFilter , "[champ_date] like '*16-jun*' "
ça ne marche pas

j'ai essayé de mettre la date dans un textbox et de filter avec ça ne marche pas non plus, biensur avant j'ai fais :
Left(mon_champs_date, 6) ' pour ne laisser que (16-jun) dans mon champs date
DoCmd.ApplyFilter , "[champ_date] like textbox "

le problème c'est que applyfilter n'accepte pas de variable, mais uniquement du text, même si la varable est de type String

je commence à perdre patience!!! :(

Merci beaucoup pour ton interet
Si tu as une autre solution :D
Avatar
flateur18
flateur18 a écrit le 16/07/2010 à 16h10 :
3stone a écrit le 13/07/2010 à 22h29 :
Salut,

flateur18 wrote:
[...]
je veux que mon filtre me donne la date d'hier

donc je fais

dim myDate as string
dim myDay as string
dim myMonth as string

myDay = Day(Date - 1)
myMonth = Month (Date - 1)
muDate = myDay & "-" & myMonth ' ce qui donne
"myDate = 11-jul"
pour la date d'hier














Ton problème, en plus du champ texte, est que le mois
est au format anglais :

21-may-2010 11:05:11
14-jun-2010 15:20:52
...

Pour réellement automatiser, il te faut donc une fonction
qui retraduise cela en véritable date.
Ensuite, dans ta requête, tu crées un champ calculé (qui
utilisera
la fonction) et tu y ajoutes un critère.

RealDate: ConvertDate([Part Tracker Last Updated Date])

et dans la ligne critère, tu écris [Entrez la date du filtre]
il suffira de saisir par exemple: 12-06-2010


La fonction à coller dans un module général:

Function MyDate(s As String) As Date
Dim JD As Integer
Dim MD As Integer
Dim AD As Integer
Dim Darray
'
Darray = Split(s, "-")
If UBound(Darray) = 2 Then
'/Jour
JD = Val(Darray(0))
'/Mois
Select Case UCase(Darray(1))
Case "JAN": MD = 1
Case "FEB": MD = 2
Case "MAR": MD = 3
Case "APR": MD = 4
Case "MAY": MD = 5
Case "JUN": MD = 6
Case "JUL": MD = 7
Case "AUG": MD = 8
Case "SEP": MD = 9
Case "OCT": MD = 10
Case "NOV": MD = 11
Case "DEC": MD = 12
Case Else: MD = Month(Date)
End Select
'/Année
AD = Val(Left(Darray(2), 4))
'/Date valide
MyDate = DateSerial(AD, MD, JD)
Else
MyDate = Date
End If
End Function

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)



effectivement je fais :

Private Sub Command52_Click()
Dim destinataires As String
Dim Ydate As Date
Dim Yday As String
Dim Ymonth As String

Ydate = Date - 1
Yday = Day(Date - 4)
Ymonth = Month(Date - 1)
If Ymonth = "1" Then
Ymonth = "jan"
End If
....
...
If Ymonth = "12" Then
Ymonth = "Dec"
End If

'Selection de la date souhaitée (dans un filtre)
Dim maDate As String

maDate = "*" & Yday & "-" & Ymonth &
"*"
'MsgBox (maDate)
DoCmd.OpenQuery "ma_query", acViewNormal, acEdit
DoCmd.ApplyFilter , "[champ_date] like maDate " ????? c'est
là que j'ai tout essayé sans succès ????

'envoi du mail
DoCmd.SetWarnings False
destinataires = "moi" & ";" & "mail2" ...
DoCmd.SendObject acSendQuery, "ma_query", acFormatXLS, destinataires,
, , "nom_du_fichier " & Date, "Hi," & vbLf &
"Please find attached the anomalies debrief for " & Date - 1,
False

End Sub


Quand je fais :
DoCmd.ApplyFilter , "[champ_date] like '*16-jun*' "
ça ne marche pas

j'ai essayé de mettre la date dans un textbox et de filter avec
ça ne marche pas non plus, biensur avant j'ai fais :
Left(mon_champs_date, 6) ' pour ne laisser que (16-jun) dans mon champs date
DoCmd.ApplyFilter , "[champ_date] like textbox "

le problème c'est que applyfilter n'accepte pas de variable, mais
uniquement du text, même si la varable est de type String

je commence à perdre patience!!! :(

Merci beaucoup pour ton interet
Si tu as une autre solution :D


je rectifie

Quand je fais :
DoCmd.ApplyFilter , "[champ_date] like '*16-jun*' "
ca marche parfaitement

et

Yday = Day(Date - 1) et non -4 car je cherche les resultats de la veille

;;;;)
Avatar
flateur18
flateur18 a écrit le 16/07/2010 à 16h20 :
flateur18 a écrit le 16/07/2010 à 16h10 :
3stone a écrit le 13/07/2010 à 22h29 :
Salut,

flateur18 wrote:
[...]
je veux que mon filtre me donne la date d'hier

donc je fais

dim myDate as string
dim myDay as string
dim myMonth as string

myDay = Day(Date - 1)
myMonth = Month (Date - 1)
muDate = myDay & "-" & myMonth ' ce qui donne
"myDate = 11-jul"
pour la date d'hier

















Ton problème, en plus du champ texte, est que le mois
est au format anglais :

21-may-2010 11:05:11
14-jun-2010 15:20:52
...

Pour réellement automatiser, il te faut donc une fonction
qui retraduise cela en véritable date.
Ensuite, dans ta requête, tu crées un champ calculé (qui
utilisera
la fonction) et tu y ajoutes un critère.

RealDate: ConvertDate([Part Tracker Last Updated Date])

et dans la ligne critère, tu écris [Entrez la date du filtre]
il suffira de saisir par exemple: 12-06-2010


La fonction à coller dans un module général:

Function MyDate(s As String) As Date
Dim JD As Integer
Dim MD As Integer
Dim AD As Integer
Dim Darray
'
Darray = Split(s, "-")
If UBound(Darray) = 2 Then
'/Jour
JD = Val(Darray(0))
'/Mois
Select Case UCase(Darray(1))
Case "JAN": MD = 1
Case "FEB": MD = 2
Case "MAR": MD = 3
Case "APR": MD = 4
Case "MAY": MD = 5
Case "JUN": MD = 6
Case "JUL": MD = 7
Case "AUG": MD = 8
Case "SEP": MD = 9
Case "OCT": MD = 10
Case "NOV": MD = 11
Case "DEC": MD = 12
Case Else: MD = Month(Date)
End Select
'/Année
AD = Val(Left(Darray(2), 4))
'/Date valide
MyDate = DateSerial(AD, MD, JD)
Else
MyDate = Date
End If
End Function

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)




effectivement je fais :

Private Sub Command52_Click()
Dim destinataires As String
Dim Ydate As Date
Dim Yday As String
Dim Ymonth As String

Ydate = Date - 1
Yday = Day(Date - 4)
Ymonth = Month(Date - 1)
If Ymonth = "1" Then
Ymonth = "jan"
End If
....
...
If Ymonth = "12" Then
Ymonth = "Dec"
End If

'Selection de la date souhaitée (dans un filtre)
Dim maDate As String

maDate = "*" & Yday & "-" & Ymonth &
"*"
'MsgBox (maDate)
DoCmd.OpenQuery "ma_query", acViewNormal, acEdit
DoCmd.ApplyFilter , "[champ_date] like maDate " ????? c'est
là que j'ai tout essayé sans succès ????

'envoi du mail
DoCmd.SetWarnings False
destinataires = "moi" & ";" & "mail2"
...
DoCmd.SendObject acSendQuery, "ma_query", acFormatXLS,
destinataires,
, , "nom_du_fichier " & Date, "Hi," & vbLf &
"Please find attached the anomalies debrief for " & Date - 1,
False

End Sub


Quand je fais :
DoCmd.ApplyFilter , "[champ_date] like '*16-jun*' "
ça ne marche pas

j'ai essayé de mettre la date dans un textbox et de filter avec
ça ne marche pas non plus, biensur avant j'ai fais :
Left(mon_champs_date, 6) ' pour ne laisser que (16-jun) dans mon champs date
DoCmd.ApplyFilter , "[champ_date] like textbox "

le problème c'est que applyfilter n'accepte pas de variable, mais
uniquement du text, même si la varable est de type String

je commence à perdre patience!!! :(

Merci beaucoup pour ton interet
Si tu as une autre solution :D



je rectifie

Quand je fais :
DoCmd.ApplyFilter , "[champ_date] like '*16-jun*' "
ca marche parfaitement

et

Yday = Day(Date - 1) et non -4 car je cherche les resultats de la veille

;;;;)


Pour ceux que ça interesse, j'ai réussi a sollutionner le problème :

DoCmd.ApplyFilter , "[mon champs Date] Like '*" & maDate & "*'"

c'étais un problme de syntaxe.

Merci ;)