OVH Cloud OVH Cloud

Filtrer une zone de liste

10 réponses
Avatar
Guy FALESSE
Bonjour à tous,

J'ai une zone de liste Liste0, une zone de texte: texte2 et un bouton.
La zone de liste a comme source une table de localités, mais lorsque je veux
faire:

Dim monSQL As String, Critère As String
Critère = Forms!frmTest!Texte2
monSQL = "SELECT tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité) = '" & Critère & "'" _
& "ORDER BY tblCodes.Localité;"
Forms!frmTest!Liste0.RowSourceType = "Table/requête"
Forms!frmTest!Liste0.RowSource = monSQL

Rien ne se passe, j'aurais voulu lorsque je tape un nom commençant par une
série de lettre que la zone de liste m'affiche les noms commençant par ce
qui est écrit dans la zone de texte.
Jai eu l'occasion aussi de voir un formulaire écrit en je ne sais quoi qui
affichait dans la zone de liste les noms commençant par ce qu'on écrivait
dans la zone de texte et se mettait à jour au fur et à mesure qu'on mettait
plus de lettre.
Ex: lorsqu'on tapait a tous les noms commençant par a s'affichait, si on
continuait et qu'on tapait au, la lsite affichait tous les noms commençant
par au ainsi de suite, une fois que la letre était tapée, pas besoin de
faire 'enter', la mise à jour était instantanée.
Si quelqu'un avait une idée de la possibilité de faire cela en Acces, ce
serait chouette.

D'avance merci

Guy FALESSE

10 réponses

Avatar
3stone
Salut,

"Guy FALESSE"
J'ai une zone de liste Liste0, une zone de texte: texte2 et un bouton.
La zone de liste a comme source une table de localités, mais lorsque je veux
faire:

Dim monSQL As String, Critère As String
Critère = Forms!frmTest!Texte2
monSQL = "SELECT tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité) = '" & Critère & "'" _
& "ORDER BY tblCodes.Localité;"
Forms!frmTest!Liste0.RowSourceType = "Table/requête"
Forms!frmTest!Liste0.RowSource = monSQL

Rien ne se passe, j'aurais voulu lorsque je tape un nom commençant par une
série de lettre que la zone de liste m'affiche les noms commençant par ce
qui est écrit dans la zone de texte.



Si c'est les noms *commencant* par ce qui est écrit
ce n'est donc pas " = Critères " mais obligatoirement
" Like Critères* "

& "WHERE tblCodes.Localité) Like '" & Critère & "'* " _




Jai eu l'occasion aussi de voir un formulaire écrit en je ne sais quoi qui
affichait dans la zone de liste les noms commençant par ce qu'on écrivait
dans la zone de texte et se mettait à jour au fur et à mesure qu'on mettait
plus de lettre.


Cette méthode est basée sur l'événement "On Change" du textbox
et en utilisant la propriété "ZoneDeTexte.Text" à la place de ZdT.Value"

Ensuite, il suffit de faire un ... Like ... selon la même méthode utilisée ici.


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

Avatar
Guy FALESSE
Salut Pierre,

Merci pour ta réponse.
Mais malheureusement, j'ai toujours ma zone de liste vierge :(
Je ne comprends et pas de message d'erreur.
@+

Guy FALESSE


"3stone" a écrit dans le message de
news:
Salut,

"Guy FALESSE"
J'ai une zone de liste Liste0, une zone de texte: texte2 et un bouton.
La zone de liste a comme source une table de localités, mais lorsque je
veux


faire:

Dim monSQL As String, Critère As String
Critère = Forms!frmTest!Texte2
monSQL = "SELECT tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité) = '" & Critère & "'" _
& "ORDER BY tblCodes.Localité;"
Forms!frmTest!Liste0.RowSourceType = "Table/requête"
Forms!frmTest!Liste0.RowSource = monSQL

Rien ne se passe, j'aurais voulu lorsque je tape un nom commençant par
une


série de lettre que la zone de liste m'affiche les noms commençant par
ce


qui est écrit dans la zone de texte.



Si c'est les noms *commencant* par ce qui est écrit
ce n'est donc pas " = Critères " mais obligatoirement
" Like Critères* "

& "WHERE tblCodes.Localité) Like '" & Critère & "'* " _




Jai eu l'occasion aussi de voir un formulaire écrit en je ne sais quoi
qui


affichait dans la zone de liste les noms commençant par ce qu'on
écrivait


dans la zone de texte et se mettait à jour au fur et à mesure qu'on
mettait


plus de lettre.


Cette méthode est basée sur l'événement "On Change" du textbox
et en utilisant la propriété "ZoneDeTexte.Text" à la place de
ZdT.Value"


Ensuite, il suffit de faire un ... Like ... selon la même méthode
utilisée ici.



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






Avatar
3stone
Salut,

"Guy FALESSE"
Mais malheureusement, j'ai toujours ma zone de liste vierge :(
Je ne comprends et pas de message d'erreur.



En supposant une contruction correcte, il faut également
veiller à ce que la chaine SQL construite possède bien
les espaces nécessaires entre les différents "mots" qui la compose.


exemple tiré de ta première chaine:

& "WHERE tblCodes.Localité) = '" & Critère & "'" _
& "ORDER BY tblCodes.Localité;"


ici, si Critère contient "toto", la concaténation créera:

"... totoORDER BY tblCodes.Localité;"

ce qui est incorrect. Il manque une espace devant " Order..."


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

Avatar
Guy FALESSE
Salut Pierre,

Merci de ta réponse, tu avais entièrement raison aussi, ai-je ceci
maintenant qui fonctionne très bien, mais comment faire, lorsque je tape une
lettre a par exemple, sans que je ne clique sur enter, comment faire pour la
liste soit triée, est-ce possible tout d'abors, donc, je tape a la liste est
triée avec les mots commençant par a, je continue à taper et j'ajoute un ai,
est-il possible que la liste soit triée par ai sans devoir passer par la
frappe sur la touche enter pour valider.
D'avance merci pour encore ainsi te solliciter.

Private Sub Texte2_AfterUpdate()
Dim monSQL As String, Critère As String
Critère = Forms!frmTest!Texte2 & "*"
monSQL = "SELECT tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité Like '" & Critère & "'" _
& "ORDER BY tblCodes.Localité;"
Forms!frmTest!Liste0.RowSourceType = "Table/requête"
Forms!frmTest!Liste0.RowSource = monSQL
End Sub


Guy FALESSE


"3stone" a écrit dans le message de
news:%23Kn$
Salut,

"Guy FALESSE"
Mais malheureusement, j'ai toujours ma zone de liste vierge :(
Je ne comprends et pas de message d'erreur.



En supposant une contruction correcte, il faut également
veiller à ce que la chaine SQL construite possède bien
les espaces nécessaires entre les différents "mots" qui la compose.


exemple tiré de ta première chaine:

& "WHERE tblCodes.Localité) = '" & Critère & "'" _
& "ORDER BY tblCodes.Localité;"


ici, si Critère contient "toto", la concaténation créera:

"... totoORDER BY tblCodes.Localité;"

ce qui est incorrect. Il manque une espace devant " Order..."


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






Avatar
Guy FALESSE
Re-salut Pierre,

J'ai essayé en mettant docmd.Keypreview=true dans l'activation du
formulaire et mettre le code dans touche Activée mais ça ne va pas.
@+
Guy FALESSE


"Guy FALESSE" a écrit dans le message de
news:
Salut Pierre,

Merci de ta réponse, tu avais entièrement raison aussi, ai-je ceci
maintenant qui fonctionne très bien, mais comment faire, lorsque je tape
une

lettre a par exemple, sans que je ne clique sur enter, comment faire pour
la

liste soit triée, est-ce possible tout d'abors, donc, je tape a la liste
est

triée avec les mots commençant par a, je continue à taper et j'ajoute un
ai,

est-il possible que la liste soit triée par ai sans devoir passer par la
frappe sur la touche enter pour valider.
D'avance merci pour encore ainsi te solliciter.

Private Sub Texte2_AfterUpdate()
Dim monSQL As String, Critère As String
Critère = Forms!frmTest!Texte2 & "*"
monSQL = "SELECT tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité Like '" & Critère & "'" _
& "ORDER BY tblCodes.Localité;"
Forms!frmTest!Liste0.RowSourceType = "Table/requête"
Forms!frmTest!Liste0.RowSource = monSQL
End Sub


Guy FALESSE


"3stone" a écrit dans le message de
news:%23Kn$
Salut,

"Guy FALESSE"
Mais malheureusement, j'ai toujours ma zone de liste vierge :(
Je ne comprends et pas de message d'erreur.



En supposant une contruction correcte, il faut également
veiller à ce que la chaine SQL construite possède bien
les espaces nécessaires entre les différents "mots" qui la compose.


exemple tiré de ta première chaine:

& "WHERE tblCodes.Localité) = '" & Critère & "'" _
& "ORDER BY tblCodes.Localité;"


ici, si Critère contient "toto", la concaténation créera:

"... totoORDER BY tblCodes.Localité;"

ce qui est incorrect. Il manque une espace devant " Order..."


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










Avatar
3stone
re,

"Guy FALESSE"
J'ai essayé en mettant docmd.Keypreview=true dans l'activation du
formulaire et mettre le code dans touche Activée mais ça ne va pas.



Tut tuuuttt !!!!


As tu lu ce que je disais au début du fil ?

Pour saisir une frappe de touche, lettre par lettre,
la scrutation se fait dans l'événement "On Change"
du textbox.

Dim strSQL As String
Dim strSaisie as String

strSaisie = TaZoneDeTexte.TEXT


Là, tu crée ta chaine SQL comme d'hab

strSQL = "Select ... From... Where ... " & strSaisie & "'*;"


et tu la donne comme source à ta liste

Liste.RowSource = strSQL


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




C'est tout ;-)

Avatar
Guy FALESSE
Salut Pierre,

Hé bien non, je ne l'avais pas vu, désolé mais bon, j'ai fais comme tu m'as
dit et j'ai désactivé docmd.Keypreview et sur on change, j'ai

Private Sub Texte2_Change()
Dim monSQL As String, Critère As String
Critère = Forms!frmTest!Texte2 & "*"
monSQL = "SELECT tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité Like '" & Critère & "'" _
& "ORDER BY tblCodes.Localité;"
Forms!frmTest!Liste0.RowSourceType = "Table/requête"
Forms!frmTest!Liste0.RowSource = monSQL
End Sub

C'est bien ce que tu m'as conseillé, malheureusement, ça ne va toujours pas.
Qu'ai-je encore fait comme connerie?
@+

Guy FALESSE




"3stone" a écrit dans le message de
news:
re,

"Guy FALESSE"
J'ai essayé en mettant docmd.Keypreview=true dans l'activation du
formulaire et mettre le code dans touche Activée mais ça ne va pas.



Tut tuuuttt !!!!


As tu lu ce que je disais au début du fil ?

Pour saisir une frappe de touche, lettre par lettre,
la scrutation se fait dans l'événement "On Change"
du textbox.

Dim strSQL As String
Dim strSaisie as String

strSaisie = TaZoneDeTexte.TEXT


Là, tu crée ta chaine SQL comme d'hab

strSQL = "Select ... From... Where ... " & strSaisie & "'*;"


et tu la donne comme source à ta liste

Liste.RowSource = strSQL


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




C'est tout ;-)







Avatar
Guy FALESSE
Re salut,

Cette méthode est basée sur l'événement "On Change" du textbox>
et en utilisant la propriété "ZoneDeTexte.Text" à la place de ZdT.Value">
C'est là que je ne comprends pas .Text à la place de .Value.


Non, ça y est, super, il fallait simplement que j'ajoute .text à :
Critère = Forms!frmTest!Texte2 & "*"
ce qui devient
Critère = Forms!frmTest!Texte2.Text & "*"

Encore merci beaucoup Pierre.

@+

Guy FALESSE




"Guy FALESSE" a écrit dans le message de
news:
Salut Pierre,

Hé bien non, je ne l'avais pas vu, désolé mais bon, j'ai fais comme tu
m'as

dit et j'ai désactivé docmd.Keypreview et sur on change, j'ai

Private Sub Texte2_Change()
Dim monSQL As String, Critère As String
Critère = Forms!frmTest!Texte2 & "*"
monSQL = "SELECT tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité Like '" & Critère & "'" _
& "ORDER BY tblCodes.Localité;"
Forms!frmTest!Liste0.RowSourceType = "Table/requête"
Forms!frmTest!Liste0.RowSource = monSQL
End Sub

C'est bien ce que tu m'as conseillé, malheureusement, ça ne va toujours
pas.

Qu'ai-je encore fait comme connerie?
@+

Guy FALESSE




"3stone" a écrit dans le message de
news:
re,

"Guy FALESSE"
J'ai essayé en mettant docmd.Keypreview=true dans l'activation du
formulaire et mettre le code dans touche Activée mais ça ne va pas.



Tut tuuuttt !!!!


As tu lu ce que je disais au début du fil ?

Pour saisir une frappe de touche, lettre par lettre,
la scrutation se fait dans l'événement "On Change"
du textbox.

Dim strSQL As String
Dim strSaisie as String

strSaisie = TaZoneDeTexte.TEXT


Là, tu crée ta chaine SQL comme d'hab

strSQL = "Select ... From... Where ... " & strSaisie & "'*;"


et tu la donne comme source à ta liste

Liste.RowSource = strSQL


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




C'est tout ;-)











Avatar
3stone
Salut,

Je viens de rentrer...


"Guy FALESSE"
Non, ça y est, super, il fallait simplement...


et je vois avec plaisir, que si on pousse un peu les gens,
ils cherchent mieux (et progresse mieux ;-)

C'est bien!


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

Avatar
Guy FALESSE
Salut Pierre,

En effet, je crois qu'on est trop pressé d'avoir la réponse et on néglige
parfois (souvent) de lire toutes les lignes des messages.
Quant à la progression, il est un fait évident qu'à lire les questions et
réponses de ce forum, ça aide énormément.
Le problème étant toujours de poser la bonne question et ça, ce n'est pas
toujours facile, d'autant plus qu'on essaie toujours de faire le plus concis
possible et çà, c'est sans doute l'erreur.
Enfin, que soit, encore un grand merci.
@+

Guy FALESSE


"3stone" a écrit dans le message de
news:
Salut,

Je viens de rentrer...


"Guy FALESSE"
Non, ça y est, super, il fallait simplement...


et je vois avec plaisir, que si on pousse un peu les gens,
ils cherchent mieux (et progresse mieux ;-)

C'est bien!


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