Microsoft 365 Comment adapter des variables date SQL dans VBA

grhum29

XLDnaute Junior
Bonjour,

J'ai besoin d'aide de la part de la communauté car je suis confronté à un problème.

J'ai réalisé une requête SQL qui fonctionne très bien dans SQL Server Management Studio.

Cette requête contient des variables de type date qui sont déclarées avant la requête et je fais des manipulations sur ces variables pour les adapter au format que je souhaite.

Ci-dessous les variables :

SQL:
declare @dateHeureDebut datetime;
declare @dateHeureFin datetime;
declare @dateHeureDebutlocal datetime;
declare @dateHeureFinlocal datetime;
---------------------
set @dateHeureDebut = '20230123 00:00:00';
set @dateHeureFin = '20230129 23:59:59';
set @dateHeureDebutlocal = DATEADD(DAY,-1,@dateHeureDebut);
set @dateHeureFinlocal = DATEADD(DAY,1,@dateHeureFin);
set @dateHeureDebutlocal = DATEADD(MINUTE,-1*DATEPART(tz, @dateHeureDebutlocal AT TIME ZONE 'Central European Standard Time'),@dateHeureDebutlocal);
set @dateHeureFinlocal = DATEADD(MINUTE,-1*DATEPART(tz, @dateHeureFinLocal AT TIME ZONE 'Central European Standard Time'),@dateHeureFinLocal);

Jusque là tout va bien mais cette requête a pour but d'être exécuté depuis du code VBA et c'est là que le problème intervient car je ne sais pas comment adapter les variables @dateHeureDebutlocal et @dateHeureFinlocal (2 dernières lignes surtout) au language VBA - Excel.

Pouvez-vous me dire comment je peux faire?

Le plus simple serait peut-être de créer une fonction ou une procédure stockée (coté base de donnée) mais je n'ai, ni les compétences, ni les droits pour le faire...

J'espère avoir été assez clair dans ma demande.

Merci de votre aide.

Cordialement,
 

dysorthographie

XLDnaute Accro
Bonjour,
je ne suis pas sur d'avoir bien compris!
VB:
Dim DBconnection As New ADODB.Connection, Rs As Recordset
DBconnection.Open ConnectionStr
With New ADODB.Command
    .ActiveConnection = DBconnection
    .CommandType = adCmdText
    .CommandText = "Select * from MyTable Where [Date]=>@DateDeb and [Date]<=@DateFin "
    .Parameters.Append .CreateParameter("@DateDeb", adDate, adParamOutput, 8, Date)
    .Parameters.Append .CreateParameter("@DateFin", adDate, adParamOutput, 8, Date)
    Set Rs = .Execute
End With
 

grhum29

XLDnaute Junior
Bonjour @dysorthographie,

Tout d'abord, merci pour ta réponse.

Je ne suis pas sur qu'elle corresponde à ce que j'ai besoin.

A quoi servent les 2 lignes ci-dessous dans ton code :

VB:
    .Parameters.Append .CreateParameter("@DateDeb", adDate, adParamOutput, 8, Date)
    .Parameters.Append .CreateParameter("@DateFin", adDate, adParamOutput, 8, Date)

Je vais essayer d'expliquer autrement.

Dans certaines macros avec des requêtes SQL que j'utilise, je déclare et je convertis mes variables de la façon suivante :

VB:
    Dim DateD As Date
    Dim DateF As Date
    Dim sDateD As String
    Dim sDateF As String
    
    ---
    
    DateD = [L3]
    DateF = [L4]
    sDateD = Format(DateD, "yyyymmdd hh:mm:ss")
    sDateF = Format(DateF, "yyyymmdd hh:mm:ss")


Dans le cas que j'évoque dans ce post, je dois faire des modifications un peu plus complexes sur mes variables qu'elles répondent à mes besoins. Dans SQL Server, je n'ai pas de problème (cf. code dans mon premier poste) mais je ne sais pas comment traiter cela dans le code VBA.

J'espère avoir été plus clair dans mes explications.

Merci de votre aide.
 

dysorthographie

XLDnaute Accro
voila le même genre de requête dans SQL Manageur!
SQL:
Declare @DateDeb Datetime;
Declare @DateFin Dattime;
set  @DateDeb='2023-01-01 00:00:00';
set  @DateDeb='2023-12-31 00:00:00';
Select * from MyTable Where [Date]=>@DateDeb and [Date]<=@DateFin

.
Select * from MyTable Where [Date]=>@DateDeb and [Date]<=@DateFin

.Parameters.Append .CreateParameter("@DateDeb", adDate, adParamOutput, 8, #01/01/2023#)
.Parameters.Append .CreateParameter("@DateFin", adDate, adParamOutput, 8, #31/12/2023#)
la création des paramètres permet de SETer les variable de la requête.