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

ApplyFilter & selection

7 réponses
Avatar
pascallerudulier
Bonjour =E0 tous et toutes et meilleurs voeux 2008.

Je souhaiterais imprimer un =E9tat en cliquant sur un bouton plac=E9 dans
un formulaire. Tous les champs du formulaire sont repris dans l'=E9tat
et j'en suis =E0:

# bouton formulaire (dont le nom est Questionnaire):

Private Sub Commande215_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
DoCmd.ApplyFilter , "name =3D 'good news'"
DoCmd.OpenReport "=C9tat1", acViewPreview
End Sub

# sur ouverture de l'=E9tat (dont le nom est Etat1):

Private Sub Report_Open(Cancel As Integer)
Me.Filter =3D Forms![Questionnaire].Filter
Me.FilterOn =3D True
End Sub

En fait, dans la ligne
DoCmd.ApplyFilter , "name =3D 'good news'"
je souhaiterais me d=E9barrasser de "name =3D 'good news'" et que lors de
l'appui sur le bouton du formulaire il y ait simulation d'un filtre
s=E9lection quel que soit ce qui est contenu dans le champs [name]. En
fait, quand j'enl=E8ve cette ligne et que je filtre "=E0 la main",
j'obtiens exactement l'=E9tat qui me convient. La question est: comment
coder ceci en VBA?

Merci d'avance pour toutes r=E9ponses.

Pascal

7 réponses

Avatar
Fabien
Bonjour à tous et toutes et meilleurs voeux 2008.

Je souhaiterais imprimer un état en cliquant sur un bouton placé dans
un formulaire. Tous les champs du formulaire sont repris dans l'état
et j'en suis à:

# bouton formulaire (dont le nom est Questionnaire):

Private Sub Commande215_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
DoCmd.ApplyFilter , "name = 'good news'"
DoCmd.OpenReport "État1", acViewPreview
End Sub

# sur ouverture de l'état (dont le nom est Etat1):

Private Sub Report_Open(Cancel As Integer)
Me.Filter = Forms![Questionnaire].Filter
Me.FilterOn = True
End Sub

En fait, dans la ligne
DoCmd.ApplyFilter , "name = 'good news'"
je souhaiterais me débarrasser de "name = 'good news'" et que lors de
l'appui sur le bouton du formulaire il y ait simulation d'un filtre
sélection quel que soit ce qui est contenu dans le champs [name]. En
fait, quand j'enlève cette ligne et que je filtre "à la main",
j'obtiens exactement l'état qui me convient. La question est: comment
coder ceci en VBA?

Merci d'avance pour toutes réponses.

Pascal
Salut Pascal

Je suis pas sûr d'avoir tout pigé mais je pense qu'avec un
Private Sub Commande215_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
'Tu filtre ton formulaire

Me.filter="[Name]='" & [Champsfiltre] & "'"
Me.filterOn = true
'Puis tu appel l'ouverture de ton état en lui passant le même filtre
DoCmd.OpenReport "État1", acViewPreview,,"[Name]='" & [Champsfiltre] & "'"
End Sub

et
La Sub
# sur ouverture de l'état (dont le nom est Etat1):

Private Sub Report_Open(Cancel As Integer)
Me.Filter = Forms![Questionnaire].Filter
Me.FilterOn = True
End Sub
N'est plus utile

ça doit faire ce que tu veux.
Voilà

Avatar
pascallerudulier
Salut Fabien,

Merci pour ta contribution. Cependant ce n'est pas ce que je
souhaite. En fait ton [Champsfiltre] suppose que je sais ce sur quoi
je voudrais filtrer or ce n'est pas le cas.
Il s'agit de simuler ce que j'effectue à la main:
1 - je fais défiler tous les formulaires (en faisant usage de la
roulette ou avec les flèches de défilement).
2 - je m'arrête sur l'un, je clique sur un champ (en l'occurrence ici
[name]) et je filtre la sélection (clique sur la bouton avec l'icône
ressemblant à un entonnoir et un éclair).
3 - je clique sur le bouton mentionné plus avant, ce qui génère l'ét at
voulu.

c'est la partie (2) que je voudrais mettre en code de façon à ce que
lorsque je clique sur le bouton (3) placé sur le formulaire, celui-ci
simule le filtre sélection et appelle l'état. On voit donc bien ici
que je ne peux pas savoir quelle valeur peut avoir ce champs.

Pour avoir lu beaucoup de billets je me rends compte que ce n'est
jamais facile d'expliquer quelque chose qui pour soi parait tellement
évident. C'est d'autant plus frustrant qu'on ne peut pas faire de
copie d'écran sur ce groupe.
J'espère toutefois, avec l'exemple ci-dessus, avoir été plus clair.

Merci pour toutes aides,

Pascal
Salut Pascal
Je suis pas sûr d'avoir tout pigé mais je pense qu'avec un
Private Sub Commande215_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
'Tu filtre ton formulaire

Me.filter="[Name]='" & [Champsfiltre] & "'"
Me.filterOn = true
'Puis tu appel l'ouverture de ton état en lui passant le même filtre
DoCmd.OpenReport "État1", acViewPreview,,"[Name]='" & [Champsf iltre] & "'"
End Sub

et
La Sub
# sur ouverture de l'état (dont le nom est Etat1):

Private Sub Report_Open(Cancel As Integer)
Me.Filter = Forms![Questionnaire].Filter
Me.FilterOn = True
End Sub
N'est plus utile

ça doit faire ce que tu veux.
Voilà



Avatar
Fabien
Salut Fabien,

Merci pour ta contribution. Cependant ce n'est pas ce que je
souhaite. En fait ton [Champsfiltre] suppose que je sais ce sur quoi
je voudrais filtrer or ce n'est pas le cas.
Il s'agit de simuler ce que j'effectue à la main:
1 - je fais défiler tous les formulaires (en faisant usage de la
roulette ou avec les flèches de défilement).
2 - je m'arrête sur l'un, je clique sur un champ (en l'occurrence ici
[name]) et je filtre la sélection (clique sur la bouton avec l'icône
ressemblant à un entonnoir et un éclair).
3 - je clique sur le bouton mentionné plus avant, ce qui génère l'état
voulu.

c'est la partie (2) que je voudrais mettre en code de façon à ce que
lorsque je clique sur le bouton (3) placé sur le formulaire, celui-ci
simule le filtre sélection et appelle l'état. On voit donc bien ici
que je ne peux pas savoir quelle valeur peut avoir ce champs.

Pour avoir lu beaucoup de billets je me rends compte que ce n'est
jamais facile d'expliquer quelque chose qui pour soi parait tellement
évident. C'est d'autant plus frustrant qu'on ne peut pas faire de
copie d'écran sur ce groupe.
J'espère toutefois, avec l'exemple ci-dessus, avoir été plus clair.

Merci pour toutes aides,

Pascal
Salut Pascal
Je suis pas sûr d'avoir tout pigé mais je pense qu'avec un
Private Sub Commande215_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
'Tu filtre ton formulaire

Me.filter="[Name]='" & [Champsfiltre] & "'"
Me.filterOn = true
'Puis tu appel l'ouverture de ton état en lui passant le même filtre
DoCmd.OpenReport "État1", acViewPreview,,"[Name]='" & [Champsfiltre] & "'"
End Sub

et
La Sub
# sur ouverture de l'état (dont le nom est Etat1):

Private Sub Report_Open(Cancel As Integer)
Me.Filter = Forms![Questionnaire].Filter
Me.FilterOn = True
End Sub
N'est plus utile

ça doit faire ce que tu veux.
Voilà


Effectivement j'avais mal compris ton besoin.

En cas, des copies d'écrans peuvent être jointes en utilisant
www.cjoint.com ;-)
@+



Avatar
pascallerudulier
Bonne idée cette astuce de lien vers un hébergeur temporaire.
Histoire d'illustrer mon propos, voici le premier screenshot. Je viens
de sélectionner au hasard un des formulaires en cliquant sur le bouton
'filtrer par sélection:

http://cjoint.com/?brmbaaT3No

Ensuite, je viens sur l'onglet où se trouve le bouton 'print', je
clique et j'obtiens l'état correspondant à la sélection au préalable .

http://cjoint.com/?brmbCAUxlF

Voici enfin le code pour le script en VBA du bouton:

http://cjoint.com/?brmfOmfZgb

En vert, tout ce qui est en remarque et donc n'est pas pris en compte.
On voit d'ailleurs bien que la ligne
'DoCmd.ApplyFilter , "name = 'good news'" n'est pas appliquée.

Je souhaiterais donc, sans avoir à filtrer 'à la main' comme pour
cette démonstration, de n'importe quelle formulaire, cliquer sur le
bouton 'print' et l'état qui sortirait correspondrait au formulaire
choisi.

Merci

Pascal
Avatar
Fabien
Bonne idée cette astuce de lien vers un hébergeur temporaire.
Histoire d'illustrer mon propos, voici le premier screenshot. Je viens
de sélectionner au hasard un des formulaires en cliquant sur le bouton
'filtrer par sélection:

http://cjoint.com/?brmbaaT3No

Ensuite, je viens sur l'onglet où se trouve le bouton 'print', je
clique et j'obtiens l'état correspondant à la sélection au préalable.

http://cjoint.com/?brmbCAUxlF

Voici enfin le code pour le script en VBA du bouton:

http://cjoint.com/?brmfOmfZgb

En vert, tout ce qui est en remarque et donc n'est pas pris en compte.
On voit d'ailleurs bien que la ligne
'DoCmd.ApplyFilter , "name = 'good news'" n'est pas appliquée.

Je souhaiterais donc, sans avoir à filtrer 'à la main' comme pour
cette démonstration, de n'importe quelle formulaire, cliquer sur le
bouton 'print' et l'état qui sortirait correspondrait au formulaire
choisi.

Merci

Pascal

Je crois que me.filter contient le filtre que tu constitues en utilisant

les outils de la barre d'outils
et si c'est vrai (a voir donc) il suffit dans ta commande
DoCmd.OpenReport "État1", acViewPreview,,me.filter et le tour serait joué !

Avatar
pascallerudulier
C'est effectivement le cas. Voici le code lors de l'ouverture de
l'état:
http://cjoint.com/?broRHTNRcd
Il y a bien alors, par 'me.Filter', récupération de la dernière
opération de filtre.

la question est: comment constituer en VBA ce filtre de la même façon
que lorsque j'utilise la barre d'outils avec ce fameux bouton avec un
entonnoir et un éclair.
C'est un questionnaire que je mets à disposition de personnes qui
n'ont pas forcément les connaissances d'ACCESS il faut donc que je
constitue automatiquement, depuis le formulaire, ce filtre sans qu'il
y ait d'autres manips par l'utilisateur que de presser le bouton
'print'.

Merci.

Je crois que me.filter contient le filtre que tu constitues en utilisant
les outils de la barre d'outils
et si c'est vrai (a voir donc) il suffit dans ta commande
DoCmd.OpenReport "État1", acViewPreview,,me.filter et le tour serait jou é !


Avatar
pascallerudulier
Trouvé!

Je reprends mes exemples et j'écris en plus ce que j'ai rajouté/
remplacé:

# bouton formulaire (dont le nom est Questionnaire):

Private Sub Commande215_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)
DoCmd.ApplyFilter , "name = 'good news'" <- ça j'ai replacé par ce
qui suit une ligne plus loin
nom = DLookup("[name]","nom_de_ma_table","[name]=Form![name]")
DoCmd.ApplyFilter , "name = " ' " & nom & " ' " <- plus très sûr
avec les " et ' mais ça marche!!
DoCmd.OpenReport "État1", acViewPreview
End Sub

# sur ouverture de l'état (dont le nom est Etat1):

Private Sub Report_Open(Cancel As Integer)
Me.Filter = Forms![Questionnaire].Filter
Me.FilterOn = True
End Sub



Résultat, quel que soit l'enregistrement du formulaire, dès que je
clique sur le bouton j'ai l'état correspondant qui s'affiche.

Ouf!!