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

MS Query

4 réponses
Avatar
Talliac
Bonjour,

Je souhaite récupérer des cours de bourses dans une feuille excel à partir
d'une base externe via MS Query.
Je souhaite récupérer ces données quotidiennement de J - 7 à date du jour (
J = date du jour ).
Donc dans MS Query je souhaiterais donner une valeur de type variable au
lieu d'une valeur constante au champ date :

au lieu de
Champ Date_Valorisation
Valeur >#08/11/2008#

remplacé par
Champ Date_Valorisation
Valeur > Date - 7 ( en imaginant que Date serait un mot clé signifiant
date du jour )

Existe-t-il dans MS Query des mots clés de type date, comme dans Visual
Basic le mot clé Date ?

Merci.

4 réponses

Avatar
michdenis
As-tu pensé à utilisé une requête paramètrée dans Query :
Cela te permettrait d'utiliser une cellule de ta feuille de
calcul pour exprimer ton critère :

Voici un petit exemple à adapter à tes fins ...


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
'----------------------------------




"Talliac" a écrit dans le message de
news:
Bonjour,

Je souhaite récupérer des cours de bourses dans une feuille excel à partir
d'une base externe via MS Query.
Je souhaite récupérer ces données quotidiennement de J - 7 à date du jour (
J = date du jour ).
Donc dans MS Query je souhaiterais donner une valeur de type variable au
lieu d'une valeur constante au champ date :

au lieu de
Champ Date_Valorisation
Valeur >#08/11/2008#

remplacé par
Champ Date_Valorisation
Valeur > Date - 7 ( en imaginant que Date serait un mot clé signifiant
date du jour )

Existe-t-il dans MS Query des mots clés de type date, comme dans Visual
Basic le mot clé Date ?

Merci.
Avatar
Talliac
Bonjour,

Merci pour ta réponse , tes suggestions m'ouvrent de nouveaux horizons quant
à l'utilisation de ms query.
Par rapport à la solution macro que tu me proposes, penses qu'il soit
possible d'y insérer la ligne .connection renseignant le login et password de
la base externe que je consulte. Ci dessous la ligne connection de la base
que je consulte, avec les arguments UID et PWD :
.Connection = Array(Array( _

"ODBC;DSN=CLIP;UIDÊillat_p;PWD=pcaillat_p;DBQ=CLIP;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;NUM=NLS" _
), Array(";MTS=F;MDI=F;CSR=F;FWC=F;FBSd000;TLO=0;"))

Bon Dimanche.

"michdenis" a écrit :


As-tu pensé à utilisé une requête paramètrée dans Query :
Cela te permettrait d'utiliser une cellule de ta feuille de
calcul pour exprimer ton critère :

Voici un petit exemple à adapter à tes fins ...


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
'----------------------------------




"Talliac" a écrit dans le message de
news:
Bonjour,

Je souhaite récupérer des cours de bourses dans une feuille excel à partir
d'une base externe via MS Query.
Je souhaite récupérer ces données quotidiennement de J - 7 à date du jour (
J = date du jour ).
Donc dans MS Query je souhaiterais donner une valeur de type variable au
lieu d'une valeur constante au champ date :

au lieu de
Champ Date_Valorisation
Valeur >#08/11/2008#

remplacé par
Champ Date_Valorisation
Valeur > Date - 7 ( en imaginant que Date serait un mot clé signifiant
date du jour )

Existe-t-il dans MS Query des mots clés de type date, comme dans Visual
Basic le mot clé Date ?

Merci.









Avatar
michdenis
| Par rapport à la solution macro que tu me proposes,
| penses qu'il soit possible d'y insérer la ligne .connection
| renseignant le login et password de la base externe
| que je consulte.

La procédure soumise est applicable à une requête externe
via MsQuery déjà réalisé et que l'on veut mettre à jour lorsque
l'on change le contenu des cellules contenant les paramètres
de la requête. Cette procédure met alors le QueryTable à jour.

Ta demande concernant la chaîne de connexion à la base de
données source se fait au moment où tu crées ton QueryTable.
Si tu désires obtenir la syntaxe de cette chaîne de connexion
propre à ta requête, tu te sers de l'enregistrement de macro.
Si tu actives cette dernière lors de tes manipulations visant à
créer ton QueryTable, tu obtiendras tout le code dont tu as
besoin....La chaine de connexion sera enregistrée et liée à ton
QueryTable lors de la sauvegarde du fichier. Je suppose
que ton loggin et mot de passe devrait faire parti de ta chaîne
de connexion.

Comment faire pour insérer le loggin et mot de passe lors de la
construction de la requête....
Dans Excel, lorsque tu appelles la commande "Données externes"
nouvelle requête dans MsQuery, tu double-cliques sur "nouvelles
sources de données" dans la fenêtre qui s'affiche ...Après avoir
donné un nom à ta nouvelle source de données, tu auras l'opportunité
de renseigner ton loggin et mot de passe dans le bas de fa fenêtre...

Je suppose que l'enregistreur de macro te donnera la bonne
syntaxe de ton code spécialement en ce qui concerne la chaîne
de connexion de la requête !

Est-ce qu'à chaque mise à jour, Excel te demandera le loggin et
mot de passe ? Je n'ai jamais testé cela ...D'après moi, Excel devrait
sauvegarder cette information au même titre que la requête elle-même !

Si tu fais le test, tu nous le diras !





Ci dessous la ligne connection de la base
que je consulte, avec les arguments UID et PWD :
.Connection = Array(Array( _

"ODBC;DSN=CLIP;UIDÊillat_p;PWD=pcaillat_p;DBQ=CLIP;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;NUM=NLS"
_
), Array(";MTS=F;MDI=F;CSR=F;FWC=F;FBSd000;TLO=0;"))

Bon Dimanche.

"michdenis" a écrit :


As-tu pensé à utilisé une requête paramètrée dans Query :
Cela te permettrait d'utiliser une cellule de ta feuille de
calcul pour exprimer ton critère :

Voici un petit exemple à adapter à tes fins ...


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
'----------------------------------




"Talliac" a écrit dans le message de
news:
Bonjour,

Je souhaite récupérer des cours de bourses dans une feuille excel à partir
d'une base externe via MS Query.
Je souhaite récupérer ces données quotidiennement de J - 7 à date du jour
(
J = date du jour ).
Donc dans MS Query je souhaiterais donner une valeur de type variable au
lieu d'une valeur constante au champ date :

au lieu de
Champ Date_Valorisation
Valeur >#08/11/2008#

remplacé par
Champ Date_Valorisation
Valeur > Date - 7 ( en imaginant que Date serait un mot clé signifiant
date du jour )

Existe-t-il dans MS Query des mots clés de type date, comme dans Visual
Basic le mot clé Date ?

Merci.









Avatar
Talliac
Bonsoir,

En ajoutant à l'instruction .connection les arguments UID (en lui donnant la
valeur du login de la base de données externe ) et PWD ( en lui donnant la
valeur du password de la base de données externe ), la macro s'exécute sans
s'interrompre pour me demander le password, c'est donc parfait. Ci dessous la
copie de l'instruction
.connection où l'on peut voir "UID­min;PWD=jalabert"


.Connection = Array(Array( _
"ODBC;DBQ=C:DOCUMENTS AND SETTINGSPIERRE CAILLATMES
DOCUMENTSbd1.mdb;DefaultDir=C:DOCUMENTS AND SETTINGSPIERRE CAILLATMES
DOCU" _
), Array( _
"MENTS;Driver={Driver do Microsoft Access
(*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;;Saf" _
),
Array("eTransactions=0;Threads=3;UID­min;PWD=jalabert;UserCommitSync=Yes;"))

Bonne semaine.

"michdenis" a écrit :

| Par rapport à la solution macro que tu me proposes,
| penses qu'il soit possible d'y insérer la ligne .connection
| renseignant le login et password de la base externe
| que je consulte.

La procédure soumise est applicable à une requête externe
via MsQuery déjà réalisé et que l'on veut mettre à jour lorsque
l'on change le contenu des cellules contenant les paramètres
de la requête. Cette procédure met alors le QueryTable à jour.

Ta demande concernant la chaîne de connexion à la base de
données source se fait au moment où tu crées ton QueryTable.
Si tu désires obtenir la syntaxe de cette chaîne de connexion
propre à ta requête, tu te sers de l'enregistrement de macro.
Si tu actives cette dernière lors de tes manipulations visant à
créer ton QueryTable, tu obtiendras tout le code dont tu as
besoin....La chaine de connexion sera enregistrée et liée à ton
QueryTable lors de la sauvegarde du fichier. Je suppose
que ton loggin et mot de passe devrait faire parti de ta chaîne
de connexion.

Comment faire pour insérer le loggin et mot de passe lors de la
construction de la requête....
Dans Excel, lorsque tu appelles la commande "Données externes"
nouvelle requête dans MsQuery, tu double-cliques sur "nouvelles
sources de données" dans la fenêtre qui s'affiche ...Après avoir
donné un nom à ta nouvelle source de données, tu auras l'opportunité
de renseigner ton loggin et mot de passe dans le bas de fa fenêtre...

Je suppose que l'enregistreur de macro te donnera la bonne
syntaxe de ton code spécialement en ce qui concerne la chaîne
de connexion de la requête !

Est-ce qu'à chaque mise à jour, Excel te demandera le loggin et
mot de passe ? Je n'ai jamais testé cela ...D'après moi, Excel devrait
sauvegarder cette information au même titre que la requête elle-même !

Si tu fais le test, tu nous le diras !





Ci dessous la ligne connection de la base
que je consulte, avec les arguments UID et PWD :
..Connection = Array(Array( _

"ODBC;DSN=CLIP;UIDÊillat_p;PWD=pcaillat_p;DBQ=CLIP;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;NUM=NLS"
_
), Array(";MTS=F;MDI=F;CSR=F;FWC=F;FBSd000;TLO=0;"))

Bon Dimanche.

"michdenis" a écrit :

>
> As-tu pensé à utilisé une requête paramètrée dans Query :
> Cela te permettrait d'utiliser une cellule de ta feuille de
> calcul pour exprimer ton critère :
>
> Voici un petit exemple à adapter à tes fins ...
>
>
> 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
> '----------------------------------
>
>
>
>
> "Talliac" a écrit dans le message de
> news:
> Bonjour,
>
> Je souhaite récupérer des cours de bourses dans une feuille excel à partir
> d'une base externe via MS Query.
> Je souhaite récupérer ces données quotidiennement de J - 7 à date du jour
> (
> J = date du jour ).
> Donc dans MS Query je souhaiterais donner une valeur de type variable au
> lieu d'une valeur constante au champ date :
>
> au lieu de
> Champ Date_Valorisation
> Valeur >#08/11/2008#
>
> remplacé par
> Champ Date_Valorisation
> Valeur > Date - 7 ( en imaginant que Date serait un mot clé signifiant
> date du jour )
>
> Existe-t-il dans MS Query des mots clés de type date, comme dans Visual
> Basic le mot clé Date ?
>
> Merci.
>
>
>
>
>
>
>