Bonjour,
Je dispose d'une base de donnée SQL hébergée sur un serveur, je souhaiterais via Excel récupérer des données dans une feuille de calcul. Après moult lectures sur le sujet (je suis autodidacte en perpétuelle autoformation) j'ai réussi via Microsoft query a connecter la base et même à enregistrer une requête pour mon extraction (j'ai donc un sql tout prêt).
Maintenant je souhaite automatiser tout cela via une macro, j'ai donc fait appel à l'enregistreur pour voir comment il procédait. Lors de la manip j'ai bien mes résultats dans la feuille. Mais lorsque je relance la macro il bug !!!
Je suis donc parti sur une base de macro pour rédiger celle-ci :
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 Sub Connexion_Oenodoc() Dim Client As String, DateDebut As String, DateFin As String Client = ActiveSheet.Range("B1").Value DateDebut = ActiveSheet.Range("B2").Value DateFin = ActiveSheet.Range("B3").Value With ActiveSheet.ListObjects.Add(SourceType:=0, Source:="ODBC;DSN=Oenodoc;" _ , Destination:=Range("$A$5")).QueryTable .CommandText = Array( _ "SELECT client_0.CODE_CLIENT, resultat_0.DATE_ANALYSE, echantillon_complet_0.DESIGNATION_ORIGINE, echantillon_complet_0.ORIGINE_LIBRE, dosage_0.DESIGNATION_DOSAGE, resultat_0.RESULTAT_ANALYSE_CORRIGE, " _ , _ "unite_mesure_0.DESIGNATION_UNITE" & "FROM oenodoc.client client_0, oenodoc.dosage dosage_0, oenodoc.echantillon echantillon_0, oenodoc.echantillon_complet echantillon_complet_0, oenodoc.methode_analyse m" _ , _ "ethode_analyse_0, oenodoc.resultat resultat_0, oenodoc.unite_mesure unite_mesure_0" & "WHERE methode_analyse_0.NUM_ANALYSE = resultat_0.NUM_ANALYSE AND methode_analyse_0.NUM_DOSAGE = dosage_0.NUM_DOSAGE " _ , _ "AND echantillon_0.CODE_RECEPTION = echantillon_complet_0.CODE_RECEPTION AND echantillon_0.CODE_RECEPTION = resultat_0.CODE_RECEPTION AND client_0.NUM_CLIENT = echantillon_0.NUM_CLIENT AND client_0.NUM" _ , _ "_CLIENT = echantillon_complet_0.NUM_CLIENT AND unite_mesure_0.NUM_UNITE = methode_analyse_0.NUM_UNITE AND client_0.CODE_CLIENT = '" & Client & "' AND resultat_0.DATE_ANALYSE > '" & DateDebut & "' And resultat_0.DATE_ANALYSE < '" & DateFin & "' ") .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .ListObject.DisplayName = "Tableau_Suivi_oenodoc" .Refresh BackgroundQuery:=False End With End Sub
Le bug se situe lors de l'exécution de la ligne oRS.Open sSQLString, cNx il semblerait que la synthaxe de ma requête soit défaillante.
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 Sub EnCours_Extract() 'Déclaration variables requête Dim Client As String, DateDebut As String, DateFin As String Client = ActiveSheet.Range("B1").Value DateDebut = ActiveSheet.Range("B2").Value DateFin = ActiveSheet.Range("B3").Value 'Déclaration de la variable de connexion Dim cNx As New ADODB.Connection, oRS As New ADODB.Recordset Dim NomDuDSN As String, NomUtilisateur As String, MotDePasse As String Dim sSQL As String Dim ReturnArray NomDuDSN = "########" NomUtilisateur = "########" MotDePasse = "########" 'Définition de la connexion cNx.ConnectionString = "DSN=" & NomDuDSN & ";UID=" & NomUtilisateur & ";PWD=" & MotDePasse & ";" cNx.Open 'Requête SQL sSQLSting = "SELECT client_0.CODE_CLIENT, resultat_0.DATE_ANALYSE, echantillon_complet_0.DESIGNATION_ORIGINE, echantillon_complet_0.ORIGINE_LIBRE, dosage_0.DESIGNATION_DOSAGE, resultat_0.RESULTAT_ANALYSE_CORRIGE, " & _ "unite_mesure_0.DESIGNATION_UNITE" & "FROM oenodoc.client client_0, oenodoc.dosage dosage_0, oenodoc.echantillon echantillon_0, oenodoc.echantillon_complet echantillon_complet_0, " & _ "oenodoc.methode_analyse methode_analyse_0, oenodoc.resultat resultat_0, oenodoc.unite_mesure unite_mesure_0" & "WHERE methode_analyse_0.NUM_ANALYSE = resultat_0.NUM_ANALYSE AND methode_analyse_0.NUM_DOSAGE = dosage_0.NUM_DOSAGE " & _ "AND echantillon_0.CODE_RECEPTION = echantillon_complet_0.CODE_RECEPTION AND echantillon_0.CODE_RECEPTION = resultat_0.CODE_RECEPTION AND client_0.NUM_CLIENT = echantillon_0.NUM_CLIENT AND client_0.NUM " & _ "_CLIENT = echantillon_complet_0.NUM_CLIENT AND unite_mesure_0.NUM_UNITE = methode_analyse_0.NUM_UNITE AND ((client_0.CODE_CLIENT='& Client &') AND (resultat_0.DATE_ANALYSE>'& DateDebut &' And resultat_0.DATE_ANALYSE<'& DateFin &'))" oRS.Open sSQLSting, cNx Sheet2.Range("A1").CopyFromRecordset oRS oRS.Close cNx.Close Set oRS = Nothing Set cNx = Nothing End Sub
Message d'erreur affiché : Erreur d'exécution '-2147217900 (80040e14)': You have an error in your syntax;check the manual that corresponds to your MySQL server version for the right syntax to use near '_cCLIENT = echantillon_complet_0.NUM_CLIENT AND unite_mesure_0.NUM_UNITE = method' at line 3
Je patine un peu dans la semoule depuis hier, auriez-vous un avis éclairé pour me faire avancer. Merci d'avance.
Partager