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

critère par défaut à l'ouverture du formulaire de recherche CAFEINE

1 réponse
Avatar
s.jean
Bonjour

J'utilise le formulaire de recherche multi crit=E8res qui est =E0
l'adresse suivante :
http://cafeine.developpez.com/access/tutoriel/recherchemulti/

Je l'ai r=E9alis=E9 il y a plusieurs ann=E9es et aucun probl=E8me, impeccabl=
e.

Aujourd'hui je souhaiterai qu'un des crit=E8res soit activ=E9 =E0
l'ouverture du formulaire.

J'ai une requ=EAte rqt_Commandes_non_archivees avec un champs Archive
de format oui/non. Actuellement =E0 l'ouverture tous les enregistrements
s'affichent. Je souhaiterai que seuls les enregistrements r=E9pondant =E0
non pour le crit=E8re Archive s'affichent, et laisser la possibilit=E9 de
d=E9cocher ce crit=E8re ou choisir oui.

J'ai essay=E9 le code suivant sachant que chkRechArchive est ma case =E0
cocher pour le crit=E8re Archive, mais =E0 partir du moment o=F9 je mets ce
code le filtre sur ce crit=E8re ne s'effectue plus ni =E0 l'ouverture, ni
si je change les crit=E8res :

Private Sub Form_Open(Cancel As Integer)
Me.chkRechArchive.SetFocus
Me.chkRechArchive =3D False
End Sub


Je mets ci-dessous l'int=E9gralit=E9 du code du formulaire, est ce que
quelqu'un aurait une id=E9e pour que je d=E9finisse un crit=E8re par d=E9fau=
t
et que le filtre continue de marcher ?

Merci beaucoup
Sandrine
-

Option Compare Database
Private Sub chkClient_Click()
Me.txtRechclient.Visible =3D Not Me.txtRechclient.Visible
RefreshQuery
End Sub

Private Sub chkCommande_Click()
Me.txtRechcommande.Visible =3D Not Me.txtRechcommande.Visible
RefreshQuery
End Sub

Private Sub chkRechfournisseur_Click()
Me.txtRechFournisseur.Visible =3D Not Me.txtRechFournisseur.Visible
RefreshQuery
End Sub

Private Sub chkRechArchive_Click()
Me.cmcRechArchive.Visible =3D Not Me.cmcRechArchive.Visible
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 "chb"
ctl.Value =3D 0

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.Liste20.RowSource =3D "SELECT CODE, COMMANDE, FOURNISSEUR,
COMMERCIAL, CLIENT, LivraisonClient, Expr1, ETD, ETA, [tbl
Commandes].Archive FROM rqt_Commandes_Non_Archivees ORDER BY
rqt_Commandes_Non_Archivees!Code DESC;"
Me.Liste20.Requery
End Sub

Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String

SQL =3D "SELECT CODE, COMMANDE, FOURNISSEUR, COMMERCIAL, CLIENT,
LivraisonClient, Expr1, ETD, ETA, [tbl Commandes].Archive FROM
rqt_Commandes_Non_Archivees Where rqt_Commandes_Non_Archivees!CODE <>
0"

If Not Me.chkclient Then
SQL =3D SQL & "AND rqt_Commandes_Non_Archivees!CLIENT like '*" &
Me.txtRechclient & "*' "
End If

If Not Me.chkcommande Then
SQL =3D SQL & "AND rqt_Commandes_Non_Archivees!COMMANDE like '*" &
Me.txtRechcommande & "*' "
End If

If Not Me.chkRechFournisseur Then
SQL =3D SQL & "AND rqt_Commandes_Non_Archivees!FOURNISSEUR like '*" &
Me.txtRechFournisseur & "*' "
End If

If Not Me.chkRechArchive Then
SQL =3D SQL & "AND rqt_Commandes_Non_Archivees![tbl Commandes].Archive
like '*" & Me.cmcRechArchive & "*' "
End If

SQLWhere =3D Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") -
Len("Where ") + 1))

SQL =3D SQL & ";"

Me.lblstats.Caption =3D DCount("*", "rqt_Commandes_Non_Archivees",
SQLWhere) & " / " & DCount("*", "rqt_Commandes_Non_Archivees")
Me.Liste20.RowSource =3D SQL
Me.Liste20.Requery

End Sub

Private Sub Form_Open(Cancel As Integer)
Me.chkRechArchive.SetFocus
Me.chkRechArchive =3D False
End Sub

Private Sub txtRechcommande_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub

Private Sub txtRechclient_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub

Private Sub txtRechfournisseur_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub

Private Sub cmcRechArchive_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub

Private Sub Liste20_DblClick(Cancel As Integer)
DoCmd.OpenForm "frmCommandes", acNormal, , "[CODE] =3D " & Me.Liste20
End Sub

1 réponse

Avatar
3stone
Salut,


Dans ton code, tu crées simplement une requête "en dur" et
sans tenir compte des sélections...

Il est plus intéressant de ne construire la clause Where que sur
les controles qui ont été sélectionnés.

Ici, il y a un exemple pour la création d'un filtre de formulaire :
http://www.3stone.be/access/articles.php?lng=fr&pgC
le principe pour une requête reste le même...

Donc, pour une liste ou une zone de texte, on l'inclus uniquement
si non Null, pour les case à cocher, on inclus toujours...


PS:
developpez.com à un forum pour les précisions sur le code puisé ;-)


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)




"s.jean"
J'utilise le formulaire de recherche multi critères qui est à
l'adresse suivante :
http://cafeine.developpez.com/access/tutoriel/recherchemulti/

Je l'ai réalisé il y a plusieurs années et aucun problème, impeccable.

Aujourd'hui je souhaiterai qu'un des critères soit activé à
l'ouverture du formulaire.

J'ai une requête rqt_Commandes_non_archivees avec un champs Archive
de format oui/non. Actuellement à l'ouverture tous les enregistrements
s'affichent. Je souhaiterai que seuls les enregistrements répondant à
non pour le critère Archive s'affichent, et laisser la possibilité de
décocher ce critère ou choisir oui.

J'ai essayé le code suivant sachant que chkRechArchive est ma case à
cocher pour le critère Archive, mais à partir du moment où je mets ce
code le filtre sur ce critère ne s'effectue plus ni à l'ouverture, ni
si je change les critères :

Private Sub Form_Open(Cancel As Integer)
Me.chkRechArchive.SetFocus
Me.chkRechArchive = False
End Sub


Je mets ci-dessous l'intégralité du code du formulaire, est ce que
quelqu'un aurait une idée pour que je définisse un critère par défaut
et que le filtre continue de marcher ?

Merci beaucoup
Sandrine
-

Option Compare Database
Private Sub chkClient_Click()
Me.txtRechclient.Visible = Not Me.txtRechclient.Visible
RefreshQuery
End Sub

Private Sub chkCommande_Click()
Me.txtRechcommande.Visible = Not Me.txtRechcommande.Visible
RefreshQuery
End Sub

Private Sub chkRechfournisseur_Click()
Me.txtRechFournisseur.Visible = Not Me.txtRechFournisseur.Visible
RefreshQuery
End Sub

Private Sub chkRechArchive_Click()
Me.cmcRechArchive.Visible = Not Me.cmcRechArchive.Visible
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 = -1

Case "chb"
ctl.Value = 0

Case "lbl"
ctl.Caption = "- * - * -"

Case "txt"
ctl.Visible = False
ctl.Value = ""

Case "cmb"
ctl.Visible = False



End Select
Next ctl


Me.Liste20.RowSource = "SELECT CODE, COMMANDE, FOURNISSEUR,
COMMERCIAL, CLIENT, LivraisonClient, Expr1, ETD, ETA, [tbl
Commandes].Archive FROM rqt_Commandes_Non_Archivees ORDER BY
rqt_Commandes_Non_Archivees!Code DESC;"
Me.Liste20.Requery
End Sub

Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String

SQL = "SELECT CODE, COMMANDE, FOURNISSEUR, COMMERCIAL, CLIENT,
LivraisonClient, Expr1, ETD, ETA, [tbl Commandes].Archive FROM
rqt_Commandes_Non_Archivees Where rqt_Commandes_Non_Archivees!CODE <>
0"

If Not Me.chkclient Then
SQL = SQL & "AND rqt_Commandes_Non_Archivees!CLIENT like '*" &
Me.txtRechclient & "*' "
End If

If Not Me.chkcommande Then
SQL = SQL & "AND rqt_Commandes_Non_Archivees!COMMANDE like '*" &
Me.txtRechcommande & "*' "
End If

If Not Me.chkRechFournisseur Then
SQL = SQL & "AND rqt_Commandes_Non_Archivees!FOURNISSEUR like '*" &
Me.txtRechFournisseur & "*' "
End If

If Not Me.chkRechArchive Then
SQL = SQL & "AND rqt_Commandes_Non_Archivees![tbl Commandes].Archive
like '*" & Me.cmcRechArchive & "*' "
End If

SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") -
Len("Where ") + 1))

SQL = SQL & ";"

Me.lblstats.Caption = DCount("*", "rqt_Commandes_Non_Archivees",
SQLWhere) & " / " & DCount("*", "rqt_Commandes_Non_Archivees")
Me.Liste20.RowSource = SQL
Me.Liste20.Requery

End Sub

Private Sub Form_Open(Cancel As Integer)
Me.chkRechArchive.SetFocus
Me.chkRechArchive = False
End Sub

Private Sub txtRechcommande_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub

Private Sub txtRechclient_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub

Private Sub txtRechfournisseur_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub

Private Sub cmcRechArchive_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub

Private Sub Liste20_DblClick(Cancel As Integer)
DoCmd.OpenForm "frmCommandes", acNormal, , "[CODE] = " & Me.Liste20
End Sub