Requete avec MS Query

  • Initiateur de la discussion jb
  • Date de début
J

jb

Guest
Salut à tous,

je suis en train de faire une requete sur une base de donnees à l'aide de MS Query et j'ai un petit problème avec un critère.

Voila le pb:
je veux attribuer à mon critère une ou plusieurs valeurs. Pour cela, SI je spécifie le critère de la façon suivante:
critère
in ('TOTO';'TATA')
ALORS la requete s'execute correctement et me renvoie bien les donnees associees a la fois a TOTO et a TATA.

OR, je desire lancer la requete a partir d'XL avec la liste 'TOTO';'TATA';... (de longueur variable) deja saisie dans une cellule; le critere faisant reference a cette cellule.
Le problème est qu'a ce moment là, la requete ne renvoie plus aucune donnee.
(je specifie alors le critere ainsi:
critere
in([liste_de_lg_variable])
)

Y a-t-il une syntaxe particuliaire pour saisir les criteres 'in' lorsqu'on leur passe les valeurs a partir d'XL ?

Si quelqu'un a compris mon pb, merci beaucoup de me repondre.

JB
 
C

Chris

Guest
Il est possible que le contenu de la cellule ne soit pas lu avec les ' qui encadrent la chaine.
Essayes de doubler le premier ' car un ' en tête de cellule est perçu comme un code de mise en forme.

Chris
 
J

jb

Guest
Tout d'abord, merci Chris de m'avoir répondu.
J'ai fait ce que tu m'as dit de faire au sujet de la ' mais malheureusement, le problème persiste.

Voici tous les essais que j'ai fait dans la cellule:
TOTO,TATA
TOTO','TATA
TOTO','TATA'
'TOTO','TATA'

TOTO;TATA
TOTO';'TATA
TOTO';'TATA'
'TOTO';'TATA'

Aucun de ces essai n'a été fructueux, alors que si je ne mets qu'une seule valeur dans la cellule (TOTO), la requête renvoie les bonnes valeurs.

Si tu vois un problème dans ce que j'ai fait ou si tu as une autre idée, ou même si quelqu'un d'autre a une idée, je suis preneur evidemment.

Encore merci et a+

JB
 
C

Chris

Guest
En fait je n'ai pas trouvé de moyen depuis msquery d'indiquer une cellule excel.
Par contre en vba ça marche :
J'ai enregistré en mode macro la manip Données, données externes, modifier la requête puis le retour à EXcel et là si je modifie le code en initialisant une variable avec le contenu de la cellule qui contient ma liste et que je fais référence à cette variable dans le code de la requête ça marche.
Cela donne :

Sub Macro1()
aa = Range("H1").Value

With Selection.QueryTable
.Connection = Array(Array( _
"ODBC;DBQ=D:\BD97.mdb;DefaultDir=D:\;Driver={Microso" _
), Array( _
"ft Access Driver (*.mdb)};DriverId=281;FIL=MS Access;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=" _
), Array("3;UID=admin;UserCommitSync=Yes;"))
.Sql = Array( _
"SELECT FACTURES.Numéro, FACTURES.Date, FACTURES.Nom, FACTURES.Montant, FACTURES.Echéance, FACTURES.`Date reglt`" & Chr(13) & "" & Chr(10) & "FROM `D:\BD97`.FACTURES FACTURES" & Chr(13) & "" & Chr(10) & "WHERE (FACTU" _
, "RES.Nom In (" & aa & "))")
.Refresh False
End With
End Sub

Il faut comme je te l'avais indiqué que la cellulle commence par deux '
J'ai tapé : ''DUBOIS','DURAND'

Voila
Chris
 
C

Chris

Guest
Re: Merci Chris !

C'est bien que la réponse t'aie été utile et que tu le dises.
Parfois on répond mais on ne sait pas si c'est le cas car le demandeur ne se manifeste plus et c'est dommage.
Chris
 
J

jb

Guest
Salut Chris,
en fait, VB me sort une 'SQL Syntax Error' de derrière les fagots quand j'exécute la macro suivante. Je t'ai copié-colé le code exact. Si tu trouves quelque chose qui cloche là-dedant, merci de me le dire. J'ai simplement ajouté à la macro enregistrée en automatique les variables 'produit', 'testeur', 'test', 'debut' et 'fin'. J'ai aussi fait référence à ces variables dans le code de la requête comme tu l'avais toi-même fait dans l'exemple que tu m'as donné.

Encore merci !


Sub Macro2()

produit = Cells(5, 3)
testeur = Cells(6, 3)
test = Cells(7, 3)
debut = Cells(8, 3)
fin = Cells(9, 3)

Range("C18").Select
With Selection.QueryTable
.Connection = _
"ODBC;DRIVER={Oracle73 Ver 2.5};UID=qsys;PWD=qsys;DBQ=par028_hes;ASY=OFF;"
.Sql = Array( _
"SELECT PRODUCT_FAILURE.TEST_DESIGNATOR, Count(*)" & chr(13) & "" & chr(10) & "FROM QSTATS2.ASSEMBLY_INFO ASSEMBLY_INFO, QSTATS2.PROCESS_STEP PROCESS_STEP, QSTATS2.PRODUCT_EVENT PRODUCT_EVENT, QSTATS2.PRODUCT_FAILURE PRODUCT_FAIL" _
, _
"URE" & chr(13) & "" & chr(10) & "WHERE PRODUCT_FAILURE.EVENT_ID = PRODUCT_EVENT.EVENT_ID AND PRODUCT_EVENT.PROCESS_STEP_ID = PROCESS_STEP.PROCESS_STEP_ID AND PRODUCT_EVENT.ASSEMBLY_ID = ASSEMBLY_INFO.ASSEMBLY_ID AND ((PRODUCT_EV" _
, _
"ENT.EVENT_TYPE='TEST') AND (ASSEMBLY_INFO.ASSEMBLY_TYPE Like " & produit & ") AND (PRODUCT_EVENT.CONTROLLER_ID In (" & testeur & ")) AND (PROCESS_STEP.PROCESS_STEP_NAME Like " & test & ") AND (PRODUCT_EVENT.EVENT_DATE_TIME>=" & debut & " And PRODUCT_E" _
, _
"VENT.EVENT_DATE_TIME<=" & fin & "))" & chr(13) & "" & chr(10) & "GROUP BY PRODUCT_FAILURE.TEST_DESIGNATOR" & chr(13) & "" & chr(10) & "ORDER BY Count(*) DESC" _
)
.Refresh False
End With
End Sub
 
J

jb

Guest
Re: Merci Chris !

Salut Chris,
en fait, VB me sort une 'SQL Syntax Error' de derrière les fagots quand j'exécute la macro suivante. Je t'ai copié-colé le code exact. Si tu trouves quelque chose qui cloche là-dedant, merci de me le dire. J'ai simplement ajouté à la macro enregistrée en automatique les variables 'produit', 'testeur', 'test', 'debut' et 'fin'. J'ai aussi fait référence à ces variables dans le code de la requête comme tu l'avais toi-même fait dans l'exemple que tu m'as donné.

Encore merci !


Sub Macro2()

produit = Cells(5, 3)
testeur = Cells(6, 3)
test = Cells(7, 3)
debut = Cells(8, 3)
fin = Cells(9, 3)

Range("C18").Select
With Selection.QueryTable
.Connection = _
"ODBC;DRIVER={Oracle73 Ver 2.5};UID=qsys;PWD=qsys;DBQ=par028_hes;ASY=OFF;"
.Sql = Array( _
"SELECT PRODUCT_FAILURE.TEST_DESIGNATOR, Count(*)" & chr(13) & "" & chr(10) & "FROM QSTATS2.ASSEMBLY_INFO ASSEMBLY_INFO, QSTATS2.PROCESS_STEP PROCESS_STEP, QSTATS2.PRODUCT_EVENT PRODUCT_EVENT, QSTATS2.PRODUCT_FAILURE PRODUCT_FAIL" _
, _
"URE" & chr(13) & "" & chr(10) & "WHERE PRODUCT_FAILURE.EVENT_ID = PRODUCT_EVENT.EVENT_ID AND PRODUCT_EVENT.PROCESS_STEP_ID = PROCESS_STEP.PROCESS_STEP_ID AND PRODUCT_EVENT.ASSEMBLY_ID = ASSEMBLY_INFO.ASSEMBLY_ID AND ((PRODUCT_EV" _
, _
"ENT.EVENT_TYPE='TEST') AND (ASSEMBLY_INFO.ASSEMBLY_TYPE Like " & produit & ") AND (PRODUCT_EVENT.CONTROLLER_ID In (" & testeur & ")) AND (PROCESS_STEP.PROCESS_STEP_NAME Like " & test & ") AND (PRODUCT_EVENT.EVENT_DATE_TIME>=" & debut & " And PRODUCT_E" _
, _
"VENT.EVENT_DATE_TIME<=" & fin & "))" & chr(13) & "" & chr(10) & "GROUP BY PRODUCT_FAILURE.TEST_DESIGNATOR" & chr(13) & "" & chr(10) & "ORDER BY Count(*) DESC" _
)
.Refresh False
End With
End Sub
 
D

Didier_LISBOA

Guest
"BONJOUR"

Voila ce que je viens de trouver sur un autre site... et avec plus de 2 ans de retard :

Where table.article.gaht ='" + Worksheets("feuil1").Range("A1") + "'"

Dans le but de faire reference à un critère présent dans une feuille de calcul.

Didier

"MERCI"
 

Statistiques des forums

Discussions
299 728
Messages
1 978 785
Membres
206 391
dernier inscrit
patcaudron62