Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

XL 2003- msquery - syntaxe pour ajouter un parametre dans un code SQL

5 réponses
Avatar
max-75
Bonjour,

voici mon probleme:
ajouter des parametres de dates (debut et fin) qui se trouvent en A1
et A2 de l'onglet settings =E0 la query enregistree sous forme de macro
pour le moment (fichier .bas)- mes connaissances en la matiere sont
tres limitees.
Il s'agit d'une base oracle, la connection est ok:

......(( T001.EventDate BETWEEN TO_DATE('2008-01-01','YYYY-MM-DD') AND
TO_DATE('2008-12-31','YYYY-MM-DD') AND UPPER(T002.EventCode) =3D
'OPEN' )) " _
).....

Je ne peux pas recreer graphiquement ces query donc pas moyen
d'utiliser les [parametres]
En furetant, j'ai essay=E9 les '?' sans plus de succes.
j'ai trouv=E9 cel=E0:
http://groups.google.fr/group/microsoft.public.fr.excel/browse_thread/threa=
d/c6c046bc74fe320/0b5568d2d6ed0c36?hl=3Den&lnk=3Dgst&q=3Dmsquery+parametre#=
0b5568d2d6ed0c36

mais je dois avoir un souci de syntaxe car je m'y perds dans les ' " &
ou autres ] #....

Votre aide serait la bienvenue car j'ai une bonne 20taines de requetes
sur le grill et je sens que cel=E0 peut me faire gagner des jours de
travail.

Merci d'avance,

Max

5 réponses

Avatar
michdenis
Voici un petit exemple de code à partir duquel t'inspirer

'---------------------------
Sub Requête_MsQuery_Date()

Dim Requete As String, requete1 As String
Dim Début As String, Fin As String

Début = Format(DateSerial(2003, 4, 10), "yyyy-mm-dd 00:00:00")
Fin = Format(DateSerial(2003, 4, 20), "yyyy-mm-dd 00:00:00")

Requete = "SELECT `Feuil1$`.Société, `Feuil1$`.Date" & vbCrLf & _
"FROM `" & ThisWorkbook.FullName & "`.`Feuil1$`" & _
"`Feuil1$` WHERE (`Feuil1$`.date>{ts '" & Début & "'}) and
(`Feuil1$`.date<{ts '" & Fin & "'})"

With Worksheets("Feuil1").QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Excel Files;DBQ=" & ThisWorkbook.FullName & ";" & _
"DefaultDir=" & ThisWorkbook.Path & "" _
), Array("cel;DriverIdy0;MaxBufferSize 48;" & _
"PageTimeout=5;")), Destination:=Worksheets("Feuil1").Range("D1"))

.CommandText = Array(Requete)
.Name = "Lancer la requête à partir de Excel Files"
.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:úlse
End With
End Sub
'--------------------------------------

Et pour en faire une requête paramêtrée -> un bout d'explication :

Voici comment il est possible de créer et d'exécuter
une requête paramétrée dans MsQuery. Ce qui suit
est un exemple élaboré à partir d'un critère sur les dates:

C'est une réponse que j'ai déjà publiée sur ce forum.

Pour définir une requête paramétrée directement dans
la fenêtre de MsQuery tu utilises les crochets droits dans
la zone de saisie du critère à l'intérieur desquels tu insères
un petit texte significatif pour l'usager afin de lui signifier le
critère à définir. Les symboles ">" et "<" servent à
à déterminer l'intervalle entre les dates choisies.

Exemple :

Dans la fenêtre "Critères" de Query

NomDuChamp -->: Date
critère --> : >[Date de début] Et <[Date de fin]

Tu retournes le résultat de la requête dans une feuille
de ton classeur.

Avec un clic droit sur la plage de résultat, dans le menu
contextuel déroulant choisis la commande : "Paramètre"

Dans la fenêtre qui s'ouvre : Tu sélectionnes dans la partie
gauche de la fenêtre : " Date de début" et tu sélectionnes le
bouton radio :"Obtenir la valeur de la cellule suivante" :
Tu indiques la cellule devant servir pour ce critère. Et pour
finir, Tu coches le bouton radio si tu veux qu'excel actualise
les données dès que tu modifieras le contenu de cette cellule
(date de début) . Maintenant il te reste à faire la même chose
concernant "Date de fin" . Voilà.


Si tu voulais obtenir le même résultat mais à partir d'une macro
qui servirait à actualiser ton "querytable", tu pourrais t'inspirer de
ceci. À copier dans le module feuille où l'action se déroule :

'----------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

'il est pris pour acquis que G1, G2 contiennent des dates
'ET
'G1 est plus petit que G2 ... tu peux ajouter une gestion
'd'erreur le cas échéant....! ( pas défini ici ! )

If Target.Address = [G1].Address Or _
Target.Address = [G2].Address Then
'En supposant que ton QueryTable se situe
'sur la feuille "Feuil1"
'Plage de critère de tes dates :
'Date de début : "Feuil1!G1"
'Date de Fin : "Feuil1!G2"

Dim P1 As Parameter
Dim P2 As Parameter

'utilise l'index ou le nom de la requête
With Worksheets("Feuil1").QueryTables(1)
Set P1 = .Parameters(1)
Set P2 = .Parameters(2)
P1.SetParam xlRange, Range("Feuil1!G1")
P2.SetParam xlRange, Range("Feuil1!G2")
.Refresh False
End With
End If

End Sub
'----------------------------------





"max-75" a écrit dans le message de news:

Bonjour,

voici mon probleme:
ajouter des parametres de dates (debut et fin) qui se trouvent en A1
et A2 de l'onglet settings à la query enregistree sous forme de macro
pour le moment (fichier .bas)- mes connaissances en la matiere sont
tres limitees.
Il s'agit d'une base oracle, la connection est ok:

......(( T001.EventDate BETWEEN TO_DATE('2008-01-01','YYYY-MM-DD') AND
TO_DATE('2008-12-31','YYYY-MM-DD') AND UPPER(T002.EventCode) 'OPEN' )) " _
).....

Je ne peux pas recreer graphiquement ces query donc pas moyen
d'utiliser les [parametres]
En furetant, j'ai essayé les '?' sans plus de succes.
j'ai trouvé celà:
http://groups.google.fr/group/microsoft.public.fr.excel/browse_thread/thread/c6c046bc74fe320/0b5568d2d6ed0c36?hl=en&lnk=gst&q=msquery+parametre#0b5568d2d6ed0c36

mais je dois avoir un souci de syntaxe car je m'y perds dans les ' " &
ou autres ] #....

Votre aide serait la bienvenue car j'ai une bonne 20taines de requetes
sur le grill et je sens que celà peut me faire gagner des jours de
travail.

Merci d'avance,

Max
Avatar
max-75
On Jan 8, 6:50 pm, "michdenis" wrote:
Voici un petit  exemple de code à partir duquel t'inspirer

'---------------------------
Sub Requête_MsQuery_Date()

Dim Requete As String, requete1 As String
Dim Début As String, Fin As String

Début = Format(DateSerial(2003, 4, 10), "yyyy-mm-dd 00:00:00")
Fin = Format(DateSerial(2003, 4, 20), "yyyy-mm-dd 00:00:00")

Requete = "SELECT `Feuil1$`.Société, `Feuil1$`.Date" & vbCrLf & _
  "FROM `" & ThisWorkbook.FullName & "`.`Feuil1$`" & _
 "`Feuil1$` WHERE (`Feuil1$`.date>{ts  '" & Début & "'}) and
(`Feuil1$`.date<{ts  '" & Fin & "'})"

With Worksheets("Feuil1").QueryTables.Add(Connection:=Array(Array( _
    "ODBC;DSN=Excel Files;DBQ=" & ThisWorkbook.FullName & ";" & _
    "DefaultDir=" & ThisWorkbook.Path & "" _
        ), Array("cel;DriverIdy0;MaxBufferSize 48;" & _
        "PageTimeout=5;")), Destination:=Worksheets("Feuil1") .Range("D1"))

        .CommandText = Array(Requete)
        .Name = "Lancer la requête à partir de Excel Files"
        .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:úlse
    End With
End Sub
'--------------------------------------

Et pour en faire une requête paramêtrée -> un bout d'explication :

Voici comment il est possible de créer et d'exécuter
une requête paramétrée dans MsQuery. Ce qui suit
est un exemple élaboré à partir d'un critère sur les dates:

C'est une réponse que j'ai déjà publiée sur ce forum.

Pour définir une requête paramétrée directement  dans
la fenêtre de MsQuery tu utilises les crochets droits dans
la zone de saisie du critère à l'intérieur desquels tu insères
un petit texte significatif pour l'usager afin de lui signifier le
critère à définir. Les symboles ">" et "<"  servent à
à déterminer l'intervalle entre les dates choisies.

Exemple :

Dans la fenêtre "Critères"  de Query

NomDuChamp -->:                          Date
critère  -->            :  >[Date de début] Et <[Date de fin]

Tu retournes le résultat de la requête dans une feuille
de ton classeur.

Avec un clic droit sur la plage de résultat, dans le menu
contextuel déroulant  choisis la commande : "Paramètre"

Dans la fenêtre qui s'ouvre : Tu sélectionnes dans la partie
gauche de la fenêtre : " Date de début" et tu sélectionnes le
bouton radio :"Obtenir la valeur de la cellule suivante" :
Tu indiques la cellule devant servir pour ce critère.  Et pour
finir, Tu coches le bouton radio si tu veux qu'excel actualise
les données dès que tu modifieras le contenu de cette cellule
(date de début) .  Maintenant il te reste à faire la même chose
 concernant  "Date de fin" .  Voilà.

Si tu voulais obtenir le même résultat mais à partir d'une macro
qui servirait à actualiser ton "querytable", tu pourrais t'inspirer de
ceci.  À copier dans le module feuille  où l'action se déroule :

'----------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

'il est pris pour acquis que G1, G2 contiennent des dates
'ET
'G1 est plus petit que G2 ... tu peux ajouter une gestion
'd'erreur le cas échéant....! ( pas défini ici ! )

If Target.Address = [G1].Address Or _
    Target.Address = [G2].Address Then
    'En supposant que ton QueryTable se situe
    'sur la feuille "Feuil1"
    'Plage de critère de tes dates :
    'Date de début : "Feuil1!G1"
    'Date de Fin   : "Feuil1!G2"

    Dim P1 As Parameter
    Dim P2 As Parameter

   'utilise l'index ou le nom de la requête
    With Worksheets("Feuil1").QueryTables(1)
        Set P1 = .Parameters(1)
        Set P2 = .Parameters(2)
        P1.SetParam xlRange, Range("Feuil1!G1")
        P2.SetParam xlRange, Range("Feuil1!G2")
        .Refresh False
    End With
End If

End Sub
'----------------------------------

"max-75" a écrit dans le message de news:

Bonjour,

voici mon probleme:
ajouter des parametres de dates (debut et fin) qui se trouvent en A1
et A2 de l'onglet settings à la query enregistree sous forme de macro
pour le moment (fichier .bas)- mes connaissances en la matiere sont
tres limitees.
Il s'agit d'une base oracle, la connection est ok:

......(( T001.EventDate BETWEEN TO_DATE('2008-01-01','YYYY-MM-DD') AND
TO_DATE('2008-12-31','YYYY-MM-DD') AND UPPER(T002.EventCode) =
'OPEN' )) " _
        ).....

Je ne peux pas recreer graphiquement ces query donc pas moyen
d'utiliser les [parametres]
En furetant, j'ai essayé les '?' sans plus de succes.
j'ai trouvé celà:http://groups.google.fr/group/microsoft.public.fr.ex cel/browse_thread...

mais je dois avoir un souci de syntaxe car je m'y perds dans les ' " &
ou autres ] #....

Votre aide serait la bienvenue car j'ai une bonne 20taines de requetes
sur le grill et je sens que celà peut me faire gagner des jours de
travail.

Merci d'avance,

Max



merci Michdenis,

c'est exactement le post que j'avais trouvé (cf le lien de mon premier
post)
c'est juste que je n'arrive pas à l'adapter (probablement une question
de guillemets, quotes etc...)
mes connaissances VB sont tres limites...je comprends tres bien le
raisonnement mais mon souci ici est de definir debut et fin selon
settings/A1 et A2 par ex et de les passer au bon format pour etre
correctement interprete...un peu comme qq1 qui comprends vaguement une
lanque sans la parler...
est-ce trop demande si tu pouvais me mettre la bonne syntax dans mon
ex???

en tout cas, merci bcq

Max
Avatar
michdenis
début de ta macro pour définir tes dates dans ta clause "Where" de ta
requête


Sub Macro1()

Dim Requete As String, requete1 As String
Dim Début As String, Fin As String

Dim DD As Date, DF As Date

'Tu dois adapter le nom de la feuille et l'adresse où se retrouve
'ta date de début (dd) et ta date de fin (DF)
DD = Worksheets("Feuil1").Range("A2")
DF = Worksheets("Feuil1").Range("B2")

'Ceci c'est un format particulier que MsQuery comprend
'même si cela semble bizarre...!!! Les 2 variabless "Début"
et "Fin" ont été déclarées As String

Début = Format(DateSerial(Year(DD), Month(DD), Day(DD)), "yyyy-mm-dd
00:00:00")
Fin = Format(DateSerial(Year(DF), Month(DF), Day(DF)), "yyyy-mm-dd
00:00:00")

'Maintenant le texte de ta requête à titre d'exemple :

Requete = "SELECT `Feuil1$`.Société, `Feuil1$`.Date" & vbCrLf & _
"FROM `" & ThisWorkbook.FullName & "`.`Feuil1$`" & _
"`Feuil1$` WHERE (`Feuil1$`.date>{ts '" & Début & "'}) and _
(`Feuil1$`.date<{ts '" & Fin & "'})"

Feuil1 -> nom onglet de la feuille où sont les données
Société et Date -> sont les 2 étiquettes de colonnes à partir
desquelles la requête est basée

Le signe $ suivant le nom de l'onglet de la feuille est obligatoire peu
importe le nom de l'onglet de la feuille.

{ts '" & Début & "'} -> tu copies intégralement ... cela est un des
critères
date de début de ta clause Where de la
requête.

Il y a d'autres syntaxes possibles mais ces dernères ont été testés.
Par exemple :

En dernier lieu, je mentionne que ceci est aussi acceptable
comme condition Where pour une date :
"WHERE (`Feuil1$`.LesDates>#01/09/2005#)"
lire 9 janvier 2005 et non 1 septembre 2005
Dans l'exemple précédent, l'utilisation des dièses requiert que
tu passes la date au format américain qui est : mois/jour/année

Il y a aussi ceci :
"WHERE (`Feuil1$`.LesDates>#" & Format(LaDate,"MM/DD/YYYY") & "#)"
Tu transformes la date que tu as au format américain.

IMPORTANT : Si tu utilises l'enregistreur de macro pendant que tu fais
manuellement les manipulations, Excel va te donner la presque totalité
du code... il va te rester à adapter le critère des dates.

Bon travail !



"max-75" a écrit dans le message de news:

On Jan 8, 6:50 pm, "michdenis" wrote:
Voici un petit exemple de code à partir duquel t'inspirer

'---------------------------
Sub Requête_MsQuery_Date()

Dim Requete As String, requete1 As String
Dim Début As String, Fin As String

Début = Format(DateSerial(2003, 4, 10), "yyyy-mm-dd 00:00:00")
Fin = Format(DateSerial(2003, 4, 20), "yyyy-mm-dd 00:00:00")

Requete = "SELECT `Feuil1$`.Société, `Feuil1$`.Date" & vbCrLf & _
"FROM `" & ThisWorkbook.FullName & "`.`Feuil1$`" & _
"`Feuil1$` WHERE (`Feuil1$`.date>{ts '" & Début & "'}) and
(`Feuil1$`.date<{ts '" & Fin & "'})"

With Worksheets("Feuil1").QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Excel Files;DBQ=" & ThisWorkbook.FullName & ";" & _
"DefaultDir=" & ThisWorkbook.Path & "" _
), Array("cel;DriverIdy0;MaxBufferSize 48;" & _
"PageTimeout=5;")), Destination:=Worksheets("Feuil1").Range("D1"))

.CommandText = Array(Requete)
.Name = "Lancer la requête à partir de Excel Files"
.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:úlse
End With
End Sub
'--------------------------------------

Et pour en faire une requête paramêtrée -> un bout d'explication :

Voici comment il est possible de créer et d'exécuter
une requête paramétrée dans MsQuery. Ce qui suit
est un exemple élaboré à partir d'un critère sur les dates:

C'est une réponse que j'ai déjà publiée sur ce forum.

Pour définir une requête paramétrée directement dans
la fenêtre de MsQuery tu utilises les crochets droits dans
la zone de saisie du critère à l'intérieur desquels tu insères
un petit texte significatif pour l'usager afin de lui signifier le
critère à définir. Les symboles ">" et "<" servent à
à déterminer l'intervalle entre les dates choisies.

Exemple :

Dans la fenêtre "Critères" de Query

NomDuChamp -->: Date
critère --> : >[Date de début] Et <[Date de fin]

Tu retournes le résultat de la requête dans une feuille
de ton classeur.

Avec un clic droit sur la plage de résultat, dans le menu
contextuel déroulant choisis la commande : "Paramètre"

Dans la fenêtre qui s'ouvre : Tu sélectionnes dans la partie
gauche de la fenêtre : " Date de début" et tu sélectionnes le
bouton radio :"Obtenir la valeur de la cellule suivante" :
Tu indiques la cellule devant servir pour ce critère. Et pour
finir, Tu coches le bouton radio si tu veux qu'excel actualise
les données dès que tu modifieras le contenu de cette cellule
(date de début) . Maintenant il te reste à faire la même chose
concernant "Date de fin" . Voilà.

Si tu voulais obtenir le même résultat mais à partir d'une macro
qui servirait à actualiser ton "querytable", tu pourrais t'inspirer de
ceci. À copier dans le module feuille où l'action se déroule :

'----------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

'il est pris pour acquis que G1, G2 contiennent des dates
'ET
'G1 est plus petit que G2 ... tu peux ajouter une gestion
'd'erreur le cas échéant....! ( pas défini ici ! )

If Target.Address = [G1].Address Or _
Target.Address = [G2].Address Then
'En supposant que ton QueryTable se situe
'sur la feuille "Feuil1"
'Plage de critère de tes dates :
'Date de début : "Feuil1!G1"
'Date de Fin : "Feuil1!G2"

Dim P1 As Parameter
Dim P2 As Parameter

'utilise l'index ou le nom de la requête
With Worksheets("Feuil1").QueryTables(1)
Set P1 = .Parameters(1)
Set P2 = .Parameters(2)
P1.SetParam xlRange, Range("Feuil1!G1")
P2.SetParam xlRange, Range("Feuil1!G2")
.Refresh False
End With
End If

End Sub
'----------------------------------

"max-75" a écrit dans le message de
news:

Bonjour,

voici mon probleme:
ajouter des parametres de dates (debut et fin) qui se trouvent en A1
et A2 de l'onglet settings à la query enregistree sous forme de macro
pour le moment (fichier .bas)- mes connaissances en la matiere sont
tres limitees.
Il s'agit d'une base oracle, la connection est ok:

......(( T001.EventDate BETWEEN TO_DATE('2008-01-01','YYYY-MM-DD') AND
TO_DATE('2008-12-31','YYYY-MM-DD') AND UPPER(T002.EventCode) > 'OPEN' )) " _
).....

Je ne peux pas recreer graphiquement ces query donc pas moyen
d'utiliser les [parametres]
En furetant, j'ai essayé les '?' sans plus de succes.
j'ai trouvé
celà:http://groups.google.fr/group/microsoft.public.fr.excel/browse_thread...

mais je dois avoir un souci de syntaxe car je m'y perds dans les ' " &
ou autres ] #....

Votre aide serait la bienvenue car j'ai une bonne 20taines de requetes
sur le grill et je sens que celà peut me faire gagner des jours de
travail.

Merci d'avance,

Max



merci Michdenis,

c'est exactement le post que j'avais trouvé (cf le lien de mon premier
post)
c'est juste que je n'arrive pas à l'adapter (probablement une question
de guillemets, quotes etc...)
mes connaissances VB sont tres limites...je comprends tres bien le
raisonnement mais mon souci ici est de definir debut et fin selon
settings/A1 et A2 par ex et de les passer au bon format pour etre
correctement interprete...un peu comme qq1 qui comprends vaguement une
lanque sans la parler...
est-ce trop demande si tu pouvais me mettre la bonne syntax dans mon
ex???

en tout cas, merci bcq

Max
Avatar
max-75
On Jan 8, 11:56 pm, "michdenis" wrote:
début de ta macro pour définir tes dates dans ta clause "Where" de ta
requête

Sub Macro1()

Dim Requete As String, requete1 As String
Dim Début As String, Fin As String

Dim DD As Date, DF As Date

'Tu dois adapter le nom de la feuille et l'adresse où se retrouve
'ta date de début (dd) et ta date de fin (DF)
DD = Worksheets("Feuil1").Range("A2")
DF = Worksheets("Feuil1").Range("B2")

'Ceci c'est un format particulier que MsQuery comprend
'même si cela semble bizarre...!!! Les 2 variabless "Début"
et "Fin" ont été déclarées As String

Début = Format(DateSerial(Year(DD), Month(DD), Day(DD)), "yyyy-mm-d d
00:00:00")
Fin = Format(DateSerial(Year(DF), Month(DF), Day(DF)), "yyyy-mm-dd
00:00:00")

'Maintenant le texte de ta requête à titre d'exemple :

Requete = "SELECT `Feuil1$`.Société, `Feuil1$`.Date" & vbCrLf & _
                     "FROM `" & ThisWorkbook.FullNa me & "`.`Feuil1$`" & _
             "`Feuil1$` WHERE (`Feuil1$`.date>{ts '" & Dé but & "'}) and _
                 (`Feuil1$`.date<{ts '" & Fin & "'})"

Feuil1  -> nom onglet de la feuille où sont les données
Société et Date -> sont les 2 étiquettes de colonnes à partir
desquelles la requête est basée

Le signe $ suivant le nom de l'onglet de la feuille est obligatoire peu
importe le nom de l'onglet de la feuille.

{ts '" & Début & "'}  -> tu copies intégralement ... cela est un de s
critères
                                     date de début de ta clause Where de la
requête.

Il y a d'autres syntaxes possibles mais ces dernères ont été test és.
Par exemple :

En dernier lieu, je mentionne que ceci est aussi acceptable
comme condition Where pour une date :
"WHERE (`Feuil1$`.LesDates>#01/09/2005#)"
lire 9 janvier 2005  et non 1 septembre 2005
Dans l'exemple précédent, l'utilisation des dièses requiert que
tu passes la date au format américain qui est : mois/jour/année

Il y a aussi ceci :
"WHERE (`Feuil1$`.LesDates>#" & Format(LaDate,"MM/DD/YYYY") & "#)"
Tu transformes la date que tu as au format américain.

IMPORTANT : Si tu utilises l'enregistreur de macro pendant que tu fais
manuellement les manipulations, Excel va te donner la presque totalité
du code... il va te rester à adapter le critère des dates.

Bon travail !

"max-75" a écrit dans le message de news:

On Jan 8, 6:50 pm, "michdenis" wrote:





> Voici un petit exemple de code à partir duquel t'inspirer

> '---------------------------
> Sub Requête_MsQuery_Date()

> Dim Requete As String, requete1 As String
> Dim Début As String, Fin As String

> Début = Format(DateSerial(2003, 4, 10), "yyyy-mm-dd 00:00:00")
> Fin = Format(DateSerial(2003, 4, 20), "yyyy-mm-dd 00:00:00")

> Requete = "SELECT `Feuil1$`.Société, `Feuil1$`.Date" & vbCrLf & _
> "FROM `" & ThisWorkbook.FullName & "`.`Feuil1$`" & _
> "`Feuil1$` WHERE (`Feuil1$`.date>{ts '" & Début & "'}) and
> (`Feuil1$`.date<{ts '" & Fin & "'})"

> With Worksheets("Feuil1").QueryTables.Add(Connection:=Array(Array( _
> "ODBC;DSN=Excel Files;DBQ=" & ThisWorkbook.FullName & ";" & _
> "DefaultDir=" & ThisWorkbook.Path & "" _
> ), Array("cel;DriverIdy0;MaxBufferSize 48;" & _
> "PageTimeout=5;")), Destination:=Worksheets("Feuil1").Range("D1"))

> .CommandText = Array(Requete)
> .Name = "Lancer la requête à partir de Excel Files"
> .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:úlse
> End With
> End Sub
> '--------------------------------------

> Et pour en faire une requête paramêtrée -> un bout d'explication :

> Voici comment il est possible de créer et d'exécuter
> une requête paramétrée dans MsQuery. Ce qui suit
> est un exemple élaboré à partir d'un critère sur les dates:

> C'est une réponse que j'ai déjà publiée sur ce forum.

> Pour définir une requête paramétrée directement dans
> la fenêtre de MsQuery tu utilises les crochets droits dans
> la zone de saisie du critère à l'intérieur desquels tu insères
> un petit texte significatif pour l'usager afin de lui signifier le
> critère à définir. Les symboles ">" et "<" servent à
> à déterminer l'intervalle entre les dates choisies.

> Exemple :

> Dans la fenêtre "Critères" de Query

> NomDuChamp -->: Date
> critère --> : >[Date de début] Et <[Date de fin]

> Tu retournes le résultat de la requête dans une feuille
> de ton classeur.

> Avec un clic droit sur la plage de résultat, dans le menu
> contextuel déroulant choisis la commande : "Paramètre"

> Dans la fenêtre qui s'ouvre : Tu sélectionnes dans la partie
> gauche de la fenêtre : " Date de début" et tu sélectionnes le
> bouton radio :"Obtenir la valeur de la cellule suivante" :
> Tu indiques la cellule devant servir pour ce critère. Et pour
> finir, Tu coches le bouton radio si tu veux qu'excel actualise
> les données dès que tu modifieras le contenu de cette cellule
> (date de début) . Maintenant il te reste à faire la même chose
> concernant "Date de fin" . Voilà.

> Si tu voulais obtenir le même résultat mais à partir d'une macro
> qui servirait à actualiser ton "querytable", tu pourrais t'inspirer d e
> ceci. À copier dans le module feuille où l'action se déroule :

> '----------------------------------
> Private Sub Worksheet_Change(ByVal Target As Range)

> 'il est pris pour acquis que G1, G2 contiennent des dates
> 'ET
> 'G1 est plus petit que G2 ... tu peux ajouter une gestion
> 'd'erreur le cas échéant....! ( pas défini ici ! )

> If Target.Address = [G1].Address Or _
> Target.Address = [G2].Address Then
> 'En supposant que ton QueryTable se situe
> 'sur la feuille "Feuil1"
> 'Plage de critère de tes dates :
> 'Date de début : "Feuil1!G1"
> 'Date de Fin : "Feuil1!G2"

> Dim P1 As Parameter
> Dim P2 As Parameter

> 'utilise l'index ou le nom de la requête
> With Worksheets("Feuil1").QueryTables(1)
> Set P1 = .Parameters(1)
> Set P2 = .Parameters(2)
> P1.SetParam xlRange, Range("Feuil1!G1")
> P2.SetParam xlRange, Range("Feuil1!G2")
> .Refresh False
> End With
> End If

> End Sub
> '----------------------------------

> "max-75" a écrit dans le message d e
> news:
>
> Bonjour,

> voici mon probleme:
> ajouter des parametres de dates (debut et fin) qui se trouvent en A1
> et A2 de l'onglet settings à la query enregistree sous forme de macro
> pour le moment (fichier .bas)- mes connaissances en la matiere sont
> tres limitees.
> Il s'agit d'une base oracle, la connection est ok:

> ......(( T001.EventDate BETWEEN TO_DATE('2008-01-01','YYYY-MM-DD') AND
> TO_DATE('2008-12-31','YYYY-MM-DD') AND UPPER(T002.EventCode) =
> 'OPEN' )) " _
> ).....

> Je ne peux pas recreer graphiquement ces query donc pas moyen
> d'utiliser les [parametres]
> En furetant, j'ai essayé les '?' sans plus de succes.
> j'ai trouvé
> celà:http://groups.google.fr/group/microsoft.public.fr.excel/browse_t hread...

> mais je dois avoir un souci de syntaxe car je m'y perds dans les ' " &
> ou autres ] #....

> Votre aide serait la bienvenue car j'ai une bonne 20taines de requetes
> sur le grill et je sens que celà peut me faire gagner des jours de
> travail.

> Merci d'avance,

> Max

merci Michdenis,

c'est exactement le post que j'avais trouvé (cf le lien de mon premier
post)
c'est juste que je n'arrive pas à l'adapter (probablement une question
de guillemets, quotes etc...)
mes connaissances VB sont tres limites...je comprends tres bien le
raisonnement mais mon souci ici est de definir debut et fin selon
settings/A1 et A2 par ex et de les passer au bon format pour etre
correctement interprete...un peu comme qq1 qui comprends vaguement une
lanque sans la parler...
est-ce trop demande si tu pouvais me mettre la bonne syntax dans mon
ex???

en tout cas, merci bcq

Max- Hide quoted text -

- Show quoted text -



merci pour tant de pedagogie...j'essaie ASAP. Peut etre demain.
Avatar
max-75
On Jan 9, 12:36 am, max-75 wrote:
On Jan 8, 11:56 pm, "michdenis" wrote:





> début de ta macro pour définir tes dates dans ta clause "Where" de ta
> requête

> Sub Macro1()

> Dim Requete As String, requete1 As String
> Dim Début As String, Fin As String

> Dim DD As Date, DF As Date

> 'Tu dois adapter le nom de la feuille et l'adresse où se retrouve
> 'ta date de début (dd) et ta date de fin (DF)
> DD = Worksheets("Feuil1").Range("A2")
> DF = Worksheets("Feuil1").Range("B2")

> 'Ceci c'est un format particulier que MsQuery comprend
> 'même si cela semble bizarre...!!! Les 2 variabless "Début"
> et "Fin" ont été déclarées As String

> Début = Format(DateSerial(Year(DD), Month(DD), Day(DD)), "yyyy-mm -dd
> 00:00:00")
> Fin = Format(DateSerial(Year(DF), Month(DF), Day(DF)), "yyyy-mm-dd
> 00:00:00")

> 'Maintenant le texte de ta requête à titre d'exemple :

> Requete = "SELECT `Feuil1$`.Société, `Feuil1$`.Date" & vbCrLf & _
>                      "FROM `" & ThisWorkbook.Full Name & "`.`Feuil1$`" & _
>              "`Feuil1$` WHERE (`Feuil1$`.date>{ts '" & D ébut & "'}) and _
>                  (`Feuil1$`.date<{ts '" & Fin & "'})"

> Feuil1  -> nom onglet de la feuille où sont les données
> Société et Date -> sont les 2 étiquettes de colonnes à partir
> desquelles la requête est basée

> Le signe $ suivant le nom de l'onglet de la feuille est obligatoire peu
> importe le nom de l'onglet de la feuille.

> {ts '" & Début & "'}  -> tu copies intégralement ... cela est un des
> critères
>                                      date de début de ta clause Where de la
> requête.

> Il y a d'autres syntaxes possibles mais ces dernères ont été test és.
> Par exemple :

> En dernier lieu, je mentionne que ceci est aussi acceptable
> comme condition Where pour une date :
> "WHERE (`Feuil1$`.LesDates>#01/09/2005#)"
> lire 9 janvier 2005  et non 1 septembre 2005
> Dans l'exemple précédent, l'utilisation des dièses requiert que
> tu passes la date au format américain qui est : mois/jour/année

> Il y a aussi ceci :
> "WHERE (`Feuil1$`.LesDates>#" & Format(LaDate,"MM/DD/YYYY") & "#)"
> Tu transformes la date que tu as au format américain.

> IMPORTANT : Si tu utilises l'enregistreur de macro pendant que tu fais
> manuellement les manipulations, Excel va te donner la presque totalit é
> du code... il va te rester à adapter le critère des dates.

> Bon travail !

> "max-75" a écrit dans le message d e news:
>
> On Jan 8, 6:50 pm, "michdenis" wrote:

> > Voici un petit exemple de code à partir duquel t'inspirer

> > '---------------------------
> > Sub Requête_MsQuery_Date()

> > Dim Requete As String, requete1 As String
> > Dim Début As String, Fin As String

> > Début = Format(DateSerial(2003, 4, 10), "yyyy-mm-dd 00:00:00")
> > Fin = Format(DateSerial(2003, 4, 20), "yyyy-mm-dd 00:00:00")

> > Requete = "SELECT `Feuil1$`.Société, `Feuil1$`.Date" & vbCrLf & _
> > "FROM `" & ThisWorkbook.FullName & "`.`Feuil1$`" & _
> > "`Feuil1$` WHERE (`Feuil1$`.date>{ts '" & Début & "'}) and
> > (`Feuil1$`.date<{ts '" & Fin & "'})"

> > With Worksheets("Feuil1").QueryTables.Add(Connection:=Array(Array( _
> > "ODBC;DSN=Excel Files;DBQ=" & ThisWorkbook.FullName & ";" & _
> > "DefaultDir=" & ThisWorkbook.Path & "" _
> > ), Array("cel;DriverIdy0;MaxBufferSize 48;" & _
> > "PageTimeout=5;")), Destination:=Worksheets("Feuil1").Range("D1") )

> > .CommandText = Array(Requete)
> > .Name = "Lancer la requête à partir de Excel Files"
> > .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:úlse
> > End With
> > End Sub
> > '--------------------------------------

> > Et pour en faire une requête paramêtrée -> un bout d'explicatio n :

> > Voici comment il est possible de créer et d'exécuter
> > une requête paramétrée dans MsQuery. Ce qui suit
> > est un exemple élaboré à partir d'un critère sur les dates:

> > C'est une réponse que j'ai déjà publiée sur ce forum.

> > Pour définir une requête paramétrée directement dans
> > la fenêtre de MsQuery tu utilises les crochets droits dans
> > la zone de saisie du critère à l'intérieur desquels tu insère s
> > un petit texte significatif pour l'usager afin de lui signifier le
> > critère à définir. Les symboles ">" et "<" servent à
> > à déterminer l'intervalle entre les dates choisies.

> > Exemple :

> > Dans la fenêtre "Critères" deQuery

> > NomDuChamp -->: Date
> > critère --> : >[Date de début] Et <[Date de fin]

> > Tu retournes le résultat de la requête dans une feuille
> > de ton classeur.

> > Avec un clic droit sur la plage de résultat, dans le menu
> > contextuel déroulant choisis la commande : "Paramètre"

> > Dans la fenêtre qui s'ouvre : Tu sélectionnes dans la partie
> > gauche de la fenêtre : " Date de début" et tu sélectionnes le
> > bouton radio :"Obtenir la valeur de la cellule suivante" :
> > Tu indiques la cellule devant servir pour ce critère. Et pour
> > finir, Tu coches le bouton radio si tu veux qu'excel actualise
> > les données dès que tu modifieras le contenu de cette cellule
> > (date de début) . Maintenant il te reste à faire la même chose
> > concernant "Date de fin" . Voilà.

> > Si tu voulais obtenir le même résultat mais à partir d'une macr o
> > qui servirait à actualiser ton "querytable", tu pourrais t'inspirer de
> > ceci. À copier dans le module feuille où l'action se déroule :

> > '----------------------------------
> > Private Sub Worksheet_Change(ByVal Target As Range)

> > 'il est pris pour acquis que G1, G2 contiennent des dates
> > 'ET
> > 'G1 est plus petit que G2 ... tu peux ajouter une gestion
> > 'd'erreur le cas échéant....! ( pas défini ici ! )

> > If Target.Address = [G1].Address Or _
> > Target.Address = [G2].Address Then
> > 'En supposant que ton QueryTable se situe
> > 'sur la feuille "Feuil1"
> > 'Plage de critère de tes dates :
> > 'Date de début : "Feuil1!G1"
> > 'Date de Fin : "Feuil1!G2"

> > Dim P1 As Parameter
> > Dim P2 As Parameter

> > 'utilise l'index ou le nom de la requête
> > With Worksheets("Feuil1").QueryTables(1)
> > Set P1 = .Parameters(1)
> > Set P2 = .Parameters(2)
> > P1.SetParam xlRange, Range("Feuil1!G1")
> > P2.SetParam xlRange, Range("Feuil1!G2")
> > .Refresh False
> > End With
> > End If

> > End Sub
> > '----------------------------------

> > "max-75" a écrit dans le message de
> > news:
> >
> > Bonjour,

> > voici mon probleme:
> > ajouter des parametres de dates (debut et fin) qui se trouvent en A1
> > et A2 de l'onglet settings à laqueryenregistree sous forme de macro
> > pour le moment (fichier .bas)- mes connaissances en la matiere sont
> > tres limitees.
> > Il s'agit d'une base oracle, la connection est ok:

> > ......(( T001.EventDate BETWEEN TO_DATE('2008-01-01','YYYY-MM-DD') AN D
> > TO_DATE('2008-12-31','YYYY-MM-DD') AND UPPER(T002.EventCode) =
> > 'OPEN' )) " _
> > ).....

> > Je ne peux pas recreer graphiquement cesquerydonc pas moyen
> > d'utiliser les [parametres]
> > En furetant, j'ai essayé les '?' sans plus de succes.
> > j'ai trouvé
> > celà:http://groups.google.fr/group/microsoft.public.fr.excel/browse _thread...

> > mais je dois avoir un souci de syntaxe car je m'y perds dans les ' " &
> > ou autres ] #....

> > Votre aide serait la bienvenue car j'ai une bonne 20taines de requete s
> > sur le grill et je sens que celà peut me faire gagner des jours de
> > travail.

> > Merci d'avance,

> >Max

> merci Michdenis,

> c'est exactement le post que j'avais trouvé (cf le lien de mon premie r
> post)
> c'est juste que je n'arrive pas à l'adapter (probablement une questio n
> de guillemets, quotes etc...)
> mes connaissances VB sont tres limites...je comprends tres bien le
> raisonnement mais mon souci ici est de definir debut et fin selon
> settings/A1 et A2 par ex et de les passer au bon format pour etre
> correctement interprete...un peu comme qq1 qui comprends vaguement une
> lanque sans la parler...
> est-ce trop demande si tu pouvais me mettre la bonne syntax dans mon
> ex???

> en tout cas, merci bcq

>Max- Hide quoted text -

> - Show quoted text -

merci pour tant de pedagogie...j'essaie ASAP. Peut etre demain.- Hide quo ted text -

- Show quoted text -



Bonsoir,

Avec un peu de galere qui m'a beaucoup appris, j'ai reussi en
modifiant un peu;

Dim Requete As String, requete1 As String
Dim Début As String, Fin As String


Dim DD As Date, DF As Date


'Tu dois adapter le nom de la feuille et l'adresse où se retrouve
'ta date de début (dd) et ta date de fin (DF)
DD = Worksheets("SHEET1").Range("A1")
DF = Worksheets("SHEET1").Range("B1")


'Ceci c'est un format particulier que MsQuery comprend
'même si cela semble bizarre...!!! Les 2 variabless "Début"
'et "Fin" ont été déclarées As String


Début = Format(DateSerial(Year(DD), Month(DD), Day(DD)), "yyyy-mm-
dd")
Fin = Format(DateSerial(Year(DF), Month(DF), Day(DF)), "yyyy-mm-dd")

'Maintenant le texte de ta requête à titre d'exemple :

With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DRIVER={Oracle in
OraHome92};SERVER=================== =======
===Þstination:=Range("A3"))
.CommandText = Array( _
"SELECT DISTINCT ================ =====
(( T001.EventDate BETWEEN TO_DATE('" & Début & "','YYYY-MM-DD') AND
TO_DATE('" & Fin & "','YYYY-MM-DD')============= ========

Je precise (ce que je n'avais pas fait lors de mon precedent post) que
je possede une version US de XL et une base oracle distante.
Les parametres genre ">{ts '" & Début & "'}) " n'ont pas marche pour
moi (ou je n'ai pas su.....)

merci pour votre aide en tt cas!

Max