Bonjour à tous.
Depuis Excel, et via un code VBA, je lance une requête SQL à une externe (Sybase - Inférence) via un ODBC.
Voila mon code de lancement de requête
Et voila ma fonction qui retourne la dite requête:
En fait, j'ai 2 requêtes dans ce style, la première récupère des données de vente (elle passe parfaitement) et renvoie les données sur ma feuille "RecupDonnees" dans la cellule A1 (jusqu'à A4)
La deuxième requête est censée me retourner les valeurs sur la même feuille, mais en cellule A6 (je n'obtiens que 2 valeurs).
Si les requêtes en elle-même sont très simple, il en va autrement sur le lancement de la requête.
Comme je l'ai dit, la première des requêtes passe, mais pas la deuxième.
L'erreur viendrait (selon ce que dit excel) de la ligne:
Je précise que je n'efface pas la première requête à ce moment là, je le fais plus tard, quand mes traitements sont bouclés.
Est-ce que peut m'aider à résoudre ce problème ?
Merci d'avance,
Thomas
Depuis Excel, et via un code VBA, je lance une requête SQL à une externe (Sybase - Inférence) via un ODBC.
Voila mon code de lancement de requête
Code:
Private Sub RecupDonneesAchat()
Dim ReqSQL As Variant
Dim VerifCommand As String
ReqSQL = TexteRequeteAchat
With Sheets("RecupDonnees").QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Inference;UID=EDI;PWD=EDI;DatabaseName=Inference;EngineName=sInference;AutoStop=NO;Integrated=No;Debug=NO;DisableMultiRowFe" _
), Array("tch=NO;CommLinks=SharedMemory,TCPIP{ServerPort=3333};Compress=NO")), _
Destination:=Sheets("RecupDonnees").Range("A6"))
.CommandText = ReqSQL
VerifCommand = CStr(.CommandText)
.Name = "Lancer la requête à partir de Inference"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
Et voila ma fonction qui retourne la dite requête:
Code:
Private Function TexteRequeteAchat()
Dim laRequete As String
laRequete = "select Sum (qte_recu), Sum(prix_net_HT)"
laRequete = laRequete & "from ligne_recep_fourn_disp"
laRequete = laRequete & "where date_recep like '" & CStr(cboChoixAnnee.Value) & "-" & CStr(Left(cboChoixMois.Value, 2)) & "'"
laRequete = laRequete & "and EAN13 IN (Select EAN13 from prod where code_rayon LIKE '" & ReqCodeRayon & "%')"
TexteRequeteAchat = laRequete
End Function
En fait, j'ai 2 requêtes dans ce style, la première récupère des données de vente (elle passe parfaitement) et renvoie les données sur ma feuille "RecupDonnees" dans la cellule A1 (jusqu'à A4)
La deuxième requête est censée me retourner les valeurs sur la même feuille, mais en cellule A6 (je n'obtiens que 2 valeurs).
Si les requêtes en elle-même sont très simple, il en va autrement sur le lancement de la requête.
Comme je l'ai dit, la première des requêtes passe, mais pas la deuxième.
L'erreur viendrait (selon ce que dit excel) de la ligne:
Code:
With Sheets("RecupDonnees") ...
[B][COLOR="Red"].Refresh BackgroundQuery:=False[/COLOR][/B]
end with
Je précise que je n'efface pas la première requête à ce moment là, je le fais plus tard, quand mes traitements sont bouclés.
Est-ce que peut m'aider à résoudre ce problème ?
Merci d'avance,
Thomas