GNT sans publicité, site mobile, fonctionnalitées exclusives...

débutante : probleme d'écriture de filtre

Le
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 valeursje 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]Úte()"
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]Úte()"
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
Lire les 15 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilbert
Le #6219851
Bonjour,

Essaie ça
Filter2 = "[DateMS2]> Date()-20" And "[NumRefAppareil].value=" &
ConstValeurInstrument

Gilbert

"Sabine B." news:4563e7cd$0$25921$
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]Úte()"
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]Úte()"
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




Jean-Pierre
Le #6219831
Bonjour Sabine,

Je reprends le code qui fonctionne, et je suis surpris que cela fonctionne:

Filter = "[DateRMN2]Between Forms![BdeD_RMN_C]![DateDebut]and [Forms]![BdeD_RMN_C]![DateFin] "

Il manque des séparateurs "espaces", et normalement, une date doit se trouver entre des délimiteurs "#". Es-tu bien sûr que ça
marche ?
Il me semble que ça devrait ressembler à:

Filter = "[DateRMN2] Between #" & Forms![BdeD_RMN_C]![DateDebut] & _
"# and #" & [Forms]![BdeD_RMN_C]![DateFin] & "#"

J-Pierre
Sabine B.
Le #6219581
Bonsoir Jean Pierre
Pour répondre à ta question: oui mon code fonctionne correctement même si je
ne peux pas te dire pourquoi!
Il me rapporte les bon enregistrements, mais je suis toujours preneuse
d'infos pour éviter de taper des lignes comme un "sagouin"!!!
Je ne maîtrise ni les espaces ni l'utilisation de "&"...j'ai un peu de mal à
définir les différents types de valeurs...
Je suis aussi surprise de voir que ce code fonctionne même si je n'ai pas
définit avant : Dim Filter as String.....est ce réellement nécessaire?
J'ai substitué ta ligne qui semble plus rigoureuse ce qui fonctionne aussi
parfaitement

Merci à toi

Sabine


"Jean-Pierre" message de news:
Bonjour Sabine,

Je reprends le code qui fonctionne, et je suis surpris que cela
fonctionne:

Filter = "[DateRMN2]Between Forms![BdeD_RMN_C]![DateDebut]and
[Forms]![BdeD_RMN_C]![DateFin] "

Il manque des séparateurs "espaces", et normalement, une date doit se
trouver entre des délimiteurs "#". Es-tu bien sûr que ça marche ?
Il me semble que ça devrait ressembler à:

Filter = "[DateRMN2] Between #" & Forms![BdeD_RMN_C]![DateDebut] & _
"# and #" & [Forms]![BdeD_RMN_C]![DateFin] & "#"

J-Pierre



Jean-Pierre
Le #6219571
Bonsoir Sabine,

Au début de ton code, avant ta première procédure évènementielle (Private Sub) rajoute "Option Explicit", cette option impose
de définir explicitement les variables (Dim quelque chose), ça évite les erreurs de frappe qui amène des bugs. Ce n'est pas
nécessaire, mais je pense que c'est préférable.

Ca devrait donner:

Option Compare Database
Option Explicit

Private Sub Commande759_Click()
...
...

Dans le cas de ton Filter, Access évalue l'expression en remplaçant chaque variable par sa valeur. Si tu veux voir le résultat
qui est utilisé comme filtre à l'ouverture de ton formulaire, juste après ton instruction, rajoute MsgBox ..., ça deviendra
lumineux :-)

Filter = "[DateRMN2] Between #" & Forms![BdeD_RMN_C]![DateDebut] & _
"# and #" & [Forms]![BdeD_RMN_C]![DateFin] & "#"
MsgBox Filter


Docmd Open........
J-Pierre


Eric
Le #6219541
Bonsoir,

(Pas tout lu)
Ne serait-il pas préférable d'écrire la date au format US car le filtre
n'est rien d'autre qu'une clause WHERE sans le mot WHERE
donc un truc du genre :
Filter = "[DateRMN2] Between #" & _
Format(Forms![BdeD_RMN_C]![DateDebut],"mm/dd/yyyy") & "# And #" & _
Format(Forms![BdeD_RMN_C]![DateFin],"mm/dd/yyyy") & "#"

Bonsoir Sabine,

Au début de ton code, avant ta première procédure évènementielle (Private Sub) rajoute "Option Explicit", cette option impose
de définir explicitement les variables (Dim quelque chose), ça évite les erreurs de frappe qui amène des bugs. Ce n'est pas
nécessaire, mais je pense que c'est préférable.

Ca devrait donner:

Option Compare Database
Option Explicit

Private Sub Commande759_Click()
...
...

Dans le cas de ton Filter, Access évalue l'expression en remplaçant chaque variable par sa valeur. Si tu veux voir le résultat
qui est utilisé comme filtre à l'ouverture de ton formulaire, juste après ton instruction, rajoute MsgBox ..., ça deviendra
lumineux :-)

Filter = "[DateRMN2] Between #" & Forms![BdeD_RMN_C]![DateDebut] & _

"# and #" & [Forms]![BdeD_RMN_C]![DateFin] & "#"



MsgBox Filter
Docmd Open........
J-Pierre




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/micro...cess?hl=fr



Publicité
Suivre les réponses
Poster une réponse
Anonyme