Bonjour a tous !
Ca fais bien longtemps que je n'ai pas fourre mon nez en ces lieux, et je dois dire que j'ai pas mal perdu la main dans la programmation. Oui, je m'y remet...
Je suis en train de coder une bdd access pour la gestion des stocks, et j'en suis à fabriquer un formulaire montrant une liste de mes produits. J'utilise pour ce faire un sous formulaire, et je cherche a implanter un moteur de recherche dans le formulaire maitre. J'utilise 4 critères de recherche, jusqu'ici, j'en ai deux qui fonctionnent correctement.
Désignation et code barre fonctionne nickel.
Je m'arrache les cheveux pour faire fonctionner le critère Secteur d'usage...
Le critère type, quand a lui, je m'en occuperais plus tard, quand j'aurais compris le bug pour le -secteur-.
Voici mon code VBA
Je pense que mon probleme se pose au niveau de l'instruction SQL quand je concatene ma chaine, mais je vois pas ou est le probleme.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 Private Sub Btn_Filtrer_Click() ' fonction de recherche On Error Resume Next Dim SQL_String As String SQL_String = "SELECT base_articles.* FROM base_articles" Filtre_Actif = False ' Initialisation du filtre afin de déterminer si la concaténation de la chaine commence par un where ou un and CF_Filtre = Me.Filtre_Designation ' Filtre désignation If IsNull(CF_Filtre) Or CF_Filtre = "" Then CF_Filtre = "" Select Case CF_Filtre Case Is > "" Select Case Filtre_Actif Case True SQL_String = SQL_String & " AND ((base_articles.MP_Cat) Like " & Chr(34) & "*" & CF_Filtre & "*" & Chr(34) & ")" Case False SQL_String = SQL_String & " WHERE (((base_articles.MP_Cat) Like " & Chr(34) & "*" & CF_Filtre & "*" & Chr(34) & ")" End Select Filtre_Actif = True End Select CF_Filtre = Me.Filtre_Code_Barre ' Filtre code barre If IsNull(CF_Filtre) Or CF_Filtre = "" Then CF_Filtre = "" Select Case CF_Filtre Case Is > "" Select Case Filtre_Actif Case True SQL_String = SQL_String & " AND ((base_articles.Code_Barre) = " & Chr(34) & CF_Filtre & Chr(34) & ")" Case False SQL_String = SQL_String & " WHERE (((base_articles.Code_Barre) = " & Chr(34) & CF_Filtre & Chr(34) & ")" End Select Filtre_Actif = True End Select CF_Filtre = Me.Filtre_Secteur ' Filtre secteur If IsNull(CF_Filtre) Or CF_Filtre = "" Then CF_Filtre = "" Select Case CF_Filtre Case Is > "" Select Case Filtre_Actif Case True SQL_String = SQL_String & " AND ((base_articles.Secteur) = " & Chr(34) & CF_Filtre & Chr(34) & ")" Case False SQL_String = SQL_String & " WHERE (((base_articles.Secteur) = " & Chr(34) & CF_Filtre & Chr(34) & ")" End Select Filtre_Actif = True End Select CF_Filtre = Me.Filtre_Type ' Filtre type If IsNull(CF_Filtre) Or CF_Filtre = 0 Or CF_Filtre = 0 Then CF_Filtre = 0 Select Case CF_Filtre Case Is > 0 Select Case Filtre_Actif Case True SQL_String = SQL_String & " AND ((base_articles.Type) = " & CF_Filtre & ")" Case False SQL_String = SQL_String & " WHERE (((base_articles.Type) = " & CF_Filtre & ")" End Select Filtre_Actif = True End Select Select Case Filtre_Actif ' opérateur de fin de chaine Case True SQL_String = SQL_String & ") ORDER BY base_articles.MP_Cat;" Case False SQL_String = SQL_String & " ORDER BY base_articles.MP_Cat;" End Select ' Changement du RecordSource du sous formulaire en fonction des filtres Me.Form![SF_liste_articles].Form.RecordSource = SQL_String DoCmd.Requery "SF_liste_articles" End Sub
Pour info, la liste deroulante Secteur va chercher ses infos dans une sous table -def_secteur-, elle retourne donc une valeur numerique...
Le champ secteur de ma table base_article est une liste de choix qui trouve sa source dans la base def_secteur
Merci d'avance pour votre aide
Partager