Bonjour,

Je souhaite executer depuis une macro EXCEL une reqûete SQL sur une base de données ACCESS. La requête SQL fonctionne, je l'ai testé mais j'éprouve des difficultés à mettre en place la macro dans EXCEL.
Mon but est de pouvoir ensuite travailler sur une feuille EXCEL les données séléctionnées par la requête SQL.

Au lancement du code, j'obtiens une erreur sur rst.Open Kaquery, cnx : "Aucune valeur donnée pour l'un des paramètres".

Si vous avez des suggestions sur le reste du code, merci d'avance.


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
Sub macro1()
 
'Déclaration des variables
Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset
Dim query As String
 
'Instanciation des variables
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset
 
'Définition du pilote de connexion
cnx.Provider = "Microsoft.Jet.Oledb.4.0"
'Définition de la chaîne de connexion
cnx.ConnectionString = "D:\Documents\DOC\mabase.MDB"
'Ouverture de la base de données
cnx.Open
 
'Ecriture de la requête
query = "SELECT DISTINCT com_el.sat_name, com_el.long_nom, freq.ntc_id, com_el.adm, com_el.prov, com_el.act_code, pub_ssn.ssn_ref " & _
"FROM (freq INNER JOIN com_el ON freq.ntc_id = com_el.ntc_id) INNER JOIN pub_ssn ON com_el.ntc_id = pub_ssn.ntc_id " & _
"WHERE (((com_el.adm) <> " & "F" & ")) " & _
"GROUP BY com_el.sat_name, com_el.long_nom, freq.ntc_id, com_el.adm, com_el.prov, com_el.act_code, pub_ssn.ssn_ref, freq.freq_mhz, pub_ssn.seq_no " & _
"HAVING (((com_el.prov)=" & "9.6" & ") AND ((com_el.act_code)=" & "A" & " Or (com_el.act_code)=" & "M" & ") AND ((pub_ssn.ssn_ref)=" & "CR/C" & ") AND ((pub_ssn.seq_no)=1) AND (([freq]![freq_mhz]) Between 17300 And 20200 Or ([freq]![freq_mhz]) Between 18100 And 18400 Or ([freq]![freq_mhz]) Between 24750 And 25250 Or ([freq]![freq_mhz]) Between 27000 And 31000)) " & _
"ORDER BY com_el.long_nom;"
 
'Exécution de la requête
rst.Open Kaquery, cnx
 
rst.MoveLast
rst.MoveFirst
 
While Not (rst.EOF)
    rst.MoveNext
Wend
 
rst.Close
cnx.Close
 
 
End Sub