Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Applique un filtre de formulaire à un état : pb sur liste déroul an

5 réponses
Avatar
cc
Bonjour,

Je ne sais pas comment appliquer un filtre de formulaire à un état quand on
fait un double filtrage sur une liste déroulante sur le formulaire.

Ma problématique est la suivante : j'ai un formulaire qui contient des
listes déroulantes notamment. Je génère automatiquement un état à partir de
ce formulaire qui contient donc également des listes déroulantes. Je veux
appliquer le filtre créé sur le formulaire à mon état. Si j'effectue deux
filtres hors sélection par exemple sur une même liste déroulante du
formulaire j'obtiens alors une erreur quand je veux appliquer ce filtre à
l'état.

La génération de l'état est du type :
DoCmd.SelectObject acForm, nom, True
SendKeys "{enter}"
DoCmd.RunCommand acCmdSaveAsReport

L'application du filtre du formulaire à l'état est du type :
If (Forms(nom).FilterOn) Then
Reports(nom).Filter = Forms(nom).Filter
Reports(nom).FilterOn = True
Else
Reports(nom).FilterOn = False
End If

Le filtre qui pose problème (généré par Access) est du type
"((Lookup_NumChamp.LibTyc Like "Toto")) AND ((Lookup_NumChamp.LibTyc="Titi"))"

Merci de votre aide

cc

5 réponses

Avatar
Raymond [mvp]
Bonjour.

soit, dans l'événement open de l'état, tu charge les mêmes valeurs dans
FilterOn et Filter, en les reprenant dans le formulaire
soit, tu ouvres l'état avec une clause where identique au filtre du
formulaire.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


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

Bonjour,

Je ne sais pas comment appliquer un filtre de formulaire à un état quand
on
fait un double filtrage sur une liste déroulante sur le formulaire.

Ma problématique est la suivante : j'ai un formulaire qui contient des
listes déroulantes notamment. Je génère automatiquement un état à partir
de
ce formulaire qui contient donc également des listes déroulantes. Je veux
appliquer le filtre créé sur le formulaire à mon état. Si j'effectue deux
filtres hors sélection par exemple sur une même liste déroulante du
formulaire j'obtiens alors une erreur quand je veux appliquer ce filtre à
l'état.

La génération de l'état est du type :
DoCmd.SelectObject acForm, nom, True
SendKeys "{enter}"
DoCmd.RunCommand acCmdSaveAsReport

L'application du filtre du formulaire à l'état est du type :
If (Forms(nom).FilterOn) Then
Reports(nom).Filter = Forms(nom).Filter
Reports(nom).FilterOn = True
Else
Reports(nom).FilterOn = False
End If

Le filtre qui pose problème (généré par Access) est du type
"((Lookup_NumChamp.LibTyc Like "Toto")) AND
((Lookup_NumChamp.LibTyc="Titi"))"

Merci de votre aide

cc


Avatar
cc
Merci mais aucune des deux méthodes ne fonctionne quand j'applique deux
filtres sur une même liste déroulante dans le formulaire.

si sur l'évènement open de l'état je charge les mêmes valeurs dans FilterOn
et Filter, en les reprenant dans le formulaire, j'obtiens un message d'erreur
"Erreur : 3062" "Erreur définie par l'application ou par l'objet"
Ci-dessous le code pour charger les mêmes valeurs de filtre que pour le
formulaire
If (Forms(nom).FilterOn) Then
Reports(nom).Filter = Forms(nom).Filter
Reports(nom).FilterOn = Forms(nom).FilterOn
Else
Reports(nom).FilterOn = False
End If

Si j'ouvre l'état avec la clause where identique au filtre du formulaire
DoCmd.OpenReport nom, acViewPreview, , Forms(nom).Filter
j'obtiens un fenêtre popup qui me demande "entrer une valeur de paramètre"
pour le filtre appliqué sur la liste déroulante du formulaire
"Lookup_NumChamp.NomTie"

Il semble que mon problème soit lié au filtre généré par Access sur la liste
déroulante du formulaire
"((((Not Lookup_NumChamp.NomTie="Toto"))) AND ((Not
Lookup_NumChamp.NomTie="Michel"))) AND ((Not
Lookup_NumChamp.NomTie="Martin"))"

Si vous avez une idée, d'avance merci.

cc


Bonjour.

soit, dans l'événement open de l'état, tu charge les mêmes valeurs dans
FilterOn et Filter, en les reprenant dans le formulaire
soit, tu ouvres l'état avec une clause where identique au filtre du
formulaire.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


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

Bonjour,

Je ne sais pas comment appliquer un filtre de formulaire à un état quand
on
fait un double filtrage sur une liste déroulante sur le formulaire.

Ma problématique est la suivante : j'ai un formulaire qui contient des
listes déroulantes notamment. Je génère automatiquement un état à partir
de
ce formulaire qui contient donc également des listes déroulantes. Je veux
appliquer le filtre créé sur le formulaire à mon état. Si j'effectue deux
filtres hors sélection par exemple sur une même liste déroulante du
formulaire j'obtiens alors une erreur quand je veux appliquer ce filtre à
l'état.

La génération de l'état est du type :
DoCmd.SelectObject acForm, nom, True
SendKeys "{enter}"
DoCmd.RunCommand acCmdSaveAsReport

L'application du filtre du formulaire à l'état est du type :
If (Forms(nom).FilterOn) Then
Reports(nom).Filter = Forms(nom).Filter
Reports(nom).FilterOn = True
Else
Reports(nom).FilterOn = False
End If

Le filtre qui pose problème (généré par Access) est du type
"((Lookup_NumChamp.LibTyc Like "Toto")) AND
((Lookup_NumChamp.LibTyc="Titi"))"

Merci de votre aide

cc







Avatar
Raymond [mvp]
Pour le filtre qui est identique à celui du formulaire, ce formulaire
restant ouvert pendant l'impression de l'état, tu places dans l'état:
Private Sub Report_Open(Cancel As Integer)
Me.Filter = Forms!formulaire2.Filter
Me.FilterOn = True
End Sub

tu auras exactement le même résultat que tu aies un ou plusieurs filtres.

Pour les listes il faut les redéfinir autrement et ne pas donner le nom de
la liste mais sa valeur.
Il faut définir le filtre du formulaire selon le principe suivant:
Me.Filter = "[Champ1]='" & listeToto & "'" & " AND [Champ2]='" & listeTiTi &
"'" & " AND [Champ3]='" & listeTaTa & "'"
dans ce cas ça fonctionne, car l'état prendra la même forme sans les noms
des listes mais leur valeur.
si tu passes par une clause where, c'est pareil.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


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

Merci mais aucune des deux méthodes ne fonctionne quand j'applique deux
filtres sur une même liste déroulante dans le formulaire.

si sur l'évènement open de l'état je charge les mêmes valeurs dans
FilterOn
et Filter, en les reprenant dans le formulaire, j'obtiens un message
d'erreur
"Erreur : 3062" "Erreur définie par l'application ou par l'objet"
Ci-dessous le code pour charger les mêmes valeurs de filtre que pour le
formulaire
If (Forms(nom).FilterOn) Then
Reports(nom).Filter = Forms(nom).Filter
Reports(nom).FilterOn = Forms(nom).FilterOn
Else
Reports(nom).FilterOn = False
End If

Si j'ouvre l'état avec la clause where identique au filtre du formulaire
DoCmd.OpenReport nom, acViewPreview, , Forms(nom).Filter
j'obtiens un fenêtre popup qui me demande "entrer une valeur de paramètre"
pour le filtre appliqué sur la liste déroulante du formulaire
"Lookup_NumChamp.NomTie"

Il semble que mon problème soit lié au filtre généré par Access sur la
liste
déroulante du formulaire
"((((Not Lookup_NumChamp.NomTie="Toto"))) AND ((Not
Lookup_NumChamp.NomTie="Michel"))) AND ((Not
Lookup_NumChamp.NomTie="Martin"))"

Si vous avez une idée, d'avance merci.

cc



Avatar
cc
Ca signifie qu'on est obligé de réanalyser les filtres générés par Access par
les boutons "filtrer par sélection" et "filtrer hors sélection" pour réecrire
le filtre et ensuite l'appliquer à l'état. N'y -a-t il pas moyen de faire
autrement pour que ça fonctionne, ça me paraît fastidieux mais je vais
essayer.

Merci.

cc


Pour le filtre qui est identique à celui du formulaire, ce formulaire
restant ouvert pendant l'impression de l'état, tu places dans l'état:
Private Sub Report_Open(Cancel As Integer)
Me.Filter = Forms!formulaire2.Filter
Me.FilterOn = True
End Sub

tu auras exactement le même résultat que tu aies un ou plusieurs filtres.

Pour les listes il faut les redéfinir autrement et ne pas donner le nom de
la liste mais sa valeur.
Il faut définir le filtre du formulaire selon le principe suivant:
Me.Filter = "[Champ1]='" & listeToto & "'" & " AND [Champ2]='" & listeTiTi &
"'" & " AND [Champ3]='" & listeTaTa & "'"
dans ce cas ça fonctionne, car l'état prendra la même forme sans les noms
des listes mais leur valeur.
si tu passes par une clause where, c'est pareil.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


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

Merci mais aucune des deux méthodes ne fonctionne quand j'applique deux
filtres sur une même liste déroulante dans le formulaire.

si sur l'évènement open de l'état je charge les mêmes valeurs dans
FilterOn
et Filter, en les reprenant dans le formulaire, j'obtiens un message
d'erreur
"Erreur : 3062" "Erreur définie par l'application ou par l'objet"
Ci-dessous le code pour charger les mêmes valeurs de filtre que pour le
formulaire
If (Forms(nom).FilterOn) Then
Reports(nom).Filter = Forms(nom).Filter
Reports(nom).FilterOn = Forms(nom).FilterOn
Else
Reports(nom).FilterOn = False
End If

Si j'ouvre l'état avec la clause where identique au filtre du formulaire
DoCmd.OpenReport nom, acViewPreview, , Forms(nom).Filter
j'obtiens un fenêtre popup qui me demande "entrer une valeur de paramètre"
pour le filtre appliqué sur la liste déroulante du formulaire
"Lookup_NumChamp.NomTie"

Il semble que mon problème soit lié au filtre généré par Access sur la
liste
déroulante du formulaire
"((((Not Lookup_NumChamp.NomTie="Toto"))) AND ((Not
Lookup_NumChamp.NomTie="Michel"))) AND ((Not
Lookup_NumChamp.NomTie="Martin"))"

Si vous avez une idée, d'avance merci.

cc








Avatar
Raymond [mvp]
tes filtres étant écrits dans du code vba, il suffit de placer le code dans
l'événement afterupdate des éléments composant le filtre et ton filtre est
toujours à jour et prêt pour les états.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


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

Ca signifie qu'on est obligé de réanalyser les filtres générés par Access
par
les boutons "filtrer par sélection" et "filtrer hors sélection" pour
réecrire
le filtre et ensuite l'appliquer à l'état. N'y -a-t il pas moyen de faire
autrement pour que ça fonctionne, ça me paraît fastidieux mais je vais
essayer.

Merci.

cc