Filtres personnalisés et liste modifiables

Le
seb.....
Bonjour,

J'utilise l'exemple fourni le site de 3stone
(http://www.3stone.be/access/articles.php?lng=fr&pgC)

Celui-ci fontionne a merveille mais j'aimerais savoir comment le modifier
pour obtenir le résultat suivant :

(reprise de l'exemple de 3stone)


L'exemple ci-dessous suppose 3 zones de listes modifiables :

a.. ListeTextes
b.. ListeNombres
c.. ListeDates
placées dans l'entête d'un formulaire avec affichage en mode continu.


Private Sub FiltrerEnrg()

Dim strFiltre As String

If (Not IsNull(ListeTextes)) Then
strFiltre = "[ChampTexte]='" & ListeTextes & "' AND "
End If

If (Not IsNull(ListeNombres)) Then
strFiltre = strFiltre & "[ChampNumerique]=" & ListeNombres & " AND "
End If

If (Not IsNull(ListeDates)) Then
strFiltre = strFiltre & "[ChampDate]=#" & ListeDates & "# AND "
End If

If (strFiltre = "") Then
Me.Filter = ""
Me.FilterOn = False
Else
strFiltre = "(" & Left$­­(strFiltre, Len(strFiltre) - 5) & ")"
Me.Filter = strFiltre
Me.FilterOn = True
End If


Disons que dans ma table, j'ai les champs [ChampTexte], [ChampTexte2] et
[ChampTexte3]

La valeur que je veux filtrer peut se trouver dans [ChampTexte] et/ou
[ChampTexte2] et/ou [ChampTexte3]

Je voudrais donc savoir comment adapter le code pour qu'il me remonte
convenablement les enregistrements :

If (Not IsNull(ListeTextes)) Then
strFiltre = "[ChampTexte]='" & ListeTextes & "' AND "
End If


.

J'ai essayé de faire comme ceci, cela fonctionne uniquement si la valeur est
présente dans les 3 champs sinon ca ne me retourne rien.

If (Not IsNull(ListeTextes)) Then

strFiltre = strFiltre & "[ChampTexte]='" & ListeTextes & "' AND "
strFiltre = strFiltre & "[ChampTexte2]='" & ListeTextes & "' AND "
strFiltre = strFiltre & "[ChampTexte3]='" & ListeTextes & "' AND "

end if

Le filtre passé au form est donc : ([ChampTexte]='TESTaaaa' AND
[ChampTexte2]='TESTaaaa' AND [ChampTexte3]='TESTaaaa' )

Merci d'avance a celui ou celle qui voudra bien me filer un coup de main.



seb
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 #6370511
Salut,

"seb....."
| J'utilise l'exemple fourni le site de 3stone
| (http://www.3stone.be/access/articles.php?lng=fr&pgC)
|
| Celui-ci fontionne a merveille


Je sais ;-)


[...]
| J'ai essayé de faire comme ceci, cela fonctionne uniquement si la valeur est
| présente dans les 3 champs sinon ca ne me retourne rien.
|
| If (Not IsNull(ListeTextes)) Then
|
| strFiltre = strFiltre & "[ChampTexte]='" & ListeTextes & "' AND "
| strFiltre = strFiltre & "[ChampTexte2]='" & ListeTextes & "' AND "
| strFiltre = strFiltre & "[ChampTexte3]='" & ListeTextes & "' AND "
|
| end if
|
| Le filtre passé au form est donc : ([ChampTexte]='TESTaaaa' AND
| [ChampTexte2]='TESTaaaa' AND [ChampTexte3]='TESTaaaa' )


La modifier ne vaux pas dire l'estropier !

Le test :

if (Not IsNull([LeControleSurLeFormulaire]) Then

doit être réaliser sur chacun des contrôles... et non vouloir les regrouper
en un seul test !

Relire l'exemple qui est explicite...

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

<<Le test :

if (Not IsNull([LeControleSurLeFormulaire]) Then

doit être réaliser sur chacun des contrôles... >>

Je pense avoir compris cela... Une Liste Modifiable( ListeTextes) va faire
le test et alimenter le filtre sur un Champ ([ChampTexte])
strFiltre = "[ChampTexte]='" & ListeTextes & "' AND "

Moi, j'ai 1 Liste Modifiable( ListeTextes) sur le formulaire et 3 champs à
vérifier [ChampTexte], [ChampTexte2] et
[ChampTexte3]

Disons que dans ma liste modifiable je séléctionne "Babar"

et que dans la table "Babar" si situe à plusieurs endroits comme ceci :

| Testn | ChampTexte | ChampTexte2 | ChampTexte3 |
------------------------------------------------------
| Test1 | | Babar | Babar |
-------------------------------------------------------
| Test2 | Babar | | |
-------------------------------------------------------
| Test3 | | |
|
-------------------------------------------------------

Je souhaite que le résultat du filtrage me donne : Test1 et Test2








"3stone"
Salut,

"seb....."
| J'utilise l'exemple fourni le site de 3stone
| (http://www.3stone.be/access/articles.php?lng=fr&pgC)
|
| Celui-ci fontionne a merveille


Je sais ;-)


[...]
| J'ai essayé de faire comme ceci, cela fonctionne uniquement si la valeur
est
| présente dans les 3 champs sinon ca ne me retourne rien.
|
| If (Not IsNull(ListeTextes)) Then
|
| strFiltre = strFiltre & "[ChampTexte]='" & ListeTextes & "' AND "
| strFiltre = strFiltre & "[ChampTexte2]='" & ListeTextes & "' AND "
| strFiltre = strFiltre & "[ChampTexte3]='" & ListeTextes & "' AND "
|
| end if
|
| Le filtre passé au form est donc : ([ChampTexte]='TESTaaaa' AND
| [ChampTexte2]='TESTaaaa' AND [ChampTexte3]='TESTaaaa' )


La modifier ne vaux pas dire l'estropier !

Le test :

if (Not IsNull([LeControleSurLeFormulaire]) Then

doit être réaliser sur chacun des contrôles... et non vouloir les
regrouper
en un seul test !

Relire l'exemple qui est explicite...

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




3stone
Le #6370051
Salut,

"seb....."
| <<Le test :
|
| if (Not IsNull([LeControleSurLeFormulaire]) Then
|
| doit être réaliser sur chacun des contrôles... >>
|
| Je pense avoir compris cela... Une Liste Modifiable( ListeTextes) va faire
| le test et alimenter le filtre sur un Champ ([ChampTexte])
| strFiltre = "[ChampTexte]='" & ListeTextes & "' AND "
|
| Moi, j'ai 1 Liste Modifiable( ListeTextes) sur le formulaire et 3 champs à
| vérifier [ChampTexte], [ChampTexte2] et
| [ChampTexte3]
|
| Disons que dans ma liste modifiable je séléctionne "Babar"
|
| et que dans la table "Babar" si situe à plusieurs endroits comme ceci :
|
|| Testn | ChampTexte | ChampTexte2 | ChampTexte3 |
| ------------------------------------------------------
|| Test1 | | Babar | Babar |
| -------------------------------------------------------
|| Test2 | Babar | | |
| -------------------------------------------------------
|| Test3 | | |
||
| -------------------------------------------------------
|
| Je souhaite que le résultat du filtrage me donne : Test1 et Test2


Si tu dois chercher une valeur dans plusieurs champs, il y a un gros
défaut dans ta construction !!
Dans ce cas, tu dois revoir tes tables et tes relations.

Si tu gardes cela dans l'état, tu n'as besoin que d'une liste,
mais tester tous les champs et relier par OR et non par AND...

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

<< ... Si tu dois chercher une valeur dans plusieurs champs, il y a un gros
défaut dans ta construction !!
Dans ce cas, tu dois revoir tes tables et tes relations...>>

Au début j'étais parti comme je fais d'habitude. J'avais séparé les données
dans plusieurs tables avec une relation 1a+
Le probleme, c'est quand je ne filtre pas les enregistrements ceci sont
multipliés. Dans l'exemple, Test1serait affiché 2 fois etc...
Mon responsable ne veut pas de ca.

Donc, j'ai tout mis dans une table, ca fonctionne. J'ai suivi tes conseils,
je relies par OR

voici le code :
Private Sub FiltrerEnrg()

Dim strFiltre As String
Dim strFiltrepub As String

Dim cptefonction, cptefonction2, cptefonction3 As Integer
Dim cptefonction4, cptefonction5, cptefonction6 As Integer
Dim cptefonction7, cptefonction8, cptefonction9, cptefonction10 As Integer


'Definition du filtre sur le nom
If (Not IsNull(LM_nom)) Then
strFiltre = "[T_nom]='" & LM_nom & "' AND "
strFiltrepub = "[T_nom]='" & LM_nom & "' AND "
End If

'Definition du filtre sur la fonction
If (Not IsNull(LM_fonction)) Then

cptefonction = DCount("[T_fonction1]", "Tb_Talents",
"[T_fonction1]='" & LM_fonction & "'")
If cptefonction <> 0 Then
strFiltre = strFiltre & "[T_fonction1]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction1]='" & LM_fonction & "'
OR "
End If

cptefonction2 = DCount("[T_fonction2]", "Tb_Talents",
"[T_fonction2]='" & LM_fonction & "'")
If cptefonction2 <> 0 Then
strFiltre = strFiltre & "[T_fonction2]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction2]='" & LM_fonction & "'
OR "
End If

cptefonction3 = DCount("[T_fonction3]", "Tb_Talents",
"[T_fonction3]='" & LM_fonction & "'")
If cptefonction3 <> 0 Then
strFiltre = strFiltre & "[T_fonction3]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction3]='" & LM_fonction & "'
OR "
End If

cptefonction4 = DCount("[T_fonction4]", "Tb_Talents",
"[T_fonction4]='" & LM_fonction & "'")
If cptefonction4 <> 0 Then
strFiltre = strFiltre & "[T_fonction4]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction4]='" & LM_fonction & "'
OR "
End If

cptefonction5 = DCount("[T_fonction5]", "Tb_Talents",
"[T_fonction5]='" & LM_fonction & "'")
If cptefonction5 <> 0 Then
strFiltre = strFiltre & "[T_fonction5]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction5]='" & LM_fonction & "'
OR "
End If

cptefonction6 = DCount("[T_fonction6]", "Tb_Talents",
"[T_fonction6]='" & LM_fonction & "'")
If cptefonction6 <> 0 Then
strFiltre = strFiltre & "[T_fonction6]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction6]='" & LM_fonction & "'
OR "
End If

cptefonction7 = DCount("[T_fonction7]", "Tb_Talents",
"[T_fonction7]='" & LM_fonction & "'")
If cptefonction7 <> 0 Then
strFiltre = strFiltre & "[T_fonction7]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction7]='" & LM_fonction & "'
OR "
End If

cptefonction8 = DCount("[T_fonction8]", "Tb_Talents",
"[T_fonction8]='" & LM_fonction & "'")
If cptefonction8 <> 0 Then
strFiltre = strFiltre & "[T_fonction8]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction8]='" & LM_fonction & "'
OR "
End If

cptefonction9 = DCount("[T_fonction9]", "Tb_Talents",
"[T_fonction9]='" & LM_fonction & "'")
If cptefonction9 <> 0 Then
strFiltre = strFiltre & "[T_fonction9]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction9]='" & LM_fonction & "'
OR "
End If

cptefonction10 = DCount("[T_fonction10]", "Tb_Talents",
"[T_fonction10]='" & LM_fonction & "'")
If cptefonction10 <> 0 Then
strFiltre = strFiltre & "[T_fonction10]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction10]='" & LM_fonction & "'
OR "
End If


End If

'Definition du filtre sur le Pays
If (Not IsNull(LM_Pays)) Then 'si la valeur de n'est pas nulle
strFiltre = strFiltre & "[T_Pays]='" & LM_Pays & "' AND "
strFiltrepub = strFiltrepub & "[T_Pays]='" & LM_Pays & "' AND "
End If

'Definition du filtre sur la ville
If (Not IsNull(LM_Ville)) Then 'si la valeur de n'est pas nulle
strFiltre = strFiltre & "[T_ville]='" & LM_Ville & "' AND "
strFiltrepub = strFiltrepub & "[T_ville]='" & LM_Ville & "' AND "
End If


If (strFiltre = "") Then
Me.frm_SF_Talents.Form.Filter = ""
Me.frm_SF_Talents.Form.FilterOn = False
Else
strFiltre = "(" & Left$(strFiltre, Len(strFiltre) - 4) & ")"
strFiltrepub = Left$(strFiltrepub, Len(strFiltrepub) - 4)
Me.frm_SF_Talents.Form.Filter = strFiltre
Me.frm_SF_Talents.Form.FilterOn = True
End If

strFiltreall = strFiltre
strFiltreallpub = strFiltrepub
End Sub


comme tu peux le voir je fais cohabiter du AND et du OR et j'ai l'impression
que cela marche pas bien ensemble.
si je filtre sur la fonction "2nd assistant", le formulaire est correctement
filtré. si ensuite je filtre sur le nom, rien ne se passe.
pourtant le filtre est bien alimenté :

([T_nom]='NOM_TEST' AND [T_fonction1]='2nd ASSISTANT' OR [T_fonction2]='2nd
ASSISTANT' OR [T_fonction3]='2nd ASSISTANT')



Bonnes fêtes

Seb






"3stone" %
Salut,

"seb....."
| <<Le test :
|
| if (Not IsNull([LeControleSurLeFormulaire]) Then
|
| doit être réaliser sur chacun des contrôles... >>
|
| Je pense avoir compris cela... Une Liste Modifiable( ListeTextes) va
faire
| le test et alimenter le filtre sur un Champ ([ChampTexte])
| strFiltre = "[ChampTexte]='" & ListeTextes & "' AND "
|
| Moi, j'ai 1 Liste Modifiable( ListeTextes) sur le formulaire et 3 champs
à
| vérifier [ChampTexte], [ChampTexte2] et
| [ChampTexte3]
|
| Disons que dans ma liste modifiable je séléctionne "Babar"
|
| et que dans la table "Babar" si situe à plusieurs endroits comme ceci :
|
|| Testn | ChampTexte | ChampTexte2 | ChampTexte3 |
| ------------------------------------------------------
|| Test1 | | Babar | Babar |
| -------------------------------------------------------
|| Test2 | Babar | |
|
| -------------------------------------------------------
|| Test3 | | |
||
| -------------------------------------------------------
|
| Je souhaite que le résultat du filtrage me donne : Test1 et Test2


Si tu dois chercher une valeur dans plusieurs champs, il y a un gros
défaut dans ta construction !!
Dans ce cas, tu dois revoir tes tables et tes relations.

Si tu gardes cela dans l'état, tu n'as besoin que d'une liste,
mais tester tous les champs et relier par OR et non par AND...

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



news.free.fr
Le #6342101
j'ai trouvé...
"seb....." fktkho$cqc$
Merci Pierre,

<< ... Si tu dois chercher une valeur dans plusieurs champs, il y a un
gros
défaut dans ta construction !!
Dans ce cas, tu dois revoir tes tables et tes relations...>>

Au début j'étais parti comme je fais d'habitude. J'avais séparé les
données dans plusieurs tables avec une relation 1a+
Le probleme, c'est quand je ne filtre pas les enregistrements ceci sont
multipliés. Dans l'exemple, Test1serait affiché 2 fois etc...
Mon responsable ne veut pas de ca.

Donc, j'ai tout mis dans une table, ca fonctionne. J'ai suivi tes
conseils, je relies par OR

voici le code :
Private Sub FiltrerEnrg()

Dim strFiltre As String
Dim strFiltrepub As String

Dim cptefonction, cptefonction2, cptefonction3 As Integer
Dim cptefonction4, cptefonction5, cptefonction6 As Integer
Dim cptefonction7, cptefonction8, cptefonction9, cptefonction10 As Integer


'Definition du filtre sur le nom
If (Not IsNull(LM_nom)) Then
strFiltre = "[T_nom]='" & LM_nom & "' AND "
strFiltrepub = "[T_nom]='" & LM_nom & "' AND "
End If

'Definition du filtre sur la fonction
If (Not IsNull(LM_fonction)) Then

cptefonction = DCount("[T_fonction1]", "Tb_Talents",
"[T_fonction1]='" & LM_fonction & "'")
If cptefonction <> 0 Then
strFiltre = strFiltre & "[T_fonction1]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction1]='" & LM_fonction & "'
OR "
End If

cptefonction2 = DCount("[T_fonction2]", "Tb_Talents",
"[T_fonction2]='" & LM_fonction & "'")
If cptefonction2 <> 0 Then
strFiltre = strFiltre & "[T_fonction2]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction2]='" & LM_fonction & "'
OR "
End If

cptefonction3 = DCount("[T_fonction3]", "Tb_Talents",
"[T_fonction3]='" & LM_fonction & "'")
If cptefonction3 <> 0 Then
strFiltre = strFiltre & "[T_fonction3]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction3]='" & LM_fonction & "'
OR "
End If

cptefonction4 = DCount("[T_fonction4]", "Tb_Talents",
"[T_fonction4]='" & LM_fonction & "'")
If cptefonction4 <> 0 Then
strFiltre = strFiltre & "[T_fonction4]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction4]='" & LM_fonction & "'
OR "
End If

cptefonction5 = DCount("[T_fonction5]", "Tb_Talents",
"[T_fonction5]='" & LM_fonction & "'")
If cptefonction5 <> 0 Then
strFiltre = strFiltre & "[T_fonction5]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction5]='" & LM_fonction & "'
OR "
End If

cptefonction6 = DCount("[T_fonction6]", "Tb_Talents",
"[T_fonction6]='" & LM_fonction & "'")
If cptefonction6 <> 0 Then
strFiltre = strFiltre & "[T_fonction6]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction6]='" & LM_fonction & "'
OR "
End If

cptefonction7 = DCount("[T_fonction7]", "Tb_Talents",
"[T_fonction7]='" & LM_fonction & "'")
If cptefonction7 <> 0 Then
strFiltre = strFiltre & "[T_fonction7]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction7]='" & LM_fonction & "'
OR "
End If

cptefonction8 = DCount("[T_fonction8]", "Tb_Talents",
"[T_fonction8]='" & LM_fonction & "'")
If cptefonction8 <> 0 Then
strFiltre = strFiltre & "[T_fonction8]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction8]='" & LM_fonction & "'
OR "
End If

cptefonction9 = DCount("[T_fonction9]", "Tb_Talents",
"[T_fonction9]='" & LM_fonction & "'")
If cptefonction9 <> 0 Then
strFiltre = strFiltre & "[T_fonction9]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction9]='" & LM_fonction & "'
OR "
End If

cptefonction10 = DCount("[T_fonction10]", "Tb_Talents",
"[T_fonction10]='" & LM_fonction & "'")
If cptefonction10 <> 0 Then
strFiltre = strFiltre & "[T_fonction10]='" & LM_fonction & "' OR "
strFiltrepub = strFiltrepub & "[T_fonction10]='" & LM_fonction & "'
OR "
End If


End If

'Definition du filtre sur le Pays
If (Not IsNull(LM_Pays)) Then 'si la valeur de n'est pas nulle
strFiltre = strFiltre & "[T_Pays]='" & LM_Pays & "' AND "
strFiltrepub = strFiltrepub & "[T_Pays]='" & LM_Pays & "' AND "
End If

'Definition du filtre sur la ville
If (Not IsNull(LM_Ville)) Then 'si la valeur de n'est pas nulle
strFiltre = strFiltre & "[T_ville]='" & LM_Ville & "' AND "
strFiltrepub = strFiltrepub & "[T_ville]='" & LM_Ville & "' AND "
End If


If (strFiltre = "") Then
Me.frm_SF_Talents.Form.Filter = ""
Me.frm_SF_Talents.Form.FilterOn = False
Else
strFiltre = "(" & Left$(strFiltre, Len(strFiltre) - 4) & ")"
strFiltrepub = Left$(strFiltrepub, Len(strFiltrepub) - 4)
Me.frm_SF_Talents.Form.Filter = strFiltre
Me.frm_SF_Talents.Form.FilterOn = True
End If

strFiltreall = strFiltre
strFiltreallpub = strFiltrepub
End Sub


comme tu peux le voir je fais cohabiter du AND et du OR et j'ai
l'impression que cela marche pas bien ensemble.
si je filtre sur la fonction "2nd assistant", le formulaire est
correctement filtré. si ensuite je filtre sur le nom, rien ne se passe.
pourtant le filtre est bien alimenté :

([T_nom]='NOM_TEST' AND [T_fonction1]='2nd ASSISTANT' OR
[T_fonction2]='2nd ASSISTANT' OR [T_fonction3]='2nd ASSISTANT')



Bonnes fêtes

Seb






"3stone" %
Salut,

"seb....."
| <<Le test :
|
| if (Not IsNull([LeControleSurLeFormulaire]) Then
|
| doit être réaliser sur chacun des contrôles... >>
|
| Je pense avoir compris cela... Une Liste Modifiable( ListeTextes) va
faire
| le test et alimenter le filtre sur un Champ ([ChampTexte])
| strFiltre = "[ChampTexte]='" & ListeTextes & "' AND "
|
| Moi, j'ai 1 Liste Modifiable( ListeTextes) sur le formulaire et 3
champs à
| vérifier [ChampTexte], [ChampTexte2] et
| [ChampTexte3]
|
| Disons que dans ma liste modifiable je séléctionne "Babar"
|
| et que dans la table "Babar" si situe à plusieurs endroits comme ceci :
|
|| Testn | ChampTexte | ChampTexte2 | ChampTexte3 |
| ------------------------------------------------------
|| Test1 | | Babar | Babar |
| -------------------------------------------------------
|| Test2 | Babar | | |
| -------------------------------------------------------
|| Test3 | | |
||
| -------------------------------------------------------
|
| Je souhaite que le résultat du filtrage me donne : Test1 et Test2


Si tu dois chercher une valeur dans plusieurs champs, il y a un gros
défaut dans ta construction !!
Dans ce cas, tu dois revoir tes tables et tes relations.

Si tu gardes cela dans l'état, tu n'as besoin que d'une liste,
mais tester tous les champs et relier par OR et non par AND...

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







Publicité
Poster une réponse
Anonyme