Appel variable vba dans requete sql
Bonjour, bonjour,
J'ai un petit souci pour appeler une variable vba dans une requête sql (pb de syntaxe il me semble)
Le code vba se connecte à une base de données et contient une requête sql
Lorsque le WHERE contient des valeurs (dates, nom d'atelier), le code me sort bien un tableau remplit de données
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
| With ActiveSheet.ListObjects.Add(CONNECTION BDD, Destination:=Range("$A$1")). _
QueryTable
.CommandText = Array( _
"SELECT HISTO_OF_DA.NUMERO_OFDA, HISTO_OF_DA.DATE_CLOTURE, PRODUITS.CATEGORIE, HISTO_OF_DA.PRODUIT, HISTO_OF_DA.DESIGNATION, HISTO_OF_DA.QUANTITE_DEMANDEE, HISTO_OF_DA.CUMUL_TEMPS_PASSES, HISTO_OF_DA.C" _
, _
"UMUL_ENTREES, HISTO_OF_DA.DUREE_PREVUE, FAMILLES_TECHNIQUES.DESIGNATION" & Chr(13) & "" & Chr(10) & "FROM gpao.FAMILLES_TECHNIQUES FAMILLES_TECHNIQUES, gpao.HISTO_OF_DA HISTO_OF_DA, gpao" _
, _
".PRODUITS PRODUITS" & Chr(13) & "" & Chr(10) & "WHERE PRODUITS.CODE_PRODUIT = HISTO_OF_DA.PRODUIT AND PRODUITS.FAMILLE_TECHNIQUE = FAMILLES_TECHNIQUES.CODE_FAMILLE AND ((HISTO_OF_DA.NUMERO_OFDA Like " _
, _
"'F%') AND (HISTO_OF_DA.DATE_CLOTURE>={d'2017-01-01'} AND HISTO_OF_DA.DATE_CLOTURE<={d'2017-01-31'}) AND (FAMILLES_TECHNIQUES.DESIGNATION='AT. AERO'))" _
)
.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_Lancer_la_requête_à_partir_de"
.Refresh BackgroundQuery:=False
End With |
Par contre quand je déclare les variables en amont et que je les injecte dans la requête, le code me sort un tableau vide (comme s'il ne lisait pas les variables)
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
| atelier = "AT. AERO"
dateDebut = "2017-01-01"
dateFin = "2017-01-31"
MsgBox atelier
MsgBox dateDebut
MsgBox dateFin
With ActiveSheet.ListObjects.Add(CONNECTIO BDD, Destination:=Range("$A$1")). _
QueryTable
.CommandText = Array( _
"SELECT HISTO_OF_DA.NUMERO_OFDA, HISTO_OF_DA.DATE_CLOTURE, PRODUITS.CATEGORIE, HISTO_OF_DA.PRODUIT, HISTO_OF_DA.DESIGNATION, HISTO_OF_DA.QUANTITE_DEMANDEE, HISTO_OF_DA.CUMUL_TEMPS_PASSES, HISTO_OF_DA.C" _
, _
"UMUL_ENTREES, HISTO_OF_DA.DUREE_PREVUE, FAMILLES_TECHNIQUES.DESIGNATION" & Chr(13) & "" & Chr(10) & "FROM gpao.FAMILLES_TECHNIQUES FAMILLES_TECHNIQUES, gpao.HISTO_OF_DA HISTO_OF_DA, gpao" _
, _
".PRODUITS PRODUITS" & Chr(13) & "" & Chr(10) & "WHERE PRODUITS.CODE_PRODUIT = HISTO_OF_DA.PRODUIT AND PRODUITS.FAMILLE_TECHNIQUE = FAMILLES_TECHNIQUES.CODE_FAMILLE AND ((HISTO_OF_DA.NUMERO_OFDA Like " _
, _
"'F%') AND (HISTO_OF_DA.DATE_CLOTURE>={d'dateDebut'} AND HISTO_OF_DA.DATE_CLOTURE<={d'dateFin'}) AND (FAMILLES_TECHNIQUES.DESIGNATION='atelier'))" _
)
.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_Lancer_la_requête_à_partir_de"
.Refresh BackgroundQuery:=False
End With |
Dans l'attente de votre aide! ;)