Est-il possible de contrôler un filtre. J'ai un formulaire qui permet de
défiler des fiches produits et les filtrer par thème, marque ...
Lorsque le résultat du filtre est aucun produit, le formulaire se grise et
l'on doit sortir brutalement.
Existe-t-il une solution pour vérifier le résultat du filtre avant son
exécution.
Voici le code que j'applique :
Private Sub f_mar_AfterUpdate()
Dim myfilter As String
If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And
IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And
IsNull(Me!f_sai) And IsNull(Me!f_styl) Then
DoCmd.ShowAllRecords
Exit Sub
End If
myfilter = ""
If Not IsNull(Me!f_ref) Then
myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and "
End If
If Not IsNull(Me!f_lib) Then
myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and "
End If
If Not IsNull(Me!f_the) Then
myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and "
End If
If Not IsNull(Me!f_lig) Then
myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and "
End If
If Not IsNull(Me!f_mar) Then
myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and "
End If
If Not IsNull(Me!f_sai) Then
myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and "
End If
If Not IsNull(Me!f_typ) Then
myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and "
End If
If Not IsNull(Me!f_styl) Then
myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and "
End If
If myfilter <> "" Then
myfilter = Left$(myfilter, Len(myfilter) - 4)
End If
DoCmd.ApplyFilter , myfilter
End Sub
Merci de votre aide
--
Nathalie
si my_filtre est vide, ne pas appliquer le filtrage ? il suffit de sortir si le filtre est vide :
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) Else exit sub End If
docmd....
Denis
Leti
Bonjour,
Aprés le : DoCmd.ApplyFilter , myfilter
tu peux ajouter le test suivant : If me.recordset.recordcount = 0 Then DoCmd.ShowAllRecords
Bonjour à tous, Est-il possible de contrôler un filtre. J'ai un formulaire qui permet de défiler des fiches produits et les filtrer par thème, marque ... Lorsque le résultat du filtre est aucun produit, le formulaire se grise et l'on doit sortir brutalement. Existe-t-il une solution pour vérifier le résultat du filtre avant son exécution. Voici le code que j'applique : Private Sub f_mar_AfterUpdate() Dim myfilter As String If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And IsNull(Me!f_sai) And IsNull(Me!f_styl) Then DoCmd.ShowAllRecords Exit Sub End If
myfilter = "" If Not IsNull(Me!f_ref) Then myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and " End If If Not IsNull(Me!f_lib) Then myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and " End If If Not IsNull(Me!f_the) Then myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and " End If If Not IsNull(Me!f_lig) Then myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and " End If If Not IsNull(Me!f_mar) Then myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and " End If If Not IsNull(Me!f_sai) Then myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and " End If If Not IsNull(Me!f_typ) Then myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and " End If If Not IsNull(Me!f_styl) Then myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and " End If
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If DoCmd.ApplyFilter , myfilter End Sub Merci de votre aide -- Nathalie
Bonjour,
Aprés le :
DoCmd.ApplyFilter , myfilter
tu peux ajouter le test suivant :
If me.recordset.recordcount = 0 Then DoCmd.ShowAllRecords
Bonjour à tous,
Est-il possible de contrôler un filtre. J'ai un formulaire qui permet de
défiler des fiches produits et les filtrer par thème, marque ...
Lorsque le résultat du filtre est aucun produit, le formulaire se grise et
l'on doit sortir brutalement.
Existe-t-il une solution pour vérifier le résultat du filtre avant son
exécution.
Voici le code que j'applique :
Private Sub f_mar_AfterUpdate()
Dim myfilter As String
If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And
IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And
IsNull(Me!f_sai) And IsNull(Me!f_styl) Then
DoCmd.ShowAllRecords
Exit Sub
End If
myfilter = ""
If Not IsNull(Me!f_ref) Then
myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and "
End If
If Not IsNull(Me!f_lib) Then
myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and "
End If
If Not IsNull(Me!f_the) Then
myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and "
End If
If Not IsNull(Me!f_lig) Then
myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and "
End If
If Not IsNull(Me!f_mar) Then
myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and "
End If
If Not IsNull(Me!f_sai) Then
myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and "
End If
If Not IsNull(Me!f_typ) Then
myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and "
End If
If Not IsNull(Me!f_styl) Then
myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and "
End If
If myfilter <> "" Then
myfilter = Left$(myfilter, Len(myfilter) - 4)
End If
DoCmd.ApplyFilter , myfilter
End Sub
Merci de votre aide
--
Nathalie
tu peux ajouter le test suivant : If me.recordset.recordcount = 0 Then DoCmd.ShowAllRecords
Bonjour à tous, Est-il possible de contrôler un filtre. J'ai un formulaire qui permet de défiler des fiches produits et les filtrer par thème, marque ... Lorsque le résultat du filtre est aucun produit, le formulaire se grise et l'on doit sortir brutalement. Existe-t-il une solution pour vérifier le résultat du filtre avant son exécution. Voici le code que j'applique : Private Sub f_mar_AfterUpdate() Dim myfilter As String If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And IsNull(Me!f_sai) And IsNull(Me!f_styl) Then DoCmd.ShowAllRecords Exit Sub End If
myfilter = "" If Not IsNull(Me!f_ref) Then myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and " End If If Not IsNull(Me!f_lib) Then myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and " End If If Not IsNull(Me!f_the) Then myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and " End If If Not IsNull(Me!f_lig) Then myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and " End If If Not IsNull(Me!f_mar) Then myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and " End If If Not IsNull(Me!f_sai) Then myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and " End If If Not IsNull(Me!f_typ) Then myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and " End If If Not IsNull(Me!f_styl) Then myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and " End If
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If DoCmd.ApplyFilter , myfilter End Sub Merci de votre aide -- Nathalie
Nathalie Lebas
Bonjour, Excuses-moi, je n'ai pas été assez précise. Mon problème est après l'application du filtre. Si aucun enregistrement ne répond aux critères du filtrage, l'écran devient alors gris et il faut sortir brutalement. Je recherche donc un moyen de vérifier la présence de données après filtrage mais avant affichage ! a+ -- Nathalie
quelle est la question ?
si my_filtre est vide, ne pas appliquer le filtrage ? il suffit de sortir si le filtre est vide :
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) Else exit sub End If
docmd....
Denis
Bonjour,
Excuses-moi, je n'ai pas été assez précise.
Mon problème est après l'application du filtre. Si aucun enregistrement ne
répond aux critères du filtrage, l'écran devient alors gris et il faut sortir
brutalement.
Je recherche donc un moyen de vérifier la présence de données après filtrage
mais avant affichage !
a+
--
Nathalie
quelle est la question ?
si my_filtre est vide, ne pas appliquer le filtrage ?
il suffit de sortir si le filtre est vide :
If myfilter <> "" Then
myfilter = Left$(myfilter, Len(myfilter) - 4)
Else
exit sub
End If
Bonjour, Excuses-moi, je n'ai pas été assez précise. Mon problème est après l'application du filtre. Si aucun enregistrement ne répond aux critères du filtrage, l'écran devient alors gris et il faut sortir brutalement. Je recherche donc un moyen de vérifier la présence de données après filtrage mais avant affichage ! a+ -- Nathalie
quelle est la question ?
si my_filtre est vide, ne pas appliquer le filtrage ? il suffit de sortir si le filtre est vide :
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) Else exit sub End If
docmd....
Denis
Nathalie Lebas
Bonjour, Merci de ta réponse. Je viens de tester mais cela ne fonctionne pas. Je pense qu'il faudrait intervenir avant l'applyfilter. A+ -- Nathalie
Bonjour,
Aprés le : DoCmd.ApplyFilter , myfilter
tu peux ajouter le test suivant : If me.recordset.recordcount = 0 Then DoCmd.ShowAllRecords
Bonjour à tous, Est-il possible de contrôler un filtre. J'ai un formulaire qui permet de défiler des fiches produits et les filtrer par thème, marque ... Lorsque le résultat du filtre est aucun produit, le formulaire se grise et l'on doit sortir brutalement. Existe-t-il une solution pour vérifier le résultat du filtre avant son exécution. Voici le code que j'applique : Private Sub f_mar_AfterUpdate() Dim myfilter As String If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And IsNull(Me!f_sai) And IsNull(Me!f_styl) Then DoCmd.ShowAllRecords Exit Sub End If
myfilter = "" If Not IsNull(Me!f_ref) Then myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and " End If If Not IsNull(Me!f_lib) Then myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and " End If If Not IsNull(Me!f_the) Then myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and " End If If Not IsNull(Me!f_lig) Then myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and " End If If Not IsNull(Me!f_mar) Then myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and " End If If Not IsNull(Me!f_sai) Then myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and " End If If Not IsNull(Me!f_typ) Then myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and " End If If Not IsNull(Me!f_styl) Then myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and " End If
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If DoCmd.ApplyFilter , myfilter End Sub Merci de votre aide -- Nathalie
Bonjour,
Merci de ta réponse. Je viens de tester mais cela ne fonctionne pas. Je
pense qu'il faudrait intervenir avant l'applyfilter.
A+
--
Nathalie
Bonjour,
Aprés le :
DoCmd.ApplyFilter , myfilter
tu peux ajouter le test suivant :
If me.recordset.recordcount = 0 Then DoCmd.ShowAllRecords
Bonjour à tous,
Est-il possible de contrôler un filtre. J'ai un formulaire qui permet de
défiler des fiches produits et les filtrer par thème, marque ...
Lorsque le résultat du filtre est aucun produit, le formulaire se grise et
l'on doit sortir brutalement.
Existe-t-il une solution pour vérifier le résultat du filtre avant son
exécution.
Voici le code que j'applique :
Private Sub f_mar_AfterUpdate()
Dim myfilter As String
If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And
IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And
IsNull(Me!f_sai) And IsNull(Me!f_styl) Then
DoCmd.ShowAllRecords
Exit Sub
End If
myfilter = ""
If Not IsNull(Me!f_ref) Then
myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and "
End If
If Not IsNull(Me!f_lib) Then
myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and "
End If
If Not IsNull(Me!f_the) Then
myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and "
End If
If Not IsNull(Me!f_lig) Then
myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and "
End If
If Not IsNull(Me!f_mar) Then
myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and "
End If
If Not IsNull(Me!f_sai) Then
myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and "
End If
If Not IsNull(Me!f_typ) Then
myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and "
End If
If Not IsNull(Me!f_styl) Then
myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and "
End If
If myfilter <> "" Then
myfilter = Left$(myfilter, Len(myfilter) - 4)
End If
DoCmd.ApplyFilter , myfilter
End Sub
Merci de votre aide
--
Nathalie
Bonjour, Merci de ta réponse. Je viens de tester mais cela ne fonctionne pas. Je pense qu'il faudrait intervenir avant l'applyfilter. A+ -- Nathalie
Bonjour,
Aprés le : DoCmd.ApplyFilter , myfilter
tu peux ajouter le test suivant : If me.recordset.recordcount = 0 Then DoCmd.ShowAllRecords
Bonjour à tous, Est-il possible de contrôler un filtre. J'ai un formulaire qui permet de défiler des fiches produits et les filtrer par thème, marque ... Lorsque le résultat du filtre est aucun produit, le formulaire se grise et l'on doit sortir brutalement. Existe-t-il une solution pour vérifier le résultat du filtre avant son exécution. Voici le code que j'applique : Private Sub f_mar_AfterUpdate() Dim myfilter As String If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And IsNull(Me!f_sai) And IsNull(Me!f_styl) Then DoCmd.ShowAllRecords Exit Sub End If
myfilter = "" If Not IsNull(Me!f_ref) Then myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and " End If If Not IsNull(Me!f_lib) Then myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and " End If If Not IsNull(Me!f_the) Then myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and " End If If Not IsNull(Me!f_lig) Then myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and " End If If Not IsNull(Me!f_mar) Then myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and " End If If Not IsNull(Me!f_sai) Then myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and " End If If Not IsNull(Me!f_typ) Then myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and " End If If Not IsNull(Me!f_styl) Then myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and " End If
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If DoCmd.ApplyFilter , myfilter End Sub Merci de votre aide -- Nathalie
Eric
Bonjour,
Dans ta procédure tu mets quelque chose comme : En début : Dim rst as DAO.Recordset, strCritere as String
Juste après la définition de ton filtre et la correction des 4 derniers caractères : If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If set rst = Me.RecordsetClone strCritere = myFilter rst.FindFirst strCritere If rst.NoMatch Then Exit Sub DoCmd.ApplyFilter , myfilter
et à la fin de la procédure : rst.Close Set rst=Nothing
Bonjour, Merci de ta réponse. Je viens de tester mais cela ne fonctionne pas. Je pense qu'il faudrait intervenir avant l'applyfilter. A+
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour,
Dans ta procédure tu mets quelque chose comme :
En début :
Dim rst as DAO.Recordset, strCritere as String
Juste après la définition de ton filtre et la correction des 4 derniers
caractères :
If myfilter <> "" Then
myfilter = Left$(myfilter, Len(myfilter) - 4)
End If
set rst = Me.RecordsetClone
strCritere = myFilter
rst.FindFirst strCritere
If rst.NoMatch Then Exit Sub
DoCmd.ApplyFilter , myfilter
et à la fin de la procédure :
rst.Close
Set rst=Nothing
Bonjour,
Merci de ta réponse. Je viens de tester mais cela ne fonctionne pas. Je
pense qu'il faudrait intervenir avant l'applyfilter.
A+
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Dans ta procédure tu mets quelque chose comme : En début : Dim rst as DAO.Recordset, strCritere as String
Juste après la définition de ton filtre et la correction des 4 derniers caractères : If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If set rst = Me.RecordsetClone strCritere = myFilter rst.FindFirst strCritere If rst.NoMatch Then Exit Sub DoCmd.ApplyFilter , myfilter
et à la fin de la procédure : rst.Close Set rst=Nothing
Bonjour, Merci de ta réponse. Je viens de tester mais cela ne fonctionne pas. Je pense qu'il faudrait intervenir avant l'applyfilter. A+
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Eric
.../... pas fait attention, If rst.NoMatch Then Exit Sub à corriger comme suit : If rst.NoMatch Then GoTo Sortie et sous le docmd.applyfilter ... Sortie: rst.Close Set rst = Nothing
c'est plus propre et la variable-objet libérée.
Bonjour,
Dans ta procédure tu mets quelque chose comme : En début : Dim rst as DAO.Recordset, strCritere as String
Juste après la définition de ton filtre et la correction des 4 derniers caractères : If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If set rst = Me.RecordsetClone strCritere = myFilter rst.FindFirst strCritere If rst.NoMatch Then Exit Sub DoCmd.ApplyFilter , myfilter
et à la fin de la procédure : rst.Close Set rst=Nothing
Bonjour, Merci de ta réponse. Je viens de tester mais cela ne fonctionne pas. Je pense qu'il faudrait intervenir avant l'applyfilter. A+
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
.../...
pas fait attention,
If rst.NoMatch Then Exit Sub à corriger comme suit :
If rst.NoMatch Then GoTo Sortie
et sous le docmd.applyfilter ...
Sortie:
rst.Close
Set rst = Nothing
c'est plus propre et la variable-objet libérée.
Bonjour,
Dans ta procédure tu mets quelque chose comme :
En début :
Dim rst as DAO.Recordset, strCritere as String
Juste après la définition de ton filtre et la correction des 4 derniers
caractères :
If myfilter <> "" Then
myfilter = Left$(myfilter, Len(myfilter) - 4)
End If
set rst = Me.RecordsetClone
strCritere = myFilter
rst.FindFirst strCritere
If rst.NoMatch Then Exit Sub
DoCmd.ApplyFilter , myfilter
et à la fin de la procédure :
rst.Close
Set rst=Nothing
Bonjour, Merci de ta réponse. Je viens de tester mais cela ne
fonctionne pas. Je pense qu'il faudrait intervenir avant l'applyfilter.
A+
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
.../... pas fait attention, If rst.NoMatch Then Exit Sub à corriger comme suit : If rst.NoMatch Then GoTo Sortie et sous le docmd.applyfilter ... Sortie: rst.Close Set rst = Nothing
c'est plus propre et la variable-objet libérée.
Bonjour,
Dans ta procédure tu mets quelque chose comme : En début : Dim rst as DAO.Recordset, strCritere as String
Juste après la définition de ton filtre et la correction des 4 derniers caractères : If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If set rst = Me.RecordsetClone strCritere = myFilter rst.FindFirst strCritere If rst.NoMatch Then Exit Sub DoCmd.ApplyFilter , myfilter
et à la fin de la procédure : rst.Close Set rst=Nothing
Bonjour, Merci de ta réponse. Je viens de tester mais cela ne fonctionne pas. Je pense qu'il faudrait intervenir avant l'applyfilter. A+
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Nathalie Lebas
Bonjour, Je te remercie pour ta réponse. J'ai testé ton code mais j'ai un souci. Lorsque tu fais un premier filtrage, le filtre s'applique et filtre bien. Si il n'y a pas de données correspondantes aux critères choisi, rien ne se passe, c'est très bien. Par contre, si tu filtres une deuxième fois sans avoir supprimé tous les critères du premier filtre et réaffiché tous les enregistrements, le deuxième filtre ne se fait pas. As-tu une idéee du problème ? Merci encore de ton aide a+ -- Nathalie
..../... pas fait attention, If rst.NoMatch Then Exit Sub à corriger comme suit : If rst.NoMatch Then GoTo Sortie et sous le docmd.applyfilter ... Sortie: rst.Close Set rst = Nothing
c'est plus propre et la variable-objet libérée.
Bonjour,
Dans ta procédure tu mets quelque chose comme : En début : Dim rst as DAO.Recordset, strCritere as String
Juste après la définition de ton filtre et la correction des 4 derniers caractères : If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If set rst = Me.RecordsetClone strCritere = myFilter rst.FindFirst strCritere If rst.NoMatch Then Exit Sub DoCmd.ApplyFilter , myfilter
et à la fin de la procédure : rst.Close Set rst=Nothing
Bonjour, Merci de ta réponse. Je viens de tester mais cela ne fonctionne pas. Je pense qu'il faudrait intervenir avant l'applyfilter. A+
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour,
Je te remercie pour ta réponse. J'ai testé ton code mais j'ai un souci.
Lorsque tu fais un premier filtrage, le filtre s'applique et filtre bien. Si
il n'y a pas de données correspondantes aux critères choisi, rien ne se
passe, c'est très bien.
Par contre, si tu filtres une deuxième fois sans avoir supprimé tous les
critères du premier filtre et réaffiché tous les enregistrements, le deuxième
filtre ne se fait pas.
As-tu une idéee du problème ?
Merci encore de ton aide
a+
--
Nathalie
..../...
pas fait attention,
If rst.NoMatch Then Exit Sub à corriger comme suit :
If rst.NoMatch Then GoTo Sortie
et sous le docmd.applyfilter ...
Sortie:
rst.Close
Set rst = Nothing
c'est plus propre et la variable-objet libérée.
Bonjour,
Dans ta procédure tu mets quelque chose comme :
En début :
Dim rst as DAO.Recordset, strCritere as String
Juste après la définition de ton filtre et la correction des 4 derniers
caractères :
If myfilter <> "" Then
myfilter = Left$(myfilter, Len(myfilter) - 4)
End If
set rst = Me.RecordsetClone
strCritere = myFilter
rst.FindFirst strCritere
If rst.NoMatch Then Exit Sub
DoCmd.ApplyFilter , myfilter
et à la fin de la procédure :
rst.Close
Set rst=Nothing
Bonjour, Merci de ta réponse. Je viens de tester mais cela ne
fonctionne pas. Je pense qu'il faudrait intervenir avant l'applyfilter.
A+
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour, Je te remercie pour ta réponse. J'ai testé ton code mais j'ai un souci. Lorsque tu fais un premier filtrage, le filtre s'applique et filtre bien. Si il n'y a pas de données correspondantes aux critères choisi, rien ne se passe, c'est très bien. Par contre, si tu filtres une deuxième fois sans avoir supprimé tous les critères du premier filtre et réaffiché tous les enregistrements, le deuxième filtre ne se fait pas. As-tu une idéee du problème ? Merci encore de ton aide a+ -- Nathalie
..../... pas fait attention, If rst.NoMatch Then Exit Sub à corriger comme suit : If rst.NoMatch Then GoTo Sortie et sous le docmd.applyfilter ... Sortie: rst.Close Set rst = Nothing
c'est plus propre et la variable-objet libérée.
Bonjour,
Dans ta procédure tu mets quelque chose comme : En début : Dim rst as DAO.Recordset, strCritere as String
Juste après la définition de ton filtre et la correction des 4 derniers caractères : If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If set rst = Me.RecordsetClone strCritere = myFilter rst.FindFirst strCritere If rst.NoMatch Then Exit Sub DoCmd.ApplyFilter , myfilter
et à la fin de la procédure : rst.Close Set rst=Nothing
Bonjour, Merci de ta réponse. Je viens de tester mais cela ne fonctionne pas. Je pense qu'il faudrait intervenir avant l'applyfilter. A+
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Eric
Bonsoir,
Le problème se trouve, à mon avis, au niveau des évènements. Tu lances ton filtre après la MAJ du champ f_mar. Si tu ne modifies pas ce champ, le filtre est inopérant. Il faut donc qu'à un moment donné tu vides les critères du premier choix et relances la procédure mais que se passe-t-il si tu ne renseignes pas f_mar ?
De loin il est difficile de te proposer une solution totalement opérationnelle mais tu peux essayer ceci ; ça ne te videra pas les zones initialement renseignées mais désactivera le filtre et redonnera tous les enregistrements qui seront à nouveau filtrés si myFilter est renseigné partiellement au moins :
Private Sub f_mar_AfterUpdate() ' Annuler le filtre Me.FilterOn = False If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And IsNull(Me!f_sai) And IsNull(Me!f_styl) Then 'DoCmd.ShowAllRecords Exit Sub End If Dim myfilter As String Dim rst As DAO.Recordset, critere As String Set rst = Me.RecordsetClone myfilter = "" If Not IsNull(Me!f_ref) Then myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and " End If If Not IsNull(Me!f_lib) Then myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and " End If If Not IsNull(Me!f_the) Then myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and " End If If Not IsNull(Me!f_lig) Then myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and " End If If Not IsNull(Me!f_mar) Then myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and " End If If Not IsNull(Me!f_sai) Then myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and " End If If Not IsNull(Me!f_typ) Then myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and " End If If Not IsNull(Me!f_styl) Then myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and " End If
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If
critere = myfilter rst.FindFirst critere If rst.NoMatch Then GoTo Sortie Me.Filter = myfilter Me.FilterOn = True Sortie: Set rst = Nothing End Sub
Après, il te faudra rechercher à quel moment tu vides les zones à la base de la construction de ton filtre.
(PS: code écrit à main levée sans tester)
Bonjour, Je te remercie pour ta réponse. J'ai testé ton code mais j'ai un souci. Lorsque tu fais un premier filtrage, le filtre s'applique et filtre bien. Si il n'y a pas de données correspondantes aux critères choisi, rien ne se passe, c'est très bien. Par contre, si tu filtres une deuxième fois sans avoir supprimé tous les critères du premier filtre et réaffiché tous les enregistrements, le deuxième filtre ne se fait pas. As-tu une idéee du problème ? Merci encore de ton aide a+
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonsoir,
Le problème se trouve, à mon avis, au niveau des évènements. Tu lances
ton filtre après la MAJ du champ f_mar. Si tu ne modifies pas ce champ,
le filtre est inopérant. Il faut donc qu'à un moment donné tu vides les
critères du premier choix et relances la procédure mais que se
passe-t-il si tu ne renseignes pas f_mar ?
De loin il est difficile de te proposer une solution totalement
opérationnelle mais tu peux essayer ceci ; ça ne te videra pas les zones
initialement renseignées mais désactivera le filtre et redonnera tous
les enregistrements qui seront à nouveau filtrés si myFilter est
renseigné partiellement au moins :
Private Sub f_mar_AfterUpdate()
' Annuler le filtre
Me.FilterOn = False
If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And
IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And
IsNull(Me!f_sai) And IsNull(Me!f_styl) Then
'DoCmd.ShowAllRecords
Exit Sub
End If
Dim myfilter As String
Dim rst As DAO.Recordset, critere As String
Set rst = Me.RecordsetClone
myfilter = ""
If Not IsNull(Me!f_ref) Then
myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and "
End If
If Not IsNull(Me!f_lib) Then
myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and "
End If
If Not IsNull(Me!f_the) Then
myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and "
End If
If Not IsNull(Me!f_lig) Then
myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and "
End If
If Not IsNull(Me!f_mar) Then
myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and "
End If
If Not IsNull(Me!f_sai) Then
myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and "
End If
If Not IsNull(Me!f_typ) Then
myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and "
End If
If Not IsNull(Me!f_styl) Then
myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and "
End If
If myfilter <> "" Then
myfilter = Left$(myfilter, Len(myfilter) - 4)
End If
critere = myfilter
rst.FindFirst critere
If rst.NoMatch Then GoTo Sortie
Me.Filter = myfilter
Me.FilterOn = True
Sortie:
Set rst = Nothing
End Sub
Après, il te faudra rechercher à quel moment tu vides les zones à la
base de la construction de ton filtre.
(PS: code écrit à main levée sans tester)
Bonjour,
Je te remercie pour ta réponse. J'ai testé ton code mais j'ai un souci.
Lorsque tu fais un premier filtrage, le filtre s'applique et filtre bien. Si
il n'y a pas de données correspondantes aux critères choisi, rien ne se
passe, c'est très bien.
Par contre, si tu filtres une deuxième fois sans avoir supprimé tous les
critères du premier filtre et réaffiché tous les enregistrements, le deuxième
filtre ne se fait pas.
As-tu une idéee du problème ?
Merci encore de ton aide
a+
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Le problème se trouve, à mon avis, au niveau des évènements. Tu lances ton filtre après la MAJ du champ f_mar. Si tu ne modifies pas ce champ, le filtre est inopérant. Il faut donc qu'à un moment donné tu vides les critères du premier choix et relances la procédure mais que se passe-t-il si tu ne renseignes pas f_mar ?
De loin il est difficile de te proposer une solution totalement opérationnelle mais tu peux essayer ceci ; ça ne te videra pas les zones initialement renseignées mais désactivera le filtre et redonnera tous les enregistrements qui seront à nouveau filtrés si myFilter est renseigné partiellement au moins :
Private Sub f_mar_AfterUpdate() ' Annuler le filtre Me.FilterOn = False If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And IsNull(Me!f_sai) And IsNull(Me!f_styl) Then 'DoCmd.ShowAllRecords Exit Sub End If Dim myfilter As String Dim rst As DAO.Recordset, critere As String Set rst = Me.RecordsetClone myfilter = "" If Not IsNull(Me!f_ref) Then myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and " End If If Not IsNull(Me!f_lib) Then myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and " End If If Not IsNull(Me!f_the) Then myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and " End If If Not IsNull(Me!f_lig) Then myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and " End If If Not IsNull(Me!f_mar) Then myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and " End If If Not IsNull(Me!f_sai) Then myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and " End If If Not IsNull(Me!f_typ) Then myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and " End If If Not IsNull(Me!f_styl) Then myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and " End If
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If
critere = myfilter rst.FindFirst critere If rst.NoMatch Then GoTo Sortie Me.Filter = myfilter Me.FilterOn = True Sortie: Set rst = Nothing End Sub
Après, il te faudra rechercher à quel moment tu vides les zones à la base de la construction de ton filtre.
(PS: code écrit à main levée sans tester)
Bonjour, Je te remercie pour ta réponse. J'ai testé ton code mais j'ai un souci. Lorsque tu fais un premier filtrage, le filtre s'applique et filtre bien. Si il n'y a pas de données correspondantes aux critères choisi, rien ne se passe, c'est très bien. Par contre, si tu filtres une deuxième fois sans avoir supprimé tous les critères du premier filtre et réaffiché tous les enregistrements, le deuxième filtre ne se fait pas. As-tu une idéee du problème ? Merci encore de ton aide a+
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Nathalie Lebas
Salut, Merci. Le filteron règle bien mon problème. Maintenant, je peux filtrer plusieurs fois de suite sans problème. S'il existe des enregistrements correspondants à mon filtre, il apparaisent sinon l'ensemble des enregistrements s'affiche. C'est parfait et répond à ce que je cherchais à faire. Merci encore A+ -- Nathalie
Bonsoir,
Le problème se trouve, à mon avis, au niveau des évènements. Tu lances ton filtre après la MAJ du champ f_mar. Si tu ne modifies pas ce champ, le filtre est inopérant. Il faut donc qu'à un moment donné tu vides les critères du premier choix et relances la procédure mais que se passe-t-il si tu ne renseignes pas f_mar ?
De loin il est difficile de te proposer une solution totalement opérationnelle mais tu peux essayer ceci ; ça ne te videra pas les zones initialement renseignées mais désactivera le filtre et redonnera tous les enregistrements qui seront à nouveau filtrés si myFilter est renseigné partiellement au moins :
Private Sub f_mar_AfterUpdate() ' Annuler le filtre Me.FilterOn = False If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And IsNull(Me!f_sai) And IsNull(Me!f_styl) Then 'DoCmd.ShowAllRecords Exit Sub End If Dim myfilter As String Dim rst As DAO.Recordset, critere As String Set rst = Me.RecordsetClone myfilter = "" If Not IsNull(Me!f_ref) Then myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and " End If If Not IsNull(Me!f_lib) Then myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and " End If If Not IsNull(Me!f_the) Then myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and " End If If Not IsNull(Me!f_lig) Then myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and " End If If Not IsNull(Me!f_mar) Then myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and " End If If Not IsNull(Me!f_sai) Then myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and " End If If Not IsNull(Me!f_typ) Then myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and " End If If Not IsNull(Me!f_styl) Then myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and " End If
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If
critere = myfilter rst.FindFirst critere If rst.NoMatch Then GoTo Sortie Me.Filter = myfilter Me.FilterOn = True Sortie: Set rst = Nothing End Sub
Après, il te faudra rechercher à quel moment tu vides les zones à la base de la construction de ton filtre.
(PS: code écrit à main levée sans tester)
Bonjour, Je te remercie pour ta réponse. J'ai testé ton code mais j'ai un souci. Lorsque tu fais un premier filtrage, le filtre s'applique et filtre bien. Si il n'y a pas de données correspondantes aux critères choisi, rien ne se passe, c'est très bien. Par contre, si tu filtres une deuxième fois sans avoir supprimé tous les critères du premier filtre et réaffiché tous les enregistrements, le deuxième filtre ne se fait pas. As-tu une idéee du problème ? Merci encore de ton aide a+
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Salut,
Merci. Le filteron règle bien mon problème. Maintenant, je peux filtrer
plusieurs fois de suite sans problème. S'il existe des enregistrements
correspondants à mon filtre, il apparaisent sinon l'ensemble des
enregistrements s'affiche. C'est parfait et répond à ce que je cherchais à
faire.
Merci encore
A+
--
Nathalie
Bonsoir,
Le problème se trouve, à mon avis, au niveau des évènements. Tu lances
ton filtre après la MAJ du champ f_mar. Si tu ne modifies pas ce champ,
le filtre est inopérant. Il faut donc qu'à un moment donné tu vides les
critères du premier choix et relances la procédure mais que se
passe-t-il si tu ne renseignes pas f_mar ?
De loin il est difficile de te proposer une solution totalement
opérationnelle mais tu peux essayer ceci ; ça ne te videra pas les zones
initialement renseignées mais désactivera le filtre et redonnera tous
les enregistrements qui seront à nouveau filtrés si myFilter est
renseigné partiellement au moins :
Private Sub f_mar_AfterUpdate()
' Annuler le filtre
Me.FilterOn = False
If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And
IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And
IsNull(Me!f_sai) And IsNull(Me!f_styl) Then
'DoCmd.ShowAllRecords
Exit Sub
End If
Dim myfilter As String
Dim rst As DAO.Recordset, critere As String
Set rst = Me.RecordsetClone
myfilter = ""
If Not IsNull(Me!f_ref) Then
myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and "
End If
If Not IsNull(Me!f_lib) Then
myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and "
End If
If Not IsNull(Me!f_the) Then
myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and "
End If
If Not IsNull(Me!f_lig) Then
myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and "
End If
If Not IsNull(Me!f_mar) Then
myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and "
End If
If Not IsNull(Me!f_sai) Then
myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and "
End If
If Not IsNull(Me!f_typ) Then
myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and "
End If
If Not IsNull(Me!f_styl) Then
myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and "
End If
If myfilter <> "" Then
myfilter = Left$(myfilter, Len(myfilter) - 4)
End If
critere = myfilter
rst.FindFirst critere
If rst.NoMatch Then GoTo Sortie
Me.Filter = myfilter
Me.FilterOn = True
Sortie:
Set rst = Nothing
End Sub
Après, il te faudra rechercher à quel moment tu vides les zones à la
base de la construction de ton filtre.
(PS: code écrit à main levée sans tester)
Bonjour,
Je te remercie pour ta réponse. J'ai testé ton code mais j'ai un souci.
Lorsque tu fais un premier filtrage, le filtre s'applique et filtre bien. Si
il n'y a pas de données correspondantes aux critères choisi, rien ne se
passe, c'est très bien.
Par contre, si tu filtres une deuxième fois sans avoir supprimé tous les
critères du premier filtre et réaffiché tous les enregistrements, le deuxième
filtre ne se fait pas.
As-tu une idéee du problème ?
Merci encore de ton aide
a+
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Salut, Merci. Le filteron règle bien mon problème. Maintenant, je peux filtrer plusieurs fois de suite sans problème. S'il existe des enregistrements correspondants à mon filtre, il apparaisent sinon l'ensemble des enregistrements s'affiche. C'est parfait et répond à ce que je cherchais à faire. Merci encore A+ -- Nathalie
Bonsoir,
Le problème se trouve, à mon avis, au niveau des évènements. Tu lances ton filtre après la MAJ du champ f_mar. Si tu ne modifies pas ce champ, le filtre est inopérant. Il faut donc qu'à un moment donné tu vides les critères du premier choix et relances la procédure mais que se passe-t-il si tu ne renseignes pas f_mar ?
De loin il est difficile de te proposer une solution totalement opérationnelle mais tu peux essayer ceci ; ça ne te videra pas les zones initialement renseignées mais désactivera le filtre et redonnera tous les enregistrements qui seront à nouveau filtrés si myFilter est renseigné partiellement au moins :
Private Sub f_mar_AfterUpdate() ' Annuler le filtre Me.FilterOn = False If IsNull(Me!f_ref) And IsNull(Me!f_lib) And IsNull(Me!f_the) And IsNull(Me!f_lig) And IsNull(Me!f_mar) And IsNull(Me!f_typ) And IsNull(Me!f_sai) And IsNull(Me!f_styl) Then 'DoCmd.ShowAllRecords Exit Sub End If Dim myfilter As String Dim rst As DAO.Recordset, critere As String Set rst = Me.RecordsetClone myfilter = "" If Not IsNull(Me!f_ref) Then myfilter = myfilter + "[fpr_code]= """ + Me!f_ref + """ and " End If If Not IsNull(Me!f_lib) Then myfilter = myfilter + "[fpr_des] like """ + Me!f_lib + """ and " End If If Not IsNull(Me!f_the) Then myfilter = myfilter + "[fpr_the]= " & Me!f_the & " and " End If If Not IsNull(Me!f_lig) Then myfilter = myfilter + "[fpr_ligne]= " & Me!f_lig & " and " End If If Not IsNull(Me!f_mar) Then myfilter = myfilter + "[ma_code]= """ + Me!f_mar + """ and " End If If Not IsNull(Me!f_sai) Then myfilter = myfilter + "[fpr_sais]= """ + Me!f_sai + """ and " End If If Not IsNull(Me!f_typ) Then myfilter = myfilter + "[fpr_typ]= " & Me!f_typ & " and " End If If Not IsNull(Me!f_styl) Then myfilter = myfilter + "[fpr_style]= """ + Me!f_styl + """ and " End If
If myfilter <> "" Then myfilter = Left$(myfilter, Len(myfilter) - 4) End If
critere = myfilter rst.FindFirst critere If rst.NoMatch Then GoTo Sortie Me.Filter = myfilter Me.FilterOn = True Sortie: Set rst = Nothing End Sub
Après, il te faudra rechercher à quel moment tu vides les zones à la base de la construction de ton filtre.
(PS: code écrit à main levée sans tester)
Bonjour, Je te remercie pour ta réponse. J'ai testé ton code mais j'ai un souci. Lorsque tu fais un premier filtrage, le filtre s'applique et filtre bien. Si il n'y a pas de données correspondantes aux critères choisi, rien ne se passe, c'est très bien. Par contre, si tu filtres une deuxième fois sans avoir supprimé tous les critères du premier filtre et réaffiché tous les enregistrements, le deuxième filtre ne se fait pas. As-tu une idéee du problème ? Merci encore de ton aide a+
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr