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

Suis confus mais ... source de donnée pour liste déroulante

4 réponses
Avatar
fth
Bonjour
Ma Form dispose d'un Toggle bouton à plusieurs positions afin de filtrer
certaines données:

Select Case BtQuickFilter

Case Is = 1:
Me.FilterOn = False
Me.Filter = ""
Me.FilterOn = True

Case Is = 2:
Me.FilterOn = False
Me.Filter = "Type ='R'"
Me.FilterOn = True

Case Is = 3:
Me.FilterOn = False
Me.Filter = "Type='S'"
Me.FilterOn = True

Case Is = 4:
Me.FilterOn = False
Me.Filter = "Type='V'"
Me.FilterOn = True

End Select

Il y a aussi dans ma Form un DropDownList qui me permet de sélectionner un
record précis.

Comment dois-je m'y prendre pour que la DropDownList n'affiches QUE les
records résultant du filrte en cours?

D'avance merci

Frédéric

4 réponses

Avatar
Eric
Bonjour fth,

Ne sachant comment est remplie la liste ...

En supposant que la propriété Contenu de la liste est une instruction
SQL qui se termine par un point-virgule, sans clause de regroupement ni
Order by, tu peux faire:

1-Dans la partie déclarative du module de formulaire, sous Option
Compare Database et Option Explicit, tu déclares 2 variables:
Dim OldSQL as string, NewSQL as string

2-Sur Ouverture du formulaire ou sur chargement:
Private Sub form_open(cancel As integer) 'ou Form_load()
OldSQL=LaListe.RowSource
End sub

3- Adaptation du code du Toggle
'------------------------------------
Select Case BtQuickFilter
case 1
NewSQL=OldSQL
Me.Filterúlse
Case 2,3,4
Me.Filter="Type='" & choose(BtQuickFilter.value-1,"R","S","T") & "'"
NewSQL=NewSQL & " WHERE " & Me.Filter & ";"
Me.FilterOn=True
End Select
me.LaListe.rowsource = NewSQL
me.LaListe.requery
'------------------------------------

Sur l'évènement UnLoad du formulaire, tu remets le SQL initial de la liste:
MeLaListe.Rowsource= OldSQL

Juste une idée qui devrait, sous les conditions mentionnées, marcher.
Pas tester. (Serai absent toute l'après-midi)

Bonjour
Ma Form dispose d'un Toggle bouton à plusieurs positions afin de filtrer
certaines données:

Select Case BtQuickFilter

Case Is = 1:
Me.FilterOn = False
Me.Filter = ""
Me.FilterOn = True

Case Is = 2:
Me.FilterOn = False
Me.Filter = "Type ='R'"
Me.FilterOn = True

Case Is = 3:
Me.FilterOn = False
Me.Filter = "Type='S'"
Me.FilterOn = True

Case Is = 4:
Me.FilterOn = False
Me.Filter = "Type='V'"
Me.FilterOn = True

End Select

Il y a aussi dans ma Form un DropDownList qui me permet de sélectionner un
record précis.

Comment dois-je m'y prendre pour que la DropDownList n'affiches QUE les
records résultant du filrte en cours?

D'avance merci

Frédéric


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
fth
Oups, me suis sans doute mal exprimé.. ou alors, j'ai pas compris.
Donc:
le formulaire s'ouvre par défaut sur l'option 1 (la liste sans filtre)
les autres toggle fonctionne parfaitement.

Le soucis est pour le comboBox:

par défaut:
Row Source type: table/query
row source:SELECT Q_Srv.Srvname, Q_Srv.Type, Q_Srv.SrvClass FROM Q_Srv WHERE
(((Q_Srv.Srvname) Is Not Null)) ORDER BY Q_Srv.Srvname;

l'idéal serait que lorsque je filtre par exemple sur "R", la row source du
ComboBox devienne:
SELECT Q_Srv.Srvname, Q_Srv.Type, Q_Srv.SrvClass FROM Q_Srv WHERE
(((Q_Srv.Srvname) Is Not Null) AND ((Q_Srv.Type)="R")) ORDER BY
Q_Srv.Srvname;
Ce qui aurait pour conséquence d'avoir une liste dans le ComboBox
correspondant au filtre appliqué au formulaire.

Merci pou rvos pistes et vos idées,

Frédéric


"Eric" wrote:

Bonjour fth,

Ne sachant comment est remplie la liste ...

En supposant que la propriété Contenu de la liste est une instruction
SQL qui se termine par un point-virgule, sans clause de regroupement ni
Order by, tu peux faire:

1-Dans la partie déclarative du module de formulaire, sous Option
Compare Database et Option Explicit, tu déclares 2 variables:
Dim OldSQL as string, NewSQL as string

2-Sur Ouverture du formulaire ou sur chargement:
Private Sub form_open(cancel As integer) 'ou Form_load()
OldSQL=LaListe.RowSource
End sub

3- Adaptation du code du Toggle
'------------------------------------
Select Case BtQuickFilter
case 1
NewSQL=OldSQL
Me.Filterúlse
Case 2,3,4
Me.Filter="Type='" & choose(BtQuickFilter.value-1,"R","S","T") & "'"
NewSQL=NewSQL & " WHERE " & Me.Filter & ";"
Me.FilterOn=True
End Select
me.LaListe.rowsource = NewSQL
me.LaListe.requery
'------------------------------------

Sur l'évènement UnLoad du formulaire, tu remets le SQL initial de la liste:
MeLaListe.Rowsource= OldSQL

Juste une idée qui devrait, sous les conditions mentionnées, marcher.
Pas tester. (Serai absent toute l'après-midi)

Bonjour
Ma Form dispose d'un Toggle bouton à plusieurs positions afin de filtrer
certaines données:

Select Case BtQuickFilter

Case Is = 1:
Me.FilterOn = False
Me.Filter = ""
Me.FilterOn = True

Case Is = 2:
Me.FilterOn = False
Me.Filter = "Type ='R'"
Me.FilterOn = True

Case Is = 3:
Me.FilterOn = False
Me.Filter = "Type='S'"
Me.FilterOn = True

Case Is = 4:
Me.FilterOn = False
Me.Filter = "Type='V'"
Me.FilterOn = True

End Select

Il y a aussi dans ma Form un DropDownList qui me permet de sélectionner un
record précis.

Comment dois-je m'y prendre pour que la DropDownList n'affiches QUE les
records résultant du filrte en cours?

D'avance merci

Frédéric


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Eric
Bonsoir,

Je précisais juste que je ne savais pas si la rowsource de ta liste
était une requête enregistrée ou une instruction SQL.

Dans ton cas, il s'agit d'une instruction SQL. La table Q_Srv contient
le champ Type. Il faut décomposer ton SQL pour extraire momantanément la
clause Order By, mettre le critere supplémentaire et rajouter le Order
by après. {Les parenthèses d'Access sont pénibles}.

A mon avis, juste le Case 2,3,4 doit être modifié comme suit:
Case 2,3,4
position = InStr(OldChaine, "Order By")
NewSQL = left(OldSQL, position)
Me.Filter="Type='" & choose(BtQuickFilter.value-1,"R","S","T") & "'"
NewSQL=NewSQL & " And " & Me.Filter & " " & Mid(OldSQL, position)
Me.FilterOn=True
End Select

Par contre, au début de ta procédure, tu déclares position par
Dim position as Long

Oups, me suis sans doute mal exprimé.. ou alors, j'ai pas compris.
Donc:
le formulaire s'ouvre par défaut sur l'option 1 (la liste sans filtre)
les autres toggle fonctionne parfaitement.

Le soucis est pour le comboBox:

par défaut:
Row Source type: table/query
row source:SELECT Q_Srv.Srvname, Q_Srv.Type, Q_Srv.SrvClass FROM Q_Srv WHERE
(((Q_Srv.Srvname) Is Not Null)) ORDER BY Q_Srv.Srvname;

l'idéal serait que lorsque je filtre par exemple sur "R", la row source du
ComboBox devienne:
SELECT Q_Srv.Srvname, Q_Srv.Type, Q_Srv.SrvClass FROM Q_Srv WHERE
(((Q_Srv.Srvname) Is Not Null) AND ((Q_Srv.Type)="R")) ORDER BY
Q_Srv.Srvname;
Ce qui aurait pour conséquence d'avoir une liste dans le ComboBox
correspondant au filtre appliqué au formulaire.

Merci pou rvos pistes et vos idées,

Frédéric


"Eric" wrote:


Bonjour fth,

Ne sachant comment est remplie la liste ...

En supposant que la propriété Contenu de la liste est une instruction
SQL qui se termine par un point-virgule, sans clause de regroupement ni
Order by, tu peux faire:

1-Dans la partie déclarative du module de formulaire, sous Option
Compare Database et Option Explicit, tu déclares 2 variables:
Dim OldSQL as string, NewSQL as string

2-Sur Ouverture du formulaire ou sur chargement:
Private Sub form_open(cancel As integer) 'ou Form_load()
OldSQL=LaListe.RowSource
End sub

3- Adaptation du code du Toggle
'------------------------------------
Select Case BtQuickFilter
case 1
NewSQL=OldSQL
Me.Filterúlse
Case 2,3,4
Me.Filter="Type='" & choose(BtQuickFilter.value-1,"R","S","T") & "'"
NewSQL=NewSQL & " WHERE " & Me.Filter & ";"
Me.FilterOn=True
End Select
me.LaListe.rowsource = NewSQL
me.LaListe.requery
'------------------------------------

Sur l'évènement UnLoad du formulaire, tu remets le SQL initial de la liste:
MeLaListe.Rowsource= OldSQL

Juste une idée qui devrait, sous les conditions mentionnées, marcher.
Pas tester. (Serai absent toute l'après-midi)


Bonjour
Ma Form dispose d'un Toggle bouton à plusieurs positions afin de filtrer
certaines données:

Select Case BtQuickFilter

Case Is = 1:
Me.FilterOn = False
Me.Filter = ""
Me.FilterOn = True

Case Is = 2:
Me.FilterOn = False
Me.Filter = "Type ='R'"
Me.FilterOn = True

Case Is = 3:
Me.FilterOn = False
Me.Filter = "Type='S'"
Me.FilterOn = True

Case Is = 4:
Me.FilterOn = False
Me.Filter = "Type='V'"
Me.FilterOn = True

End Select

Il y a aussi dans ma Form un DropDownList qui me permet de sélectionner un
record précis.

Comment dois-je m'y prendre pour que la DropDownList n'affiches QUE les
records résultant du filrte en cours?

D'avance merci

Frédéric


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
Eric
re,

Correction, remplaces :
NewSQL = left(OldSQL, position)
par :
NewSQL = left(OldSQL, position-1)

Bonsoir,

Je précisais juste que je ne savais pas si la rowsource de ta liste
était une requête enregistrée ou une instruction SQL.

Dans ton cas, il s'agit d'une instruction SQL. La table Q_Srv contient
le champ Type. Il faut décomposer ton SQL pour extraire momantanément la
clause Order By, mettre le critere supplémentaire et rajouter le Order
by après. {Les parenthèses d'Access sont pénibles}.

A mon avis, juste le Case 2,3,4 doit être modifié comme suit:
Case 2,3,4
position = InStr(OldChaine, "Order By")
NewSQL = left(OldSQL, position)
Me.Filter="Type='" & choose(BtQuickFilter.value-1,"R","S","T") & "'"
NewSQL=NewSQL & " And " & Me.Filter & " " & Mid(OldSQL, position)
Me.FilterOn=True
End Select

Par contre, au début de ta procédure, tu déclares position par
Dim position as Long



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr