Problème excel MS query

Romain522

XLDnaute Nouveau
Bonjour à tous,

Je fais appel à vos connaissances car voici deux jours que je suis coincé, je m'explique:
J'ai un fichier excel qui est relié à microsoft Query pour enregistrer les données du serveur SQL.
Ces données sont issues d'un automate qui gère une production dans l'entreprise. A travers le fichier Excel, je regarde le taux de production, d'une date donnée à une heure donnée. Ces dates et heures sont définies dans MS Query par le code SQL suivant:

SET NOCOUNT ON DECLARE @StartDate DateTime DECLARE @EndDate DateTime SET @EndDate = CONVERT(varchar(30), GETDATE(), 112) + ' 04:00:00.000' SET @StartDate = DateAdd(d,-2,@EndDate) SET NOCOUNT OFF SELECT TagName, DateTime, Value FROM v_AnalogHistory WHERE TagName IN ('Traca_Ensach_Rodez') AND wwVersion = 'Latest' AND wwRetrievalMode = 'Cyclic' AND wwResolution = 10000 AND DateTime >= @StartDate AND DateTime <= @EndDate UNION SELECT TagName, DateTime, Value FROM ManualAnalogHistory WHERE TagName IN ('Traca_Ensach_Rodez') AND DateTime >= @StartDate AND DateTime <= @EndDate ORDER BY DateTime ASC

Mon problème c'est que je veux pouvoir changer l'heure ( en rouge) quand je le souhaite à traves un VBA sans intervenir dans MS Query...

Voici ce que j'ai déjà fais mais je suis coincer:

Private Sub CommandButton1_Click()

Dim x
Dim y
Dim Z

Range("Y1").Select
With Selection.QueryTable
.Connection = _
"ODBC;DRIVER=SQL Server;(adresse serveur);UID=wwUser;PWD=wwUser;APP=Microsoft Office XP;WSID=(nom du poste);DATABASE=Runtime"
.CommandText = Array( _
"SET NOCOUNT ON DECLARE @StartDate DateTime DECLARE @EndDate DateTime SET @EndDate = CONVERT(varchar(30), GETDATE(), 112) + ' x:y:z.000' SET @StartDate = DateAdd(d,-2,@EndDate) SET NOCOUNT OFF " _
, _
" SELECT TagName, DateTime, Value FROM v_AnalogHistory WHERE TagName IN ('Traca_Ensach_Rodez') AND wwVersion = 'Latest' AND wwRetrievalMode = 'Cyclic' AND wwResolution = 10000 AND DateTime " _
, _
">= @StartDate AND DateTime <= @EndDate UNION SELECT TagName, DateTime, Value FROM ManualAnalogHistory WHERE TagName IN ('Traca_Ensach_Rodez') AND DateTime >= @StartDate AND DateTime <= @En" _
, "dDate ORDER BY DateTime ASC")

.Refresh BackgroundQuery:=True

End Sub

End With


If x > 23 Or y > 59 Or Z > 59 Then
MsgBox "heure non valide"
End If


Je vous remercie d'avance pour vos diverse interventions
 

pyfux

XLDnaute Occasionnel
Re : Problème excel MS query

Bonjour,

C'est un problème de T-SQL, non?

Peu importe, la modification que tu apportes modifie la borne de fin (heure, minutes, secondes) du jour en cours pour laquelle tu souhaite récupérer les enregistrement.

A priori "ta" requête récupère des données comprises entre EndDate et StartDate (borne de 2jours)

Tu souhaites modifier cet interval ?

Donc regarde plutôt sur l'initialisation de EndDate qui utilise la fonction: GETDATE() et StartDate:
SET @EndDate = CONVERT(varchar(30), GETDATE(), 112) + ' 04:00:00.000'//Ajourd'hui à 4h
SET @StartDate = DateAdd(d,-2,@EndDate) //Il y a 2 jours

Je te conseil le lecture: Ce lien n'existe plus
et autres...

Concernant le code VBA, enregistre ta chaine SQL dans une variable "String" et remplace le x, y et z par leur valeur (variables x, y, z). Voir fonction VBA replace et attention à ce qu'il n'y ait aucune fonction ou mot dans ta chaine comportant les caractères x,y,z.
(je te conseil de les nommer: xx, yy, zz)


Courage
pyfux
 
Dernière édition:

Romain522

XLDnaute Nouveau
Re : Problème excel MS query

Bonjour pyfux,

Tout d'abord merci de l'intérêt que tu portes à mon problème et dsl du retard de ma réponse.
Je pense aussi que c'est une problème de SQL, et effectivement, la requête récupère les données comprises entre EndDate et StartDate.
Je vais essayer avec ce que tu m'as conseillé...
Merci,
romain522
 

Romain522

XLDnaute Nouveau
Re : Problème excel MS query

C'est bon j'ai trouvé!!!!
Après long réflexion et l'aide de pyfux....
Alors voici pour les prochains:

Public Sub test()

Dim jj As Variant
Dim mm As Integer
Dim aaaa As Integer
Dim toto As Variant
Dim datefin As Variant
Dim totofin As Variant

jj = CStr(Worksheets("Feuil1").Range("V144").Value)
mm = CStr(Worksheets("Feuil1").Range("V145").Value)
aaaa = CStr(Worksheets("Feuil1").Range("V146").Value)

toto = "SET NOCOUNT ON DECLARE @StartDate DateTime DECLARE @EndDate DateTime SET @EndDate = "
datefin = "'" & aaaa & "-" & mm & "-" & jj & " 04:00:00.000'"
totofin = " SET @StartDate = DateAdd(d,-2,@EndDate) SET NOCOUNT OFF SELECT TagName, DateTime, Value FROM v_AnalogHistory WHERE TagName IN ('Traca_Ensach_Rodez') AND wwVersion = 'Latest' AND wwRetrievalMode = 'Cyclic' AND wwResolution = 10000 AND DateTime >= @StartDate AND DateTime <= @EndDate UNION SELECT TagName, DateTime, Value FROM ManualAnalogHistory WHERE TagName IN ('Traca_Ensach_Rodez') AND DateTime >= @StartDate AND DateTime <= @EndDate ORDER BY DateTime ASC"
Range("Y1").Select
With Selection.QueryTable
.Connection = _
"ODBC;DRIVER=SQL Server;#####;UID=####;PWD=####;APP=Microsoft Office XP;WSID=(nom du poste);DATABASE=Runtime"
.CommandText = _
(toto & datefin & totofin)

.Refresh BackgroundQuery:=True

End With
End Sub


Merci encore pour ton aide!
 

Statistiques des forums

Discussions
314 611
Messages
2 111 146
Membres
111 051
dernier inscrit
MANUREVALAND