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

Le
s.jean
Bonjour

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, impeccabl=
e.

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éfau=
t
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
3stone
Le #7031591
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
Publicité
Poster une réponse
Anonyme