OVH Cloud OVH Cloud

débutante : probleme d'écriture de filtre

15 réponses
Avatar
Sabine B.
Bonjour
Je chercher à trier des enregistrements à l'aide d'une procédure
évenementielle, je dois avoir un problème de définition de valeurs...je me
demande si je ne mélange pas des carottes et des navets!
Sur la commande clic d'un bouton rechercher d'une boite de dialogue j'ai la
procédure qui suit qui fonctionne bien .
Je cherche pour une autre boite de dialogue à faire presque la même chose la
seule différence étant que je veux ajouter un critère autre que la date dans
mon filtre mais Hélas access m'affiche lors de l'execution de cette
procédure :Incompatibilité de type?????
Fonctionne:
Select Case Me!ChoixConsultation
Dim Filter As String
Case 1
Filter = "[DateRMN2]=Date()"
DoCmd.OpenReport "CahierRMN", acViewPreview, , Filter
Case 2
Filter = "[DateRMN2]> Date()-8"
DoCmd.OpenReport "CahierRMN", acViewPreview, , Filter
Case 3
If IsNull([DateDebut]) Or IsNull([DateFin]) Then
MsgBox "Vous devez taper une date de début et une date de fin."
DoCmd.GoToControl "DateDebut"
Else
If [DateDebut] > [DateFin] Then
MsgBox "La date de fin doit être postérieure à la date de
début."
DoCmd.GoToControl "DateDebut"
Else
Filter = "[DateRMN2]Between Forms![BdeD_RMN_C]![DateDebut]and
[Forms]![BdeD_RMN_C]![DateFin] "
End If
End If
DoCmd.OpenReport "CahierRMN", acViewPreview, , Filter
End Select

Ne Fonctionne pas:
Dim Filter2 As String
Const ConstValeurInstrument = 4
Select Case Me!ChoixConsultation
Case 1
Filter2 = "[DateMS2]=Date()"
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2
Case 2
Filter2 = "[DateMS2]> Date()-20" And
"[NumRefAppareil].value=ConstValeurInstrument"
'ouvre le rapport cahier MS sur les 20 derniers jours pour l'instrument 4
(NumRefAppareil étant la clé primaire de ma table)
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2
Case 3
If IsNull([DateDebut]) Or IsNull([DateFin]) Then
MsgBox "Vous devez taper une date de début et une date de fin."
DoCmd.GoToControl "DateDebut"
Else
If [DateDebut] > [DateFin] Then
MsgBox "La date de fin doit être postérieure à la date de
début."
DoCmd.GoToControl "DateDebut"
Else
Filter2 = "[DateMS2]Between Forms![BdeD_LCQ_C]![DateDebut]and
[Forms]![BdeD_LCQ_C]![DateFin]"
End If
End If
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2
End Select

Merci pour votre aide.

Sabine

5 réponses

1 2
Avatar
Sabine B.
Bonsoir Jean-Pierre
Merci Jean-Pierre pour la petite astuce de la messageBox!
J'ai aussi suivi ton conseil et aie ajouté Option explicit en début.
J'ai appliqué tout ceci au problème que j'ai sur mon autre filtre et la
boîte m'annonce: RIEN!!! dans la case filtre!!
Dim Filter2 As String
Select Case Me!ChoixConsultation
...
Case 2
Const ConstValeurInstrument = 4
Filter2 = "[NumRefAppareil].value =" & ConstValeurInstrument
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2
Mais je ne desespère pas!

Merci à toi aussi Eric car ta remarque sur les dates US et françaises m'a
fait regarder de plus pret ce que ma requette me rapportait.......comme
enregistrement.
Je viens de faire des tests et je dirais que c'est carrément vicieux!!!
Je n'ai que peu d'enregistrements pour vérifier mais cela m'a permis de
comprendre:
Voici la liste des mes enregistrements:
09.03.06
27.03.06
30.03.06
18.05.06
09.11.06
18.11.06
19.11.06

Si je tape: 01.03.06 et 25.03.06 j'ai le résultat: 09.03.06

Si je tape: 01.03.06 et 10.03.06 j'ai le résultat
09.03.06
27.03.06
30.03.06
18.05.06

En fait il prend par défaut la date version US mais si la date tapée ne peut
être une date US alors il considère que c'est un format français....

Je n'avais pas vu cela...Hélas en testant j'ai choisi au hasard des dates
qui ne permettaient pas de mettre en évidence cela.!!!

Éric j'ai rajouté le format de la date comme tu me l'a conseillé

Filter = "[DateRMN2] Between #" & _
Format(Forms![BdeD_RMN_C]![DateDebut],"mm/dd/yyyy") & "# And #" & _
Format(Forms![BdeD_RMN_C]![DateFin],"mm/dd/yyyy") & "#"
Je saisie ma date jj/ mm/ aa comme elle est prédéfinie dans le masque
(00/00/00;;_) de saisie et le format "date abrégée" du champ de mon
formulaire.
Si je comprend bien il traduit en format US afin de faire la comparaison?...

Enfin maintenant quand je tape: 01.03.06 et 10.03.06 j'ai le résultat
09.03.06 c'est à dire le bon résultat!!


merci à vous deux de cet échange très fructueux!!

Vous m'avez résolu un problème dont je ne soupconnais même pas l'existance!!
Il me reste mon probleme initial!!

Je ne pensais pas avoir autant de boulot sur cette petite procédure....


Bonne soirée et merci encore

Sabine


"Eric" a écrit dans le message de news:

re Jean-Pierre,

Dans le générateur de requête, je suis d'accord avec toi, le format Fr ne
pose pas de problème, mais si tu regardes le SQL généré par le générateur,
tu y verras les dates transposées au format americain.
Par contre, sur la clause d'un filtre que tu écris en US puisque tu as mis
un 'BETWEEN' et 'AND' tu dois les inscrire au format US.

Ok ?

Bonsoir Eric,

Je viens de faire le test en reprenant tes dates, j'ai fait une requête
avec comme critère de sélection:

= #03/05/06# Et <= #10/05/06#:


Les lignes sélectionnées vont bien du 3 au 10 mai 2006.

J'abandonne, toute personne voulant bien faire des tests poussés
bénéficiera de ma reconnaissance éternelle :-)

J-Pierre

"Eric" a écrit dans le message de news:


Bonsoir Jean-Pierre,


...
Sabine a précisé qu'elle était débutante......


Oui, peut-être, mais si sa date de début est le 03/05/06
et celle de fin le 10/05/06 (en date au format français)
elle récupèrera la période du 5 mars 06 au 5 octobre 06
donc vaut mieux la prévenir, ne crois-tu pas ?


Au demeurant, avec ces formats, il y a assez longtemps, je ne me
souviens plus des détails, mais il me semble qu'une date au format
américain, par exemple 11/12/2006 était mal interprétée par un système
en français. Perso, j'utilise toujours YYYY/MM/DD comme masque, et ça,
ça marche toujours quel que soit l'environnement.


Jamais eu de probleme avec des dates au format US dans du SQL.
Mais, sait-on jamais ...

--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr





Avatar
Jean-Pierre
Bonsoir Sabine,

Je ne suis pas très sûr de comprendre le problème.

Il me semble que la propriété value n'existe pas pour [NumRefAppareil] car tu veux filtrer les lignes de ta table et tu
références un champ de ta table, si tu avais un contrôle dans ton formulaire, là, oui, tu pourrais utiliser
Me.[NumRefAppareil].value, mais même dans ce cas, si tu n'indiques aucune propriété, juste Me.[NumRefAppareil], value est pris
par défaut.
Essaie le code suivant:

Dim Filter2 As String
Select Case Me!ChoixConsultation
......
Case 2
Const ConstValeurInstrument = 4
Filter2 = "[NumRefAppareil] =" & ConstValeurInstrument
MsgBox Filter2
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2

Enfin, c'est bien qu'Eric soit intervenu, j'ai été bête, comme tu disais que c'était bon, je n'ai pas cherché plus loin,
j'aurais dû, en plus, c'est un problème archiconnu qui revient très souvent dans ce NG.

Bref, à demain sans doute :-)

J-Pierre
Avatar
Sabine B.
Bonjour à tous

Je viens d'essayer ton conseil Jean-pierre et en effet si je ne mets pas
value...cela fonctionne la valeur rapportée dans le filtre est la bonne.
J'ai donc testé ces deux filtres qui vont très bien l'un sans l'autre !!!
Filter2 = "[DateMS2]> Date()-8"
Filter3 = "[NumRefInstrument]= " & ConstValeurInstrument

J'ai essayé de les associer de deux façons:

Filter2 = "[DateMS2]> Date()-8" And "[NumRefInstrument]= " &
ConstValeurInstrument
MsgBox Filter2
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2
la boîte s'ouvre avec un message Incompatibilité de type

deuxième test:

Filter2 = "[DateMS2]> Date()-8"
Filter3 = "[NumRefInstrument]= " & ConstValeurInstrument
MsgBox Filter2
MsgBox Filter3
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2 And Filter3

Les deux boîtes s'ouvrent en donnant les bonnes valeur et après s'ouvre la
boîte Incompatibilité de type...

Conclusion , je viens de voir qu'il existe un livre VBA pour Access pour le
nuls.... je vais commencer par cela et arrêter d'enquiquiner tout le
monde!!!


Merci encore Eric et Jean-pierre pour votre aide précieuse!

Bonne journée

Sabine


"Jean-Pierre" a écrit dans le
message de news:
Bonsoir Sabine,

Je ne suis pas très sûr de comprendre le problème.

Il me semble que la propriété value n'existe pas pour [NumRefAppareil] car
tu veux filtrer les lignes de ta table et tu références un champ de ta
table, si tu avais un contrôle dans ton formulaire, là, oui, tu pourrais
utiliser Me.[NumRefAppareil].value, mais même dans ce cas, si tu
n'indiques aucune propriété, juste Me.[NumRefAppareil], value est pris par
défaut.
Essaie le code suivant:

Dim Filter2 As String
Select Case Me!ChoixConsultation
......
Case 2
Const ConstValeurInstrument = 4
Filter2 = "[NumRefAppareil] =" & ConstValeurInstrument
MsgBox Filter2
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2

Enfin, c'est bien qu'Eric soit intervenu, j'ai été bête, comme tu disais
que c'était bon, je n'ai pas cherché plus loin, j'aurais dû, en plus,
c'est un problème archiconnu qui revient très souvent dans ce NG.

Bref, à demain sans doute :-)

J-Pierre



Avatar
Eric
Bonjour Sabine,

Pour ton Filter2 essaies:
Filter2 = "[DateMS2]> Date()-8 And [NumRefInstrument]= " &
ConstValeurInstrument

(en supposant que ConstValeurInstrument est numérique)

Si tu veux décomposer en 2 l'expression, alors mets:
Filter2 = "[DateMS2]> Date()-8"
Filter3 = "[NumRefInstrument]= " & ConstValeurInstrument
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2 & " And " & Filter3



Bonjour à tous

Je viens d'essayer ton conseil Jean-pierre et en effet si je ne mets pas
value...cela fonctionne la valeur rapportée dans le filtre est la bonne.
J'ai donc testé ces deux filtres qui vont très bien l'un sans l'autre !!!
Filter2 = "[DateMS2]> Date()-8"
Filter3 = "[NumRefInstrument]= " & ConstValeurInstrument

J'ai essayé de les associer de deux façons:

Filter2 = "[DateMS2]> Date()-8" And "[NumRefInstrument]= " &
ConstValeurInstrument
MsgBox Filter2
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2
la boîte s'ouvre avec un message Incompatibilité de type

deuxième test:

Filter2 = "[DateMS2]> Date()-8"
Filter3 = "[NumRefInstrument]= " & ConstValeurInstrument
MsgBox Filter2
MsgBox Filter3
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2 And Filter3

Les deux boîtes s'ouvrent en donnant les bonnes valeur et après s'ouvre la
boîte Incompatibilité de type...

...

Bonne journée

Sabine




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Sabine B.
MERCI MERCI ET ENCORE MERCI....

CA MARCHE!!!
A bientôt peut-être!

Je ne vous dit pas à charge de revanche car ce serait un peu ridicule...et
beaucoup trop prétentieux de ma part mais en tout cas merci de tout
coeur!!!!!


Sabine

"Eric" a écrit dans le message de news:

Bonjour Sabine,

Pour ton Filter2 essaies:
Filter2 = "[DateMS2]> Date()-8 And [NumRefInstrument]= " &
ConstValeurInstrument

(en supposant que ConstValeurInstrument est numérique)

Si tu veux décomposer en 2 l'expression, alors mets:
Filter2 = "[DateMS2]> Date()-8"
Filter3 = "[NumRefInstrument]= " & ConstValeurInstrument
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2 & " And " & Filter3



Bonjour à tous

Je viens d'essayer ton conseil Jean-pierre et en effet si je ne mets pas
value...cela fonctionne la valeur rapportée dans le filtre est la bonne.
J'ai donc testé ces deux filtres qui vont très bien l'un sans l'autre !!!
Filter2 = "[DateMS2]> Date()-8"
Filter3 = "[NumRefInstrument]= " & ConstValeurInstrument

J'ai essayé de les associer de deux façons:

Filter2 = "[DateMS2]> Date()-8" And "[NumRefInstrument]= " &
ConstValeurInstrument
MsgBox Filter2
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2
la boîte s'ouvre avec un message Incompatibilité de type

deuxième test:

Filter2 = "[DateMS2]> Date()-8"
Filter3 = "[NumRefInstrument]= " & ConstValeurInstrument
MsgBox Filter2
MsgBox Filter3
DoCmd.OpenReport "CahierMS", acViewPreview, , Filter2 And Filter3

Les deux boîtes s'ouvrent en donnant les bonnes valeur et après s'ouvre
la boîte Incompatibilité de type...

...

Bonne journée

Sabine




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



1 2