OVH Cloud OVH Cloud

Aidez-moi !

3 réponses
Avatar
James
Bonjour,

J'ai d=E9j=E0 questionn=E9 ce forum, le grenier enfin pas mal=20
de ressource mais j'ai une difficult=E9 que je n'arrive pas=20
=E0 franchir.
J'ai cr=E9er un formulaire sur lequel j'ai 16 listes=20
d=E9roulante : qui me permettent de d=E9finir les crit=E8res=20
d'une requ=EAte. Le r=E9sultat de tout =E7a s'affichant dans=20
une zone de liste.
C'est donc un filtre multi-crit=E8re.
C'est super =E7a marche, par contre maintenant je=20
souhaiterai imprimer les r=E9sultats avec l'aide d'un =E9tat.

J'ai pourtant essay=E9 de rentrer=20
DocmdOpenReport,stdocname,acPreview, SQL (le nom de mon=20
filtre) mais y a toujours pas moyen que =E7a marche.

Que faire? Il y a surement un truc. J'ai besoin des=20
conseils d'experts avis=E9s pour faire avanc=E9s cette=20
histoire.

Voici le code de mon formulaire en question, j'ai=20
volontairement simplifi=E9 le code pour vous =E9viter de=20
grosse lecture.
Attention dans mon code j'ai d=E9fini des cases =E0 cocher=20
pour activer la saisie d'un crit=E8re :


Option Compare Database

Private Sub chkLotEb_Click()
If Me.chkLotEb Then
Me.cmbLotEb.Visible =3D False
Else
Me.cmbLotEb.Visible =3D True
End If
RefreshQuery
End Sub

Private Sub chkOutillageEb_Click()
If Me.chkOutillageEb Then
Me.cmbOutillageEb.Visible =3D False
Else
Me.cmbOutillageEb.Visible =3D True
End If
RefreshQuery
End Sub

Private Sub cmbLotEb_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub

Private Sub cmbOutillageEb_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub


Private Sub Form_Load()
Dim ctl As Control

For Each ctl In Me.Controls
Select Case Left(ctl.Name, 3)
Case "chk"
ctl.Value =3D -1
Case "lbl"
ctl.Caption =3D "-*-*-"
Case "txt"
ctl.Visible =3D False
ctl.Value =3D ""
Case "cmb"
ctl.Visible =3D False
End Select

Next ctl

Me.lstResults.RowSource =3D "SELECT Ebaucheur.[Code SOM=20
Eb],Ebaucheur.[Code article],[Libell=E9 art],Ebaucheur.
[Indice de s=E9rie],Ebaucheur.[Circuit Fab],Ebaucheur.
[Proc=E9d=E9],Ebaucheur.[code qual fonte],Ebaucheur.[Qualit=E9=20
fds Eb], Ebaucheur.[Emboitement MdB],Ebaucheur.[Qt=E9=20
Moules Eb],Ebaucheur.[Qt=E9 Fonds Eb],Ebaucheur.[Code=20
usine], Ebaucheur.[Code stat serie],Ebaucheur.[Etat de la=20
s=E9rie],Ebaucheur.[Lieu de stockage Eb], Ebaucheur.
[Potentiel d=E9part Eb],Ebaucheur.[Potentiel Eb],Ebaucheur.
[Cumul Cps battus Eb] FROM [Filtre Eb]Where Ebaucheur.
[Code article]<>0;"
Me.lstResults.Requery

End Sub

Private Sub RefreshQuery()

Dim SQL As String

SQL =3D "SELECT Ebaucheur.[Code SOM Eb],Ebaucheur.[Code=20
article],[Libell=E9 art],Ebaucheur.[Indice de=20
s=E9rie],Ebaucheur.[Circuit Fab],Ebaucheur.
[Proc=E9d=E9],Ebaucheur.[code qual fonte],Ebaucheur.[Qualit=E9=20
fds Eb], Ebaucheur.[Emboitement MdB],Ebaucheur.[Qt=E9=20
Moules Eb],Ebaucheur.[Qt=E9 Fonds Eb],Ebaucheur.[Code=20
usine], Ebaucheur.[Code stat serie],Ebaucheur.[Etat de la=20
s=E9rie],Ebaucheur.[Lieu de stockage Eb], Ebaucheur.
[Potentiel d=E9part Eb],Ebaucheur.[Potentiel Eb],Ebaucheur.
[Cumul Cps battus Eb] FROM [Filtre Eb]Where Ebaucheur.
[Code article]<>0"

If Not Me.chkLotEb Then
SQL =3D SQL & " And [Code SOM Eb]=3D'" & Me.cmbLotEb & "'"
End If

If Not Me.chkOutillageEb Then
SQL =3D SQL & " And [Code article]=3D" &=20
Me.cmbOutillageEb & ""
End If

SQL =3D SQL & ";"

Me.lstResults.RowSource =3D SQL
Me.lstResults.Requery
End Sub


Private Sub Commande56_Click()
On Error GoTo Err_Commande56_Click

Dim stDocName As String

stDocName =3D "FiltreEb"
DoCmd.OpenReport stDocName, acPreview, SQL

Exit_Commande56_Click:
Exit Sub

Err_Commande56_Click:
MsgBox Err.Description
Resume Exit_Commande56_Click
=20
End Sub


Je vous serai vraiment reconnaissant de m'aider sur ce=20
probl=E8me.=20
Comme je suis pas une expert, essay=E9 de m'expliqu=E9=20
simplement la soltution.
Merci

3 réponses

Avatar
3stone
Salut,

"James"

J'ai créer un formulaire sur lequel j'ai 16 listes
déroulante : qui me permettent de définir les critères
d'une requête. Le résultat de tout ça s'affichant dans
une zone de liste.
C'est donc un filtre multi-critère.

Non... ce n'est pas un "filtre" dans le sens Access.

Tu construit en fait la "chaîne SQL" pour alimenter... une source!




J'ai pourtant essayé de rentrer
DocmdOpenReport,stdocname,acPreview, SQL (le nom de mon
filtre) mais y a toujours pas moyen que ça marche.


Justement, à cet endroit, c'est un filtre que tu peux
renseigner, du style "[NomClient]='toto'"

Or, tu souhaite transmettre le recordsource à ton état.
Comme tu as demandé 'simple', tu peux faire ceci:

Crée sur ton formulaire une petite zone de texte "txtSQL"
dont tu peux mettre la propriété visible à Non.

Lorsque tu alimente ta liste par :

Me.lstResults.RowSource = SQL

Me.lstResults.Requery NB: ce Requery est inutile...

tu place également ta chaîne dans la zone de texte:

Me!txtSQL = SQL

Cela fait, tu peux maintenant lancer ton état en mettant
d'abord dans son événement "Sur ouverture" la ligne suivante:

Me.RecordSource = Froms!TonFormulaire!txtSQL

Ainsi, l'état ira chercher sa chaîne dans le textbox du formulaire.
Bien sûr, il faut que les textbox de l'état aient leurs sources renseignées.


Ca te vas ?


--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------
Avatar
James
Merci pour la solution, mais j'ai trouvé encore mieux!

-----Message d'origine-----
Salut,

"James"

J'ai créer un formulaire sur lequel j'ai 16 listes
déroulante : qui me permettent de définir les critères
d'une requête. Le résultat de tout ça s'affichant dans
une zone de liste.
C'est donc un filtre multi-critère.

Non... ce n'est pas un "filtre" dans le sens Access.

Tu construit en fait la "chaîne SQL" pour
alimenter... une source!





J'ai pourtant essayé de rentrer
DocmdOpenReport,stdocname,acPreview, SQL (le nom de mon
filtre) mais y a toujours pas moyen que ça marche.


Justement, à cet endroit, c'est un filtre que tu peux
renseigner, du style "[NomClient]='toto'"

Or, tu souhaite transmettre le recordsource à ton
état.

Comme tu as demandé 'simple', tu peux faire ceci:

Crée sur ton formulaire une petite zone de
texte "txtSQL"

dont tu peux mettre la propriété visible à Non.

Lorsque tu alimente ta liste par :

Me.lstResults.RowSource = SQL

Me.lstResults.Requery NB: ce Requery est
inutile...


tu place également ta chaîne dans la zone de texte:

Me!txtSQL = SQL

Cela fait, tu peux maintenant lancer ton état en
mettant

d'abord dans son événement "Sur ouverture" la ligne
suivante:


Me.RecordSource = Froms!TonFormulaire!txtSQL

Ainsi, l'état ira chercher sa chaîne dans le textbox
du formulaire.

Bien sûr, il faut que les textbox de l'état aient
leurs sources renseignées.



Ca te vas ?


--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------






.



Avatar
Arnaud [lwa]
Bonjour James,

Et peut-on savoir ce qui est "mieux" ?

Le principe des newsgroups est de partager les solutions....

--
Arnaud
-----------------------------------
http://users.skynet.be/mpfa/
http://memoaccess.free.fr
-----------------------------------


Dans sa missive, James a atermoyé :
| Merci pour la solution, mais j'ai trouvé encore mieux!
|
|| -----Message d'origine-----
|| Salut,
||
|| "James"
||
|| J'ai créer un formulaire sur lequel j'ai 16 listes
|| déroulante : qui me permettent de définir les critères
|| d'une requête. Le résultat de tout ça s'affichant dans
|| une zone de liste.
|| C'est donc un filtre multi-critère.
||
|| Non... ce n'est pas un "filtre" dans le sens Access.
||
|| Tu construit en fait la "chaîne SQL" pour alimenter... une
|| source!
||
||
||
||
|| J'ai pourtant essayé de rentrer
|| DocmdOpenReport,stdocname,acPreview, SQL (le nom de mon
|| filtre) mais y a toujours pas moyen que ça marche.
||
||
|| Justement, à cet endroit, c'est un filtre que tu peux
|| renseigner, du style "[NomClient]='toto'"
||
|| Or, tu souhaite transmettre le recordsource à ton état.
|| Comme tu as demandé 'simple', tu peux faire ceci:
||
|| Crée sur ton formulaire une petite zone de
| texte "txtSQL"
|| dont tu peux mettre la propriété visible à Non.
||
|| Lorsque tu alimente ta liste par :
||
|| Me.lstResults.RowSource = SQL
||
|| Me.lstResults.Requery NB: ce Requery est inutile...
||
|| tu place également ta chaîne dans la zone de texte:
||
|| Me!txtSQL = SQL
||
|| Cela fait, tu peux maintenant lancer ton état en mettant
|| d'abord dans son événement "Sur ouverture" la ligne suivante:
||
|| Me.RecordSource = Froms!TonFormulaire!txtSQL
||
|| Ainsi, l'état ira chercher sa chaîne dans le textbox du
|| formulaire. Bien sûr, il faut que les textbox de l'état aient
|| leurs sources renseignées.
||
||
|| Ca te vas ?
||
||
|| --
|| A+
|| Pierre (3stone) Access MVP
|| -----------------------------
|| http://users.skynet.be/mpfa
|| -----------------------------
||
||
||
||
||
||
|| .