Bonjour, je ne connais pas trop en programmation, j'ai trouvé un code comme ci-dessous, mais le problème c'est qu'il m'accepte pas le GetTypeField
En effet, je veux faire une recherche sur 2 tables, selon la table choisit, choisir le champ sur lequel l'utilisateur veut faire une recherche, et ensuite j'ai une zone de texte dans lequel, l'utilisateur écrit la valeur recherchée..
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 Private Sub CmdRech_Click() Dim Sql As String ' contient la requête Dim N_Field As String ' contient le nom du champ Dim N_Table As String Dim Criteria As String ' contient le critère Dim typChamp As Integer ' contient le type de champ If IsNull(Me.Lst_Champs) Or IsNull(Me.Critere) Then MsgBox "Choisissez un nom de champ et entrez la valeur.", vbExclamation, Me.Name Exit Sub ' l'un des champs est vide End If N_Table = Me.Lst_Table ' récupération de la table N_Field = Me.Lst_Champs ' récupération du nom du champ Criteria = Me.Critere ' récupération du critère typChamp = lf_GetTypeField(N_Table, N_Field) OpeChamp = Me.T_Recherche ' traitement de l'opérateur Select Case typChamp Case 1 ' bool If OpeChamp = 1 Then ' oui Criteria = N_Field & "=-1" ElseIf OpeChamp = 2 Then ' non Criteria = N_Field & "=0" Else Criteria = N_Field & "=Null" End If Case 2 To 8, 20 ' traite les numeriques ' traite la virgule If InStr(1, Criteria, ",") > 0 Then Criteria = Left(Criteria, InStr(1, Criteria, ",") - 1) _ & "." & Right(Criteria, InStr(1, Criteria, ",")) End If If typChamp = 8 Then ' type champ = date If IsDate(Me.Critere) Then ' critere = date Criteria = "#" & Criteria & "#" ' rajoute les dièses Else MsgBox "Vous devez entrer une date du type jj/mm/aa (21/01/03).", vbExclamation, Me.Name Exit Sub ' pas une date End If End If Select Case OpeChamp ' numerique, date Case 1 ' = Criteria = N_Field & "=" & Criteria Case 2 ' >= Criteria = N_Field & ">=" & Criteria Case 3 ' <= Criteria = N_Field & "<=" & Criteria Case 4 '<> Criteria = N_Field & "<>" & Criteria End Select Case 10, 12 ' texte Select Case OpeChamp Case 1 ' strictement egal Criteria = N_Field & " Like """ & Criteria & """" Case 2 ' commence par Criteria = N_Field & " Like """ & Criteria & "*" & """" Case 3 ' est contenu dans Criteria = N_Field & " Like """ & "*" & Criteria & "*" & """" Case 4 ' fini par Criteria = N_Field & " Like """ & "*" & Criteria & """" End Select Case Else MsgBox "Cas non prévu !" Exit Sub End Select If Me.OptRechCourante And Not Len(Me.Lst_Resultat.RowSource) = 0 Then Sql = Left(Me.Lst_Resultat.RowSource, Len(Me.Lst_Resultat.RowSource) - 3) Sql = Sql & " AND " & N_Table & "." & Criteria & "));" Else ' construit la rq sql Sql = "SELECT DISTINCTROW " & N_Table & ".*" Sql = Sql + " FROM " & N_Table Sql = Sql + " WHERE ((" & N_Table & "." & Criteria & "));" End If ' construit la requête sql* Me.Lst_Resultat.RowSource = Sql ' affecte sql a lst_result Me.Lst_Resultat.Requery ' rafraîchi la liste End Sub
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
65
66
67
68 Private Sub Lst_Champs_AfterUpdate() If IsNull(Me.Lst_Champs) Then MsgBox "Choisissez un nom de champ.", vbExclamation, Me.Name Exit Sub ' l'un des champs est vide End If Me.Etiq1.Visible = True Me.Etiq2.Visible = True Me.Etiq3.Visible = True Me.Etiq4.Visible = True Me.Bouton1.Visible = True Me.Bouton2.Visible = True Me.Bouton3.Visible = True Me.Bouton4.Visible = True Me.Critere.Visible = True ' pas de critere Me.T_Recherche = 1 ' repositionne l'option 1 Select Case lf_GetTypeField(Me.Lst_Table, Me.Lst_Champs) ' traite suivant le type du champ Case 0 ' vide null Me.Text_Champ.Caption = "Pas de données" Me.Etiq1.Visible = False Me.Etiq2.Visible = False Me.Etiq3.Visible = False ' obsolete dans ce cas Me.Etiq4.Caption = False ' cache Me.Bouton1.Visible = False Me.Bouton2.Visible = False Me.Bouton3.Visible = False Me.Bouton4.Visible = False Me.Critere.Visible = False ' pas de critere Case 1 Me.Text_Champ.Caption = "Oui/Non" Me.Etiq1.Caption = "Oui" Me.Etiq2.Caption = "Non" Me.Etiq3.Caption = "Aucun" Me.Etiq4.Caption = False ' obsolete dans ce cas Me.Bouton4.Visible = False Me.Critere.Visible = False ' pas de critere Case 2 To 8, 20 ' numérique, Date Me.Text_Champ.Caption = "Numérique/Date" Me.Etiq1.Caption = "Etre égale =" Me.Etiq2.Caption = "Etre supérieure >=" Me.Etiq3.Caption = "Etre inférieure <=" Me.Etiq4.Caption = "Etre différente <>" Case 10 ' string Me.Text_Champ.Caption = "Texte" Me.Etiq1.Caption = "Etre strictement identique" Me.Etiq2.Caption = "Commencer par la valeur" Me.Etiq3.Caption = "Contenir la valeur" Me.Etiq4.Caption = "Finir par la valeur" Case 12 Me.Text_Champ.Caption = "Mémo/Hyperlien" Me.Etiq3.Caption = "Contenir la valeur" Me.Etiq1.Visible = False Me.Etiq2.Visible = False Me.Etiq4.Visible = False Me.Bouton1.Visible = False Me.Bouton2.Visible = False Me.Bouton4.Visible = False Me.T_Recherche = 3 ' option 3 End Select End SubC'est la programmation que j'ai trouvé...Je ne comprends pas beaucoup là-dedans...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub Lst_Table_AfterUpdate() Me.Lst_Champs.RowSource = Me.Lst_Table Me.Lst_Champs = Null End Sub
Merci d'avance pour votre aide..j'en ai vraiment besoin !
Partager