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

Requete parametrée

16 réponses
Avatar
jeje
Bonjour

J'ai un petit problème avec Excel :

Je récupère des données venant d'une base donnée Oracle que j'affiche sur
Excel, j'ai écrit ma requete dans Microsoft Querry qui se connecte a la base
Oracle et me renvoi les informations qui vont dans Excel.
Jusque la tout se passe bien.
Seulement maitenant, j'aimerais passer un paramètre dans cette requete, a
savoir un champ qui se trouve a coté de mon tableau ( un chiffre tout
bêtement), ceci afin que lorsque je change ce nombre, et que j'actualise ma
requete ce nombe soit pris en compte.
Mais voila, je ne rouve aucun moyen d'envoyer en paramètre une donnée a
Miscrosft Querry venant de Excel, en cherchant avec l'aide du logiciel, ils
me disent de selectionner (apres avoir fait un click droit sur le tableau)
l'option 'paramètres' mais je n'ai jamais pu selectionner cette derniere.....

Comment puis je passer cette donnée en paramètre à ma requete ?

D'avance merci pour vos précieuses réponses.
Bonne journée à tous.

10 réponses

1 2
Avatar
JB
Bonjour,

Un exemple avec Access en DAO:

Sub ReqParamDAO()
Dim bd As DAO.Database
Dim rs As Recordset
Set bd = OpenDatabase(ActiveWorkbook.Path & "Access2000.mdb")
Set q = bd.QueryDefs("R_param_ville")
q.Parameters("nomville") = "paris"
Set rs = q.OpenRecordset
Do While Not rs.EOF
MsgBox rs!nom_client
rs.MoveNext
Loop
End Sub

JB
http://boisgontierj.free.fr

On 5 nov, 14:25, jeje wrote:
Bonjour

J'ai un petit problème avec Excel :

Je récupère des données venant d'une base donnée Oracle que j'aff iche sur
Excel, j'ai écrit ma requete dans Microsoft Querry qui se connecte a la base
Oracle et me renvoi les informations qui vont dans Excel.
Jusque la tout se passe bien.
Seulement maitenant, j'aimerais passer un paramètre dans cette requete, a
savoir un champ qui se trouve a coté de mon tableau ( un chiffre tout
bêtement), ceci afin que lorsque je change ce nombre, et que j'actualis e ma
requete ce nombe soit pris en compte.
Mais voila, je ne rouve aucun moyen d'envoyer en paramètre une donnée a
Miscrosft Querry venant de Excel, en cherchant avec l'aide du logiciel, i ls
me disent de selectionner (apres avoir fait un click droit sur le tableau)
l'option 'paramètres' mais je n'ai jamais pu selectionner cette dernier e.....

Comment puis je passer cette donnée en paramètre à ma requete ?

D'avance merci pour vos précieuses réponses.
Bonne journée à tous.


Avatar
jeje
Merci pour la réponse !
Le fait est que je ne m'y connais pas vraiment en VBA :s

Donc si je comprend bien je ne peux pas envoyer de paramètre a microsoft
query ?
Dois je donc lancer ma requete uniquement avec VBA sans passre par microsoft
Querry ?

Encore merci


Bonjour,

Un exemple avec Access en DAO:

Sub ReqParamDAO()
Dim bd As DAO.Database
Dim rs As Recordset
Set bd = OpenDatabase(ActiveWorkbook.Path & "Access2000.mdb")
Set q = bd.QueryDefs("R_param_ville")
q.Parameters("nomville") = "paris"
Set rs = q.OpenRecordset
Do While Not rs.EOF
MsgBox rs!nom_client
rs.MoveNext
Loop
End Sub

JB
http://boisgontierj.free.fr

On 5 nov, 14:25, jeje wrote:
Bonjour

J'ai un petit problème avec Excel :

Je récupère des données venant d'une base donnée Oracle que j'affiche sur
Excel, j'ai écrit ma requete dans Microsoft Querry qui se connecte a la base
Oracle et me renvoi les informations qui vont dans Excel.
Jusque la tout se passe bien.
Seulement maitenant, j'aimerais passer un paramètre dans cette requete, a
savoir un champ qui se trouve a coté de mon tableau ( un chiffre tout
bêtement), ceci afin que lorsque je change ce nombre, et que j'actualise ma
requete ce nombe soit pris en compte.
Mais voila, je ne rouve aucun moyen d'envoyer en paramètre une donnée a
Miscrosft Querry venant de Excel, en cherchant avec l'aide du logiciel, ils
me disent de selectionner (apres avoir fait un click droit sur le tableau)
l'option 'paramètres' mais je n'ai jamais pu selectionner cette derniere.....

Comment puis je passer cette donnée en paramètre à ma requete ?

D'avance merci pour vos précieuses réponses.
Bonne journée à tous.







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






"jeje" a écrit dans le message de news:

Bonjour

J'ai un petit problème avec Excel :

Je récupère des données venant d'une base donnée Oracle que j'affiche sur
Excel, j'ai écrit ma requete dans Microsoft Querry qui se connecte a la base
Oracle et me renvoi les informations qui vont dans Excel.
Jusque la tout se passe bien.
Seulement maitenant, j'aimerais passer un paramètre dans cette requete, a
savoir un champ qui se trouve a coté de mon tableau ( un chiffre tout
bêtement), ceci afin que lorsque je change ce nombre, et que j'actualise ma
requete ce nombe soit pris en compte.
Mais voila, je ne rouve aucun moyen d'envoyer en paramètre une donnée a
Miscrosft Querry venant de Excel, en cherchant avec l'aide du logiciel, ils
me disent de selectionner (apres avoir fait un click droit sur le tableau)
l'option 'paramètres' mais je n'ai jamais pu selectionner cette derniere.....

Comment puis je passer cette donnée en paramètre à ma requete ?

D'avance merci pour vos précieuses réponses.
Bonne journée à tous.
Avatar
jeje
Merci pour l'information pour faire des parametres avec querry !

Par contre je crois que ma requete est un peu trop compliqué pour query:
On ne peux pas metre de parametre pour les requetes qui ne sont pas affiché
graphiquement.....(je n'ai pas essayé de l'afficher graphiquement alors que
je l'avai deja ecrite en SQL)

Ma requete est de la forme :

select 'NOMENCLATURE' as Flux,'INTOBJ' as Interface, TMEMESSAGE from
tra_message
where LANGUE = 'FR'
and tmenumber IN(
select distinct obfnerr from intobj
where trunc(obfdmaj) = trunc(sysdate)-maVariable
)
UNION
select 'FOURNISSEUR' as Flux,'INTFOURN' as Interface, TMEMESSAGE from
tra_message
where LANGUE = 'FR'
and tmenumber IN(
select distinct fofnerr from intfourn
where trunc(fofdmaj) = trunc(sysdate)-maVariable
)
UNION
etc...............................

C'est toujours possible ?





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






"jeje" a écrit dans le message de news:

Bonjour

J'ai un petit problème avec Excel :

Je récupère des données venant d'une base donnée Oracle que j'affiche sur
Excel, j'ai écrit ma requete dans Microsoft Querry qui se connecte a la base
Oracle et me renvoi les informations qui vont dans Excel.
Jusque la tout se passe bien.
Seulement maitenant, j'aimerais passer un paramètre dans cette requete, a
savoir un champ qui se trouve a coté de mon tableau ( un chiffre tout
bêtement), ceci afin que lorsque je change ce nombre, et que j'actualise ma
requete ce nombe soit pris en compte.
Mais voila, je ne rouve aucun moyen d'envoyer en paramètre une donnée a
Miscrosft Querry venant de Excel, en cherchant avec l'aide du logiciel, ils
me disent de selectionner (apres avoir fait un click droit sur le tableau)
l'option 'paramètres' mais je n'ai jamais pu selectionner cette derniere.....

Comment puis je passer cette donnée en paramètre à ma requete ?

D'avance merci pour vos précieuses réponses.
Bonne journée à tous.





Avatar
jeje
Merci pour l'aide.

J'ai essayé la methode UNION mais .....' 13.. Cliquez sur OK et, lorsqu'un
message vous indique que la requête ne peut pas être représentée
graphiquement, cliquez de nouveau sur OK'
Donc j'ai l'UNION mais en contrepartie je ne peux plus passer de paramètre
comme je le voudrai à la base.... :s

Je suis donc dans une impasse .....

Je pense que je vais devoir me tourner vers VBA pour ce genre
requête.....mais comme je l'ai dit plus haut je ne maitrise pas du tout ce
langague.

Est il possible en VBA de faire ce genre de chose ? : (ou similaire)
String requete = [je met ma requete avec les variables]
ConnectionTo('Mabase','login', 'Mdp')
String resultat = Execution(requete)
Tableau A1:G1 = afficher(resultat)

Encore merci







| C'est toujours possible ?

C'est toi qui devrait me dire si tu as été capable ....!!!!!!!
Je n'ai jamais eu à tenter l'expérience avec ce type de requête !
Si tu réussis, faut pas être trop timide, tu afficheras les détails
de ta procédure.

| je crois que ma requete est un peu trop compliqué pour query:

Tu affiches la fenêtre MsQuery, tu sais te servir de l'aide ?
Un peu de lecteur sur les Requêtes de type "Union" pourrait t'aider.

Si tu obtiens le résultat escompté (débute par des vrais dates dans ta
requête pour tester) et lorsque cela fonctionne, tu peux définir un
critère qui ressemble à ceci :
WHERE (`Feuil1$`.`Les dates`> [`Date du début`]
Directement à partir de l'aide de MsQuery :
Combiner toutes les données provenant de deux tables
Si vous voulez associer toutes les données provenant de deux tables qui comprennent des données similaires, mais pas identiques — telles que deux listes (tables) de clients qui contiennent chacune des informations (champs) différentes pour chaque client, et que chaque liste comporte des clients qui ne figurent pas dans l'autre liste — vous pouvez créer une requête qui comprend tous les clients. Ce type de requête est appelé jointure externe totale. Obtenir des informations sur les jointures externes totales.

1.. Dans Microsoft Query, créez une requête, puis ajoutez-lui les deux tables.
2.. Joignez un champ qui est identique dans les deux tables (par exemple, le champ Code client de deux listes de clients) en faisant glisser le champ de la première table vers la seconde.
Sélectionnez un champ qui contient des informations pour tous les enregistrements de chaque table. Par exemple, si deux listes de clients contiennent les mêmes champs Code client, joignez le champ Code client.

3.. Double-cliquez sur la ligne de jointure qui relie les deux tables.
4.. Dans la boîte de dialogue Jointure, cliquez sur l'option 2, sur Ajouter, puis sur Fermer.
5.. Ajoutez tous les champs souhaités à la requête.
6.. Dans le menu Affichage, cliquez sur SQL.
7.. Sélectionnez les données de la zone Interrogation SQL, appuyez sur CTRL+C pour les copier, puis cliquez sur OK.
8.. Double-cliquez de nouveau sur la ligne de jointure.
9.. Dans la boîte de dialogue Jointure, cliquez sur l'option 3, sur Ajouter, puis sur Fermer.
10.. Dans le menu Affichage, cliquez sur SQL.
11.. Cliquez à la fin des données dans la zone Interrogation SQL, appuyez sur ENTRÉE, tapez le mot UNION en majuscules et appuyez de nouveau sur ENTRÉE.
12.. Appuyez sur CTRL+V pour coller les informations copiées après le mot UNION.
13.. Cliquez sur OK et, lorsqu'un message vous indique que la requête ne peut pas être représentée graphiquement, cliquez de nouveau sur OK.


"jeje" a écrit dans le message de news:
Merci pour l'information pour faire des parametres avec querry !

Par contre je crois que ma requete est un peu trop compliqué pour query:
On ne peux pas metre de parametre pour les requetes qui ne sont pas affiché
graphiquement.....(je n'ai pas essayé de l'afficher graphiquement alors que
je l'avai deja ecrite en SQL)

Ma requete est de la forme :

select 'NOMENCLATURE' as Flux,'INTOBJ' as Interface, TMEMESSAGE from
tra_message
where LANGUE = 'FR'
and tmenumber IN(
select distinct obfnerr from intobj
where trunc(obfdmaj) = trunc(sysdate)-maVariable
)
UNION
select 'FOURNISSEUR' as Flux,'INTFOURN' as Interface, TMEMESSAGE from
tra_message
where LANGUE = 'FR'
and tmenumber IN(
select distinct fofnerr from intfourn
where trunc(fofdmaj) = trunc(sysdate)-maVariable
)
UNION
etc...............................

C'est toujours possible ?





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






"jeje" a écrit dans le message de news:

Bonjour

J'ai un petit problème avec Excel :

Je récupère des données venant d'une base donnée Oracle que j'affiche sur
Excel, j'ai écrit ma requete dans Microsoft Querry qui se connecte a la base
Oracle et me renvoi les informations qui vont dans Excel.
Jusque la tout se passe bien.
Seulement maitenant, j'aimerais passer un paramètre dans cette requete, a
savoir un champ qui se trouve a coté de mon tableau ( un chiffre tout
bêtement), ceci afin que lorsque je change ce nombre, et que j'actualise ma
requete ce nombe soit pris en compte.
Mais voila, je ne rouve aucun moyen d'envoyer en paramètre une donnée a
Miscrosft Querry venant de Excel, en cherchant avec l'aide du logiciel, ils
me disent de selectionner (apres avoir fait un click droit sur le tableau)
l'option 'paramètres' mais je n'ai jamais pu selectionner cette derniere.....

Comment puis je passer cette donnée en paramètre à ma requete ?

D'avance merci pour vos précieuses réponses.
Bonne journée à tous.







Avatar
MichDenis
| Donc j'ai l'UNION mais en contrepartie je ne peux plus passer de paramètre
| comme je le voudrai à la base.... :s

Dans la syntaxe de ta requête, tu ne peux pas remplacer ta variable (date) par
ceci [`Ma date`] ???

Pour ce qui est du VBA, Tu pars l'enregistrement d'une macro et tu fais
toutes les manipulations que tu as fait pour ta requête "Union" précédente".
L'enregistreur devrait te donner l'essentiel du code !





"jeje" a écrit dans le message de news:

Merci pour l'aide.

J'ai essayé la methode UNION mais .....' 13.. Cliquez sur OK et, lorsqu'un
message vous indique que la requête ne peut pas être représentée
graphiquement, cliquez de nouveau sur OK'
Donc j'ai l'UNION mais en contrepartie je ne peux plus passer de paramètre
comme je le voudrai à la base.... :s

Je suis donc dans une impasse .....

Je pense que je vais devoir me tourner vers VBA pour ce genre
requête.....mais comme je l'ai dit plus haut je ne maitrise pas du tout ce
langague.

Est il possible en VBA de faire ce genre de chose ? : (ou similaire)
String requete = [je met ma requete avec les variables]
ConnectionTo('Mabase','login', 'Mdp')
String resultat = Execution(requete)
Tableau A1:G1 = afficher(resultat)

Encore merci







| C'est toujours possible ?

C'est toi qui devrait me dire si tu as été capable ....!!!!!!!
Je n'ai jamais eu à tenter l'expérience avec ce type de requête !
Si tu réussis, faut pas être trop timide, tu afficheras les détails
de ta procédure.

| je crois que ma requete est un peu trop compliqué pour query:

Tu affiches la fenêtre MsQuery, tu sais te servir de l'aide ?
Un peu de lecteur sur les Requêtes de type "Union" pourrait t'aider.

Si tu obtiens le résultat escompté (débute par des vrais dates dans ta
requête pour tester) et lorsque cela fonctionne, tu peux définir un
critère qui ressemble à ceci :
WHERE (`Feuil1$`.`Les dates`> [`Date du début`]
Directement à partir de l'aide de MsQuery :
Combiner toutes les données provenant de deux tables
Si vous voulez associer toutes les données provenant de deux tables qui comprennent des données
similaires, mais pas identiques - telles que deux listes (tables) de clients qui contiennent
chacune des informations (champs) différentes pour chaque client, et que chaque liste comporte des
clients qui ne figurent pas dans l'autre liste - vous pouvez créer une requête qui comprend tous
les clients. Ce type de requête est appelé jointure externe totale. Obtenir des informations sur
les jointures externes totales.

1.. Dans Microsoft Query, créez une requête, puis ajoutez-lui les deux tables.
2.. Joignez un champ qui est identique dans les deux tables (par exemple, le champ Code client
de deux listes de clients) en faisant glisser le champ de la première table vers la seconde.
Sélectionnez un champ qui contient des informations pour tous les enregistrements de chaque
table. Par exemple, si deux listes de clients contiennent les mêmes champs Code client, joignez le
champ Code client.

3.. Double-cliquez sur la ligne de jointure qui relie les deux tables.
4.. Dans la boîte de dialogue Jointure, cliquez sur l'option 2, sur Ajouter, puis sur Fermer.
5.. Ajoutez tous les champs souhaités à la requête.
6.. Dans le menu Affichage, cliquez sur SQL.
7.. Sélectionnez les données de la zone Interrogation SQL, appuyez sur CTRL+C pour les copier,
puis cliquez sur OK.
8.. Double-cliquez de nouveau sur la ligne de jointure.
9.. Dans la boîte de dialogue Jointure, cliquez sur l'option 3, sur Ajouter, puis sur Fermer.
10.. Dans le menu Affichage, cliquez sur SQL.
11.. Cliquez à la fin des données dans la zone Interrogation SQL, appuyez sur ENTRÉE, tapez le
mot UNION en majuscules et appuyez de nouveau sur ENTRÉE.
12.. Appuyez sur CTRL+V pour coller les informations copiées après le mot UNION.
13.. Cliquez sur OK et, lorsqu'un message vous indique que la requête ne peut pas être
représentée graphiquement, cliquez de nouveau sur OK.


"jeje" a écrit dans le message de news:

Merci pour l'information pour faire des parametres avec querry !

Par contre je crois que ma requete est un peu trop compliqué pour query:
On ne peux pas metre de parametre pour les requetes qui ne sont pas affiché
graphiquement.....(je n'ai pas essayé de l'afficher graphiquement alors que
je l'avai deja ecrite en SQL)

Ma requete est de la forme :

select 'NOMENCLATURE' as Flux,'INTOBJ' as Interface, TMEMESSAGE from
tra_message
where LANGUE = 'FR'
and tmenumber IN(
select distinct obfnerr from intobj
where trunc(obfdmaj) = trunc(sysdate)-maVariable
)
UNION
select 'FOURNISSEUR' as Flux,'INTFOURN' as Interface, TMEMESSAGE from
tra_message
where LANGUE = 'FR'
and tmenumber IN(
select distinct fofnerr from intfourn
where trunc(fofdmaj) = trunc(sysdate)-maVariable
)
UNION
etc...............................

C'est toujours possible ?





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






"jeje" a écrit dans le message de news:

Bonjour

J'ai un petit problème avec Excel :

Je récupère des données venant d'une base donnée Oracle que j'affiche sur
Excel, j'ai écrit ma requete dans Microsoft Querry qui se connecte a la base
Oracle et me renvoi les informations qui vont dans Excel.
Jusque la tout se passe bien.
Seulement maitenant, j'aimerais passer un paramètre dans cette requete, a
savoir un champ qui se trouve a coté de mon tableau ( un chiffre tout
bêtement), ceci afin que lorsque je change ce nombre, et que j'actualise ma
requete ce nombe soit pris en compte.
Mais voila, je ne rouve aucun moyen d'envoyer en paramètre une donnée a
Miscrosft Querry venant de Excel, en cherchant avec l'aide du logiciel, ils
me disent de selectionner (apres avoir fait un click droit sur le tableau)
l'option 'paramètres' mais je n'ai jamais pu selectionner cette derniere.....

Comment puis je passer cette donnée en paramètre à ma requete ?

D'avance merci pour vos précieuses réponses.
Bonne journée à tous.







Avatar
jeje
Dans la syntaxe de ta requête, tu ne peux pas remplacer ta variable (date) par
ceci [`Ma date`] ???


Non le logiciel ne permet pas d'utiliser de parametre (entre crochet)
lorsque la requête n'est pas affichable . ( et comme on ne peux plus
l'afficher après un UNION ...)

Pour ce qui est du VBA, Tu pars l'enregistrement d'une macro et tu fais
toutes les manipulations que tu as fait pour ta requête "Union" précédente".
L'enregistreur devrait te donner l'essentiel du code !


---> Excellent ! je vien de le faire , et cela ma donné quasiment tout le
code a faire !
Je teste le tout et je dirais si cela à fonctionné !
Merci bcp !



"jeje" a écrit dans le message de news:

Merci pour l'aide.

J'ai essayé la methode UNION mais .....' 13.. Cliquez sur OK et, lorsqu'un
message vous indique que la requête ne peut pas être représentée
graphiquement, cliquez de nouveau sur OK'
Donc j'ai l'UNION mais en contrepartie je ne peux plus passer de paramètre
comme je le voudrai à la base.... :s

Je suis donc dans une impasse .....

Je pense que je vais devoir me tourner vers VBA pour ce genre
requête.....mais comme je l'ai dit plus haut je ne maitrise pas du tout ce
langague.

Est il possible en VBA de faire ce genre de chose ? : (ou similaire)
String requete = [je met ma requete avec les variables]
ConnectionTo('Mabase','login', 'Mdp')
String resultat = Execution(requete)
Tableau A1:G1 = afficher(resultat)

Encore merci







| C'est toujours possible ?

C'est toi qui devrait me dire si tu as été capable ....!!!!!!!
Je n'ai jamais eu à tenter l'expérience avec ce type de requête !
Si tu réussis, faut pas être trop timide, tu afficheras les détails
de ta procédure.

| je crois que ma requete est un peu trop compliqué pour query:

Tu affiches la fenêtre MsQuery, tu sais te servir de l'aide ?
Un peu de lecteur sur les Requêtes de type "Union" pourrait t'aider.

Si tu obtiens le résultat escompté (débute par des vrais dates dans ta
requête pour tester) et lorsque cela fonctionne, tu peux définir un
critère qui ressemble à ceci :
WHERE (`Feuil1$`.`Les dates`> [`Date du début`]
Directement à partir de l'aide de MsQuery :
Combiner toutes les données provenant de deux tables
Si vous voulez associer toutes les données provenant de deux tables qui comprennent des données
similaires, mais pas identiques - telles que deux listes (tables) de clients qui contiennent
chacune des informations (champs) différentes pour chaque client, et que chaque liste comporte des
clients qui ne figurent pas dans l'autre liste - vous pouvez créer une requête qui comprend tous
les clients. Ce type de requête est appelé jointure externe totale. Obtenir des informations sur
les jointures externes totales.

1.. Dans Microsoft Query, créez une requête, puis ajoutez-lui les deux tables.
2.. Joignez un champ qui est identique dans les deux tables (par exemple, le champ Code client
de deux listes de clients) en faisant glisser le champ de la première table vers la seconde.
Sélectionnez un champ qui contient des informations pour tous les enregistrements de chaque
table. Par exemple, si deux listes de clients contiennent les mêmes champs Code client, joignez le
champ Code client.

3.. Double-cliquez sur la ligne de jointure qui relie les deux tables.
4.. Dans la boîte de dialogue Jointure, cliquez sur l'option 2, sur Ajouter, puis sur Fermer.
5.. Ajoutez tous les champs souhaités à la requête.
6.. Dans le menu Affichage, cliquez sur SQL.
7.. Sélectionnez les données de la zone Interrogation SQL, appuyez sur CTRL+C pour les copier,
puis cliquez sur OK.
8.. Double-cliquez de nouveau sur la ligne de jointure.
9.. Dans la boîte de dialogue Jointure, cliquez sur l'option 3, sur Ajouter, puis sur Fermer.
10.. Dans le menu Affichage, cliquez sur SQL.
11.. Cliquez à la fin des données dans la zone Interrogation SQL, appuyez sur ENTRÉE, tapez le
mot UNION en majuscules et appuyez de nouveau sur ENTRÉE.
12.. Appuyez sur CTRL+V pour coller les informations copiées après le mot UNION.
13.. Cliquez sur OK et, lorsqu'un message vous indique que la requête ne peut pas être
représentée graphiquement, cliquez de nouveau sur OK.


"jeje" a écrit dans le message de news:

Merci pour l'information pour faire des parametres avec querry !

Par contre je crois que ma requete est un peu trop compliqué pour query:
On ne peux pas metre de parametre pour les requetes qui ne sont pas affiché
graphiquement.....(je n'ai pas essayé de l'afficher graphiquement alors que
je l'avai deja ecrite en SQL)

Ma requete est de la forme :

select 'NOMENCLATURE' as Flux,'INTOBJ' as Interface, TMEMESSAGE from
tra_message
where LANGUE = 'FR'
and tmenumber IN(
select distinct obfnerr from intobj
where trunc(obfdmaj) = trunc(sysdate)-maVariable
)
UNION
select 'FOURNISSEUR' as Flux,'INTFOURN' as Interface, TMEMESSAGE from
tra_message
where LANGUE = 'FR'
and tmenumber IN(
select distinct fofnerr from intfourn
where trunc(fofdmaj) = trunc(sysdate)-maVariable
)
UNION
etc...............................

C'est toujours possible ?





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






"jeje" a écrit dans le message de news:

Bonjour

J'ai un petit problème avec Excel :

Je récupère des données venant d'une base donnée Oracle que j'affiche sur
Excel, j'ai écrit ma requete dans Microsoft Querry qui se connecte a la base
Oracle et me renvoi les informations qui vont dans Excel.
Jusque la tout se passe bien.
Seulement maitenant, j'aimerais passer un paramètre dans cette requete, a
savoir un champ qui se trouve a coté de mon tableau ( un chiffre tout
bêtement), ceci afin que lorsque je change ce nombre, et que j'actualise ma
requete ce nombe soit pris en compte.
Mais voila, je ne rouve aucun moyen d'envoyer en paramètre une donnée a
Miscrosft Querry venant de Excel, en cherchant avec l'aide du logiciel, ils
me disent de selectionner (apres avoir fait un click droit sur le tableau)
l'option 'paramètres' mais je n'ai jamais pu selectionner cette derniere.....

Comment puis je passer cette donnée en paramètre à ma requete ?

D'avance merci pour vos précieuses réponses.
Bonne journée à tous.












Avatar
jeje
J'ai peut etre été un peu trop vite :
J'ai fait une macro de la creation de ma requete (sans les parametre, juste
limportation des données)
Tout s'est bien passé, mais lorsque je la réexecute, j'ai un message
d'erreur qui me dit : erreur de compilation : erreur de syntaxe
Le tout en me surlignant ceci :
Array(";FBS`000;TLO=O;")), Destination:=Range("A2"))
.CommandText = Array( _
"[UnBoutDeMaRequete]" _
, _
"[UnAutreBoutDeMarequete]" _
, _
"[UnAutreBoutDeMarequete]" _
,,,,,,,,,,,,,,,,,,,,)

Alors que je n'ai touché a rien d'autre dans la macro :/
Avatar
MichDenis
La syntaxe d'une macro sur la création d'une requête via MsQuery

Un petit exemple, Tu remplaces "Requete = " par la tienne ...!

Évidemment, tu auras une autre chaine définissant le paramêtre "Connection"
puisque tu te connectes à un fichier Oracle !

'-------------------------------------------
Sub Macro1()

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")

'*****************************
Syntaxe d'une requête : Écart entre 2 dates ..début et fin (variables définies plus haut)

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








"jeje" a écrit dans le message de news:

J'ai peut etre été un peu trop vite :
J'ai fait une macro de la creation de ma requete (sans les parametre, juste
limportation des données)
Tout s'est bien passé, mais lorsque je la réexecute, j'ai un message
d'erreur qui me dit : erreur de compilation : erreur de syntaxe
Le tout en me surlignant ceci :
Array(";FBS`000;TLO=O;")), Destination:=Range("A2"))
.CommandText = Array( _
"[UnBoutDeMaRequete]" _
, _
"[UnAutreBoutDeMarequete]" _
, _
"[UnAutreBoutDeMarequete]" _
,,,,,,,,,,,,,,,,,,,,)

Alors que je n'ai touché a rien d'autre dans la macro :/
Avatar
jeje
Merci j'ai pu avancer gràce a ceci.

Ma requete s'execute normalement lorsque je met une seule table ( sans UNION
avec une autre)
Mais lorsque je met une seconde table (en rajoutant une UNION donc)
j'obtient ce message d'erreur : Erreur d'execution 13 : incompatibilité de
type

j'ai l'impression que je doit choisir entre une requete avec union ou une
requete avec des parametres ..... :s
1 2