Bonjour,
Voila j'aurais besoin d'un peu d'aide pour optimiser un système de filtre basé sur plusieurs listes déroulantes qui se mettent à jour en cascade les unes en fonctions des autres (enfin c'est ce que j'ai essayé de faire...).
J'ai assez de mal à faire ça vu mon niveau plus que moyen.
Voici donc ce que j'ai essayé de faire : j'ai 5 listes déroulantes, filtreCbo1, filtreCbo2, filtreCbo3, filtreCbo4 et filtreCbo5 qui me servent dans un formulaire de recherche multicritères pour affiner mes recherches.
Après la mise à jour de chaque liste, le Rowsource des autres est modifié pour prendre en compte le choix actuel. Un double clic réinitialise la liste, et celles qui en dépendent.
J'ai des comportements bizarres selon que la cascade de choix ne se fait pas comme prévu normalement, dans l'ordre ou dans le désordre, si par exemple je passe directement de la liste 1 à la liste 4 par exemple, ou si les listes sont plusieurs fois modifiées dans un sens ou dans l'autre.
Je crois savoir qu'on peut libérer la mémoire à la fin de la procédure, est-ce que ça pourrait être une solution ? Si oui comment le faire ?
Voici ce qu'est mon code actuel pour la première de ces listes, la filtreCbo1.
après MAJ :
au double clic :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Private Sub filtreCbo1_AfterUpdate() If Not IsNull(Me.filtreCbo2) Then: Me.filtreCbo2 = Null If Not IsNull(Me.filtreCbo3) Then: Me.filtreCbo3 = Null If Not IsNull(Me.filtreCbo4) Then: Me.filtreCbo4 = Null If Not IsNull(Me.filtreCbo5) Then: Me.filtreCbo5 = Null Me.filtreCbo2.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca " _ & "FROM T_APE " _ & "WHERE (((Len([Code_APE]))=2) AND ((T_APE.section)=[Formulaires]![F_RechercheCommerces]![filtreCbo1]));" Me.filtreCbo3.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca " _ & "FROM T_APE " _ & "WHERE (((Len([Code_APE]))=3) AND ((T_APE.section)=[Formulaires]![F_RechercheCommerces]![filtreCbo1]));" Me.filtreCbo4.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca " _ & "FROM T_APE " _ & "WHERE (((Len([Code_APE]))=4) AND ((T_APE.section)=[Formulaires]![F_RechercheCommerces]![filtreCbo1]));" Me.filtreCbo5.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca " _ & "FROM T_APE " _ & "WHERE (((Len([Code_APE]))=5) AND ((T_APE.section)=[Formulaires]![F_RechercheCommerces]![filtreCbo1]));" Me.Requery End Sub
Je suis bien sur preneur de tout conseil ou correction si besoin est.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Private Sub filtreCbo1_DblClick(Cancel As Integer) If Not IsNull(Me.filtreCbo1) Then Me.filtreCbo1 = Null Me.filtreCbo2 = Null Me.filtreCbo3 = Null Me.filtreCbo4 = Null Me.filtreCbo5 = Null Me.filtreCbo2.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca FROM T_APE WHERE (((Len([Code_APE]))=2));" Me.filtreCbo3.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca FROM T_APE WHERE (((Len([Code_APE]))=3));" Me.filtreCbo4.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca FROM T_APE WHERE (((Len([Code_APE]))=4));" Me.filtreCbo5.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca FROM T_APE WHERE (((Len([Code_APE]))=5));" Me.Requery End If End Sub
Merci
Partager