Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/01/2012, 13h58   #1
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 2
Points : 2
Par défaut Probleme recherche multicrière

Bonjour,

j'ai appliqué à la lettre le tutorial de Caféine présent sur le site. J'ai compris le fonctionnement et réalisé ma SGBD à la différence d'etre sur plusieur tables.

Principe de fonctionnement: je voudrais dans un premeir temps lister l'ensmeble des donnés de ma requete au chargement de la page, puis précise la recherche par la suite via le multi-critère.


Mon probleme se situe au niveau de l'execution de mon code.

Le programme arrive à compiler. cependant il devrait afficher dans la listbox le rendu de ma requete. Mais il affiche soit rien, soit la requete. J 'ai chercher sur internet et via l'aide et je n'ai pas trouver. Pouvez vous m'aider ?

De plus quand je selectionne le contenu de ma SQL dans une requete classque elle s'éxecute corretement.

Mes hypothèses sont soit:
un problème au niveau du paramétrage de listbox
un probleme au niveau code


Code :
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
Option Compare Database
 
Private Sub chxAdresseIP_Click()
    Me.TxtRech_AdressIP.Visible = Not Me.TxtRech_AdressIP.Visible
    RefreshQuery
End Sub
 
Private Sub ChxAgencee_Click()
   Me.cmbagence.Visible = Not Me.cmbagence.Visible
   RefreshQuery
End Sub
Private Sub chxAutomate_Click()
   Me.TxtRechNom_auto.Visible = Not Me.TxtRechNom_auto.Visible
   RefreshQuery
End Sub
 
Private Sub chxContrat_Click()
 
    Me.cmbContrat.Visible = Not Me.cmbContrat.Visible
    RefreshQuery
End Sub
 
Private Sub chxMarqueAUto_Click()
    Me.cmbMarque.Visible = Not Me.cmbMarque.Visible
End Sub
 
Private Sub chxSite_Click()
   Me.cmbsite.Visible = Not Me.cmbsite.Visible
 
End Sub
 
Private Sub chxSupervis_Click()
    Me.cmbSupervis.Visible = Not Me.cmbSupervis.Visible
RefreshQuery
End Sub
 
Private Sub chxTelephone_Click()
    Me.TxtRech_telephone.Visible = Not Me.TxtRech_telephone.Visible
    RefreshQuery
End Sub
 
Private Sub chxType_Auto_Click()
    Me.cmbtype.Visible = Not Me.cmbtype.Visible
    RefreshQuery
 
 
End Sub
 
Private Sub cmbagence_AfterUpdate()
Dim lngIDCat   As Long
Dim SQL4        As String
 
  '' Vérifie que l'on a cliqué sur une agence pour éviter le NULL
  If Not IsNumeric(Me!cmbagence) Then Exit Sub
  '' Affecte la valeur de IDagence à la variable lngIDCat
  lngIDCat = Me!cmbagence
 
  If lngIDCat < 5 Or lngIDCat = 13 Then
 
  '' Construit la chaîne SQL avec la agence concernée
  SQL4 = "SELECT idcontract, contrat, agence FROM liste_contrat_automate WHERE agence =" & lngIDCat & " ORDER BY contrat "
  End If
  If lngIDCat > 5 Or lngIDCat = 12 Then
        SQL4 = " SELECT idcontrat, contrat, agence FROM[listecontrat Télégestion]WHERE agence =" & lngIDCat & " ORDER BY contrat "
  End If
 
  '' Affecte la chaîne SQL à la liste des métiers
  cmbContrat.RowSource = SQL4
  Me![cmbContrat].Requery
  RefreshQuery
 
End Sub
 
 
Private Sub cmbcontrat_AfterUpdate()
Dim lngIDsit   As String
Dim lngIDCat   As Long
Dim SQL3       As String
 
  '' Vérifie que l'on a cliqué sur un Contrat pour éviter le NULL
  ''If Not String(Me!cmbContrat) Then Exit Sub
  '' Affecte la valeur de IDagence à la variable lngIDCat
  lngIDsit = Me!cmbContrat.Column(1)
  lngIDCat = Me!cmbagence
 
  If lngIDCat < 5 Or lngIDCat = 13 Then
  '' Construit la chaîne SQL avec la agence concernée
 
    SQL3 = " SELECT site, contrat FROM table_liste_automate WHERE contrat LIKE '*" & Me.cmbContrat.Column(1) & "*' "
  End If
  If lngIDCat > 5 Or lngIDCat = 12 Then
   SQL3 = " SELECT site , contrat FROM [SITETELEGESTION]WHERE contrat LIKE '*" & Me.cmbContrat.Column(1) & "*' "
  End If
 
  cmbsite.RowSource = SQL3
  Me![cmbsite].Requery
  RefreshQuery
 
End Sub
 
Private Sub RefreshQuery()
Dim RS As DAO.Recordset
Dim SQL As String, SQL2 As String
Dim SQLWhere As String
 
SQL = "SELECT [Nom_automate].[Nom de l'équipement] , [Nom_automate].[Marque] , [Nom_automate].[TYPE] , [Nom_automate.ETAT , Nom_automate.[Derniere modification] , table_liste_automate.site , Liste_contrat_automate.contrat , listeAgence.[Nom agence], listeAgence.[type de gestion] FROM ((listeAgence INNER JOIN Liste_contrat_automate ON listeAgence.[Id agence] = Liste_contrat_automate.agence) INNER JOIN table_liste_automate ON Liste_contrat_automate.contrat = table_liste_automate.contrat)INNER JOIN Nom_automate ON table_liste_automate.site LIKE Nom_automate.site ; "
 
'SQL2 = "SELECT Count(*) AS Cnt FROM B_SOCIETES INNER JOIN _C_CONTRATS ON [B_SOCIETES].[ID_SOCIETE]=[_C_CONTRATS].[ID_SOCIETE] "
 
 SQLWhere = "where Nom_automate.[Numéro d'identifiant]<>0"
 
If Not Me.ChxAutomate Then
    SQLWhere = SQLWhere & "And [Nom de léquipement] like '*" & Me.TxtRechNom_auto & "*' "
End If
If Not Me.chxAgencee Then
    SQLWhere = SQLWhere & "And listeAgence.[Nom agence] = '" & Me.cmbagence & "' "
End If
If Not Me.chxContrat Then
    SQLWhere = SQLWhere & "And Liste_contrat_automate!contrat = '" & Me.cmbContrat & "' "
End If
 
 
 SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
 
 
SQL = SQL & SQLWhere & ";"
 
Me.Lstresult.RowSource = SQL
Me.Lstresult.Requery
 
 
End Sub
 
 
 
 
Private Sub Commande0_Click()
On Error GoTo Err_Commande0_Click
 
 
    DoCmd.Close
 
Exit_Commande0_Click:
    Exit Sub
 
Err_Commande0_Click:
    MsgBox Err.Description
    Resume Exit_Commande0_Click
 
End Sub
 
 
 
 
Private Sub Form_Load()
Dim ctl As Control
 
For Each ctl In Me.Controls
    Select Case Left(ctl.Name, 3)
 
 
        Case "lbl"
            ctl.Caption = "- * - * -"
        Case "Txt"
            ctl.Visible = False
            ctl.Value = ""
        Case "cmb"
            ctl.Visible = False
    End Select
Next ctl
 
Me.Lstresult.RowSource = " SELECT [Nom_automate].[Nom de l'équipement] , [Nom_automate].[Marque] , [Nom_automate].[TYPE] , [Nom_automate.ETAT , Nom_automate.[Derniere modification] , table_liste_automate.site , Liste_contrat_automate.contrat , listeAgence.[Nom agence], listeAgence.[type de gestion] FROM ((listeAgence INNER JOIN Liste_contrat_automate ON listeAgence.[Id agence] = Liste_contrat_automate.agence) INNER JOIN table_liste_automate ON Liste_contrat_automate.contrat = table_liste_automate.contrat)INNER JOIN Nom_automate ON table_liste_automate.site LIKE Nom_automate.site "
Me.Lstresult.Requery
 
 
 
End Sub

Je pense que mon probleme se situe ici :
Code :
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
Private Sub RefreshQuery()
Dim RS As DAO.Recordset
Dim SQL As String, SQL2 As String
Dim SQLWhere As String
 
SQL = "SELECT [Nom_automate].[Nom de l'équipement] , [Nom_automate].[Marque] , [Nom_automate].[TYPE] , [Nom_automate.ETAT , Nom_automate.[Derniere modification] , table_liste_automate.site , Liste_contrat_automate.contrat , listeAgence.[Nom agence], listeAgence.[type de gestion] FROM ((listeAgence INNER JOIN Liste_contrat_automate ON listeAgence.[Id agence] = Liste_contrat_automate.agence) INNER JOIN table_liste_automate ON Liste_contrat_automate.contrat = table_liste_automate.contrat)INNER JOIN Nom_automate ON table_liste_automate.site LIKE Nom_automate.site  where Nom_automate.[Numéro d'identifiant]<>0; "
 
'SQL2 = "SELECT Count(*) AS Cnt FROM B_SOCIETES INNER JOIN _C_CONTRATS ON [B_SOCIETES].[ID_SOCIETE]=[_C_CONTRATS].[ID_SOCIETE] "
 
SQLWhere = ""
 
If Not Me.ChxAutomate Then
    SQLWhere = SQLWhere & "And [Nom de léquipement] like '*" & Me.TxtRechNom_auto & "*' "
End If
If Not Me.chxAgencee Then
    SQLWhere = SQLWhere & "And listeAgence.[Nom agence] = '" & Me.cmbagence & "' "
End If
If Not Me.chxContrat Then
    SQLWhere = SQLWhere & "And Liste_contrat_automate!contrat = '" & Me.cmbContrat & "' "
End If
 
 
 SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
 
 
'SQL = SQL & SQLWhere & ";"
 
Me.Lstresult.RowSource = SQL
Me.Lstresult.Requery
 
 
End Sub

Voici une image presentant ce qui arrive lors de l'execution :
zapan57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 01h22   #2
Membre éclairé
 
Avatar de tee_grandbois
 
Inscription : novembre 2004
Messages : 216
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 216
Points : 321
Points : 321
Bonsoir,
je n'ai pas tout vérifié, mais j'ai détecté des erreurs de syntaxe que j'ai corrigé mais pas testé.
ATTENTION j'ai découvert un bug dans l'application Message du forum , en ligne 64 un espace a disparu dans le code d'origine, je l'ai rajouté dans le code corrigé (voir pièce jointe) mais il disparait de nouveau à la prévisualisation :
Code :
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
Option Compare Database
 
 Private Sub chxAdresseIP_Click()
    Me.TxtRech_AdressIP.Visible = Not Me.TxtRech_AdressIP.Visible
    RefreshQuery
End Sub
 
Private Sub ChxAgencee_Click()
   Me.cmbagence.Visible = Not Me.cmbagence.Visible
   RefreshQuery
End Sub
Private Sub chxAutomate_Click()
   Me.TxtRechNom_auto.Visible = Not Me.TxtRechNom_auto.Visible
   RefreshQuery
End Sub
 
Private Sub chxContrat_Click()
 
    Me.cmbContrat.Visible = Not Me.cmbContrat.Visible
    RefreshQuery
End Sub
 
Private Sub chxMarqueAUto_Click()
    Me.cmbMarque.Visible = Not Me.cmbMarque.Visible
End Sub
 
Private Sub chxSite_Click()
   Me.cmbsite.Visible = Not Me.cmbsite.Visible
 
End Sub
 
Private Sub chxSupervis_Click()
    Me.cmbSupervis.Visible = Not Me.cmbSupervis.Visible
RefreshQuery
End Sub
 
Private Sub chxTelephone_Click()
    Me.TxtRech_telephone.Visible = Not Me.TxtRech_telephone.Visible
    RefreshQuery
End Sub
 
Private Sub chxType_Auto_Click()
    Me.cmbtype.Visible = Not Me.cmbtype.Visible
    RefreshQuery
 
 
End Sub
 
Private Sub cmbagence_AfterUpdate()
Dim lngIDCat   As Long
Dim SQL4        As String
 
  '' Vérifie que l'on a cliqué sur une agence pour éviter le NULL
  If Not IsNumeric(Me!cmbagence) Then Exit Sub
  '' Affecte la valeur de IDagence à la variable lngIDCat
  lngIDCat = Me!cmbagence
 
  If lngIDCat < 5 Or lngIDCat = 13 Then
 
  '' Construit la chaîne SQL avec la agence concernée
  SQL4 = "SELECT idcontract, contrat, agence FROM liste_contrat_automate WHERE agence =" & lngIDCat & " ORDER BY contrat "
  End If
  If lngIDCat > 5 Or lngIDCat = 12 Then
        SQL4 = "SELECT idcontrat, contrat, agence FROM[listecontrat Télégestion] WHERE agence =" & lngIDCat & " ORDER BY contrat "
  End If
 
  '' Affecte la chaîne SQL à la liste des métiers
  cmbContrat.RowSource = SQL4
  Me![cmbContrat].Requery
  RefreshQuery
 
End Sub
 
 
Private Sub cmbcontrat_AfterUpdate()
Dim lngIDsit   As String
Dim lngIDCat   As Long
Dim SQL3       As String
 
  '' Vérifie que l'on a cliqué sur un Contrat pour éviter le NULL
  ''If Not String(Me!cmbContrat) Then Exit Sub
  '' Affecte la valeur de IDagence à la variable lngIDCat
  lngIDsit = Me!cmbContrat.Column(1)
  lngIDCat = Me!cmbagence
 
  If lngIDCat < 5 Or lngIDCat = 13 Then
  '' Construit la chaîne SQL avec la agence concernée
 
    SQL3 = " SELECT site, contrat FROM table_liste_automate WHERE contrat LIKE '*" & Me.cmbContrat.Column(1) & "*' "
  End If
  If lngIDCat > 5 Or lngIDCat = 12 Then
   SQL3 = " SELECT site , contrat FROM [SITETELEGESTION] WHERE contrat LIKE '*" & Me.cmbContrat.Column(1) & "*' "
  End If
 
  cmbsite.RowSource = SQL3
  Me![cmbsite].Requery
  RefreshQuery
 
End Sub
 
Private Sub RefreshQuery()
Dim RS As DAO.Recordset
Dim SQL As String, SQL2 As String
Dim SQLWhere As String
 
SQL = "SELECT [Nom_automate].[Nom de l'équipement] , [Nom_automate].[Marque] , [Nom_automate].[TYPE] , Nom_automate.ETAT , Nom_automate.[Derniere modification] , table_liste_automate.site , Liste_contrat_automate.contrat , listeAgence.[Nom agence], listeAgence.[type de gestion] FROM ((listeAgence INNER JOIN Liste_contrat_automate ON listeAgence.[Id agence] = Liste_contrat_automate.agence) INNER JOIN table_liste_automate ON Liste_contrat_automate.contrat = table_liste_automate.contrat) INNER JOIN Nom_automate ON table_liste_automate.site LIKE  '*" & Nom_automate.site & "*' "
 
'SQL2 = "SELECT Count(*) AS Cnt FROM B_SOCIETES INNER JOIN _C_CONTRATS ON [B_SOCIETES].[ID_SOCIETE]=[_C_CONTRATS].[ID_SOCIETE] "
 
 SQLWhere = "Where Nom_automate.[Numéro d'identifiant]<>0"
 
If Not Me.ChxAutomate Then
    SQLWhere = SQLWhere & " And [Nom de l'équipement] like '*" & Me.TxtRechNom_auto & "*' "
End If
If Not Me.chxAgencee Then
    SQLWhere = SQLWhere & " And listeAgence.[Nom agence] = '" & Me.cmbagence & "' "
End If
If Not Me.chxContrat Then
    SQLWhere = SQLWhere & " And Liste_contrat_automate!contrat = '" & Me.cmbContrat & "' "
End If
 
 
 SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
 
 
SQL = SQL & SQLWhere & ";"
 
Me.Lstresult.RowSource = SQL
Me.Lstresult.Requery
 
 
End Sub
 
 
 
 
Private Sub Commande0_Click()
On Error GoTo Err_Commande0_Click
 
 
    DoCmd.Close
 
Exit_Commande0_Click:
    Exit Sub
 
Err_Commande0_Click:
    MsgBox Err.Description
    Resume Exit_Commande0_Click
 
End Sub
 
 
 
 
Private Sub Form_Load()
Dim ctl As Control
 
For Each ctl In Me.Controls
    Select Case Left(ctl.Name, 3)
 
 
        Case "lbl"
            ctl.Caption = "- * - * -"
        Case "Txt"
            ctl.Visible = False
            ctl.Value = ""
        Case "cmb"
            ctl.Visible = False
    End Select
Next ctl
 
Me.Lstresult.RowSource = "SELECT [Nom_automate].[Nom de l'équipement] , [Nom_automate].[Marque] , [Nom_automate].[TYPE] , Nom_automate.ETAT , Nom_automate.[Derniere modification] , table_liste_automate.site , Liste_contrat_automate.contrat , listeAgence.[Nom agence], listeAgence.[type de gestion] FROM ((listeAgence INNER JOIN Liste_contrat_automate ON listeAgence.[Id agence] = Liste_contrat_automate.agence) INNER JOIN table_liste_automate ON Liste_contrat_automate.contrat = table_liste_automate.contrat) INNER JOIN Nom_automate ON table_liste_automate.site LIKE '*" & Nom_automate.site & "'"
Me.Lstresult.Requery
 
 
 
End Sub
Images attachées
Type de fichier : png Bug.PNG (13,9 Ko, 6 affichages)
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h35.


 
 
 
 
Partenaires

Hébergement Web