Vba, Query et Date

Sofhy

XLDnaute Occasionnel
Bonjour à tous,

J'utilise Microsoft Query pour extraire des données depuis une base de données.

Pour les utilisateurs, j'ai créé une inputbox qui demande les dates de début et de fin :

Code:
Sub Question_Dates()
Date_D = InputBox("Entrez la date de Début" & Chr(13) & Chr(10) & Chr(13) & "Attention, la date doit impérativement être saisie selon le modèle suivant : 00/00/0000", "Définir les dates", "", 200, 200)
Date_F = InputBox("Entrez la date de Fin" & Chr(13) & Chr(10) & Chr(13) & "Attention, la date doit impérativement être saisie selon le modèle suivant : 00/00/0000", "Définir les dates", "", 200, 200)
End Sub

Il y a aussi une Inputbox qui demande la société.
Ensuite, j'ai une macro qui va envoyer la requête à Microsoft Query.

Code:
Sub Sql_Date()
With Selection.QueryTable
        .Connection = _
        "ODBC;DRIVER=SQL Server; ...(IDENTIFICATIONS DE CONNEXION de MON SERVEUR)... Trusted_Connection=Yes"
        .CommandText = Array( _
        "SELECT societe, date, Nom, Qte
WHERE
(Societe=[COLOR="Red"][B]'1'[/B][/COLOR]) AND (date>={[B][COLOR="Red"]ts '01/01/2010'[/COLOR][/B]} and <={[COLOR="Red"][B]ts '31/01/2010'[/B][/COLOR]}))" & Chr(13) & "" & Chr(10) & "ORDER BY date, Nom" _
        )
        .Refresh BackgroundQuery:=False
        End With
End Sub

J'aimerai récupérer les valeurs des inputbox (dates + société) et les intégrer automatiquement au script (les trois en rouge dans le code).

J'ai tenté des "& Date_D" mais ça ne fonctionne pas.

Est-ce quelqu'un aurait une petit idée ?

Merci par avance,
Sofhy
 
G

Guest

Guest
Re : Vba, Query et Date

Bonjour,

A tester. Peut-être faudra-t-il mettre les dates aux bon format. Cela dépends à la fois de la base de données et du serveur. Généralement un format tel qu'il apparait dans la base de données.

Et pour la clause FROM NomDeLaTable??????

Code:
Sub Sql_Date(ByVal NumSoc As Integer, ByVal Dt1 As Date, ByVal Dt2 As Date)
    Dim sql As String
    sql = "SELECT societe, date, Nom, Qte" & _
        " WHERE Societe='" & NumSoc & "' AND date BETWEEN '" & Format(Dt1, "dd-mm-yyyy") & "' AND '" & Format(Dt2, "dd-mm-yyyy") & "'" & _
        " ORDER BY date, Nom;"
    With Selection.QueryTable
        .Connection = _
        "ODBC;DRIVER=SQL Server; ...(IDENTIFICATIONS DE CONNEXION de MON SERVEUR)... Trusted_Connection=Yes"
        .CommandText = sql
        .Refresh BackgroundQuery:=False
    End With
End Sub

A+
 
Dernière modification par un modérateur:

Sofhy

XLDnaute Occasionnel
Re : Vba, Query et Date

Bonjour Hasco,

Alors j'ai testé et ça fonctionne à un petit détail près.

Les données envoyées à Microsoft Query sont les bonnes, par contre, il ne les ramène pas automatiquement dans Excel. Même en cliquant sur les icônes d'actualisation des données.
Je suis obligée de cliquer sur l'icône "Modifier la requête" (où je constate que ta requête fonctionne, les dates reportées sont les bonnes) puis de renvoyer les données manuellement dans Excel (???).

Voici la requête avec la structure que tu m'as donnée :

Code:
Sub Sql_Date()
    Dim sql As String
    sql = "SELECT Societe, date, Nom, Qte
FROM MaTable
WHERE Date>= " & Format(Date_D, "dd-mm-yyyy") & " And Date<= " & Format(Date_F, "dd-mm-yyyy") & " ))"
    With Selection.QueryTable
.Connection = _
       MES INFOS DE CONNEXION;Trusted_Connection=Yes"
        .CommandText = sql
        .Refresh BackgroundQuery:=False
    End With
End Sub

Je suis perplexe :confused:
Sofhy
 
G

Guest

Guest
Re : Vba, Query et Date

Bonjour le forum, Sofhy,

Sans doute à cause du False de
Code:
 .Refresh BackgroundQuery:=False

Le remplacer par TRUE

Code:
.Refresh BackgroundQuery:=True

Sinon, je ne vois pas

A+
 
G

Guest

Guest
Re : Vba, Query et Date

Bonjour,

La Variable Sql soit tu l'écrits sur une seule ligne:

Code:
sql = "SELECT Societe, date, Nom, Qte FROM MaTable WHERE Date>= " & Format(Date_D, "dd-mm-yyyy") & " And Date<= " & Format(Date_F, "dd-mm-yyyy") & " ))"

Soit sur plusieur comme suit:

Code:
sql = "SELECT Societe, date, Nom, Qte FROM MaTable" & _ 
        " WHERE Date>= " & Format(Date_D, "dd-mm-yyyy") & _ 
        " And  Date<= " & Format(Date_F, "dd-mm-yyyy") & " ))"

Avec les bons retours à la ligne, les & et espaces biens placés.

Vérifie également le type des champs Date dans la base de données.
Si ce sont des date au format TimeStamp tu devra faire appel à une syntaxe comme ci-dessous:

Code:
WHERE Date >={ts '" & format(Date_D,"yyyy-mm-dd hh:mm:ss") & _
 " '} AND Date>={ts '" & format(Date_D,"yyyy-mm-dd hh:mm:ss") & "'}"

A+
 
G

Guest

Guest
Re : Vba, Query et Date

Re,

Autre proposition.

Tu crées une requête paramétrer dans microsoft Query avec 2 champs paramétrés >=[DATE DEBUT] et <=[DATE FIN] comme dans l'image ci-dessous:

Ensuite tu l'enregistre sur ton ordi à l'emplacement que tu voudras.

Dans ta feuille Excel: Données/Données Externes/Importer des données et tu choisis ta requête paramétrée, elle se lance en te demandant de rentrer DATE DEBUT puis DATE FIN.

Tu peux dans une macro lancer le rafraîchissement par
Code:
Dim prmDebut As Parameter, prmFin As Parameter
    With Sheets([COLOR=red]NomDeLaFeuilleDeLaQUERYTABLE[/COLOR]).QueryTables(1)
        Set prmDebut = .Parameters(1)
        Set prmFin = .Parameters(2)
        prmDebut.SetParam xlRange, [COLOR=blue]Date_D[/COLOR]
        prmFin.SetParam xlRange, [COLOR=blue]Date_F[/COLOR]     
   .Refresh False
    End With

Et tu appelles ta macro avec une date de début et une date de fin.

A+
 
Dernière modification par un modérateur:
G

Guest

Guest
Re : Vba, Query et Date

Bonjour Sofhy,

Une petite erreur que j'ai laissée traîner après mes essais.
remplacer:

Code:
prmDebut.SetParam xlRange, Date_D
prmFin.SetParam xlRange, Date_F

Par:
Code:
prmDebut.SetParam [B][COLOR=red]xlConstant[/COLOR][/B], Date_D
prmFin.SetParam [B][COLOR=red]xlConstant[/COLOR][/B], Date_F

A+
 

Sofhy

XLDnaute Occasionnel
Re : Vba, Query et Date

Bonjour Hasco,

Après plusieurs tests, ta solution ...
Code:
WHERE Date >={ts '" & format(Date_D,"yyyy-mm-dd hh:mm:ss") & _
 " '} AND Date>={ts '" & format(Date_F,"yyyy-mm-dd hh:mm:ss") & "'}"

... est la bonne.

Génial !!! :D

Les autres devaient certainement fonctionner aussi, mais je me suis un peu banané sur le code avec Set prmDebut = .Parameters(1) et Set prmFin = .Parameters(2).


Merci encore.
Bonne journée,
Sofhy
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 113
Messages
2 085 426
Membres
102 888
dernier inscrit
medoit