Requete MSQUERY dans Excel, prb de critères

Requete MSQUERY dans Excel, prb de critères - SQL/NoSQL - Programmation

Marsh Posté le 15-04-2004 à 13:17:16    

Bonjour,
 
Je réalise un document XLS, dans le lequel j'extrait des données d'une base SQL, via des requetes MSQUERY.
Jusque la, tout marche bien.
Aucun soucis.
 
Seul petit problème, je voudrais dans ma requete MSQUERY, faire référence au contenu d'une cellule de mon fichier excel original en temps que valeur d'un critère de recherche.
 
Exemple :
 
... WHERE table.article.gaht=[CELLULE A3]
et je ne sais pas comment arriver à résultat ?
 
Si quelqu'un peut m'aider,
vous l'aurez sans doute compris je suis débutant dans cette activité.
 
Vous remerciant pas avance de vos réponses,

Reply

Marsh Posté le 15-04-2004 à 13:17:16   

Reply

Marsh Posté le 16-04-2004 à 14:25:56    

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

Reply

Marsh Posté le 16-04-2004 à 20:36:01    

Tout d'abord MERCI pour la réponse, mais ce qui me gène c'est le Worksheets("feuil1" ). Car en effet cette requete SQL sera copié d'une feuille sur l'autre dans un classeur, chaque feuille aura un nom différent biensur.. et je ne voudrais avoir à récoder le nom de la feuille en DUR dans la requete à chaque fois.. y a t'il une sollution ?
 

Reply

Marsh Posté le 19-04-2004 à 11:05:10    

Je ne comprends pas bien ce que tu veux faire.
Mais si tu ne veux pas le Worksheets("feuil1" ) enlèves-le autrement remplaces le par une variable : Worksheets("feuil" & a).Range("A1" )
Moi je cherche à extraire des données sql pour les mettre ds un tableau virtuel et c'est la que je bloque, peux-tu m'écrire le code de ta connexion Sql et de tes requêtes?
A+

Reply

Marsh Posté le 19-04-2004 à 15:44:00    

aubonmicro a écrit :

Tout d'abord MERCI pour la réponse, mais ce qui me gène c'est le Worksheets("feuil1" ). Car en effet cette requete SQL sera copié d'une feuille sur l'autre dans un classeur, chaque feuille aura un nom différent biensur.. et je ne voudrais avoir à récoder le nom de la feuille en DUR dans la requete à chaque fois.. y a t'il une sollution ?


Si c'est seulement Worksheets("feuil1" ) qui te dérange, tu peux le remplacer par Worksheets(Me.Name).

Reply

Marsh Posté le 21-04-2004 à 10:13:23    

Merci Agagax, en méttant Me.Name, si j'ai bien compris, cela prendra comme nom de feuille, le nom de la feuille active dans la laquelle est placée la requete SQL ?

Reply

Marsh Posté le 21-04-2004 à 19:03:38    

Oui c'est bien ça. 'Me' reférence la feuille active.

Reply

Marsh Posté le 21-04-2004 à 21:49:20    

J'ai testé, mais dans MSQUERY je ne m'en sors pas.. j'édite la requete SQL, et il me dit toujours erreur de syntaxe ou alors que les ' sont mal placés... grr..

Reply

Marsh Posté le 26-04-2004 à 12:26:54    

bonjour,
 
une solution serait de passer par une macro.
tu ouvres une nouvelle feuille,
tu lances l'enregistreur de macro,
tu fais ta requete (donnes externes, msquery), tout le tralala en mettant une valeur fixe :
 pour WHERE table.article.gaht=[CELLULE A3]  
 tu mettras WHERE table.article.gaht=26 par exemple
tu fermes l'assistant msquery,
tu arretes l'enregistreur de macro.
 
dans l'éditeur de macro, tu remplace le 26 par la référence de la cellule qui va bien, en faisant attention à la syntaxe.
 
qu'en penses-tu ?
 
bon courage.


Message édité par dalcap le 26-04-2004 à 12:27:33
Reply

Marsh Posté le 26-04-2004 à 15:31:07    

Re, sachant que ma feuille excel s'appele LOT200 et que le paramètres est dans la cellule B3 de cette même feuille, suivant vos conseils, j'ai édité la requete dans MSQUERY, et j'ai mis :
 
SELECT ARTICLE.GA_ARTICLE, ARTICLE.GA_CODEARTICLE, ARTICLE.GA_LIBELLE, ARTICLE.GA_LIBCOMPL, LIGNE.GL_MONTANTHT, LIGNE.GL_PMAP, ARTICLE.GA_PVTTC, ARTICLE.GA_CHARLIBRE2, LIGNE.GL_CODEARTICLE, LIGNE.GL_QTEFACT, LIGNE.GL_NATUREPIECEG, LIGNE.GL_DEPOT
FROM DB000000.dbo.ARTICLE ARTICLE, DB000000.dbo.LIGNE LIGNE
WHERE LIGNE.GL_CODEARTICLE = ARTICLE.GA_CODEARTICLE AND ((ARTICLE.GA_CHARLIBRE2='  " + Worksheets("LOT200" ).Range("B3" ) + " ') AND (LIGNE.GL_NATUREPIECEG='BLF') AND (LIGNE.GL_DEPOT='902'))
 
Le résultat... RIEN.
pas d'erreur, mais rien ne sort, quelque soit ce que je puisse mettre dans la cellule B3 de la feuille excel LOT200
 
Il ne doit pas y avoir grand chose je pense.. j'attends donc le petit bout de solution qui me manque..
 
Merci d'avance.

Reply

Marsh Posté le 26-04-2004 à 15:31:07   

Reply

Marsh Posté le 26-04-2004 à 16:05:12    

un petit bout de solut ion :??:
heu,
 
tu colles toute ta requete dans une variable et tu l'affiches pour voir s'il a bien remplacé  

Code :
  1. ARTICLE.GA_CHARLIBRE2='  " + Worksheets("LOT200" ).Range("B3" ) + " '


par la valeur que tu attendais.
 
sinon, s'il te sors un truc style ARTICLE.GA_CHARLIBRE2= ' ' (blanc, rien, nada) et bien, c'est normale qu'il ne ressorte rien.

Reply

Marsh Posté le 26-04-2004 à 16:30:10    

En effet dans ce cas il ne renvoie RIEN.. comme si il ne prennait pas en compte la formule '  " + Worksheets("LOT200" ).Range("B3" ) + " ' , mais la CHAINE DE CARRACTERE '  " + Worksheets("LOT200" ).Range("B3" ) + " '  
 
Un soucis dans le placement des ' et des " ?

Reply

Marsh Posté le 26-04-2004 à 16:54:42    

AuBonMicro a écrit :


Un soucis dans le placement des ' et des " ?


 
c'est probable
essaye cela
 
"WHERE ARTICLE.GA_CHARLIBRE2=" & Worksheets("LOT200" ).Range("B3" ) & "le reste de tes critères "
 
a) la concaténation d'une chaîne de caractères avec & dans VB
b) fermer une chaine avec "


Message édité par dalcap le 26-04-2004 à 16:56:10
Reply

Marsh Posté le 26-04-2004 à 17:03:22    

Désolé d'insister.. le code SQL complet que j'ai indiqué plus donne donc :
 
SELECT ARTICLE.GA_ARTICLE, ARTICLE.GA_CODEARTICLE, ARTICLE.GA_LIBELLE, ARTICLE.GA_LIBCOMPL, LIGNE.GL_MONTANTHT, LIGNE.GL_PMAP, ARTICLE.GA_PVTTC, ARTICLE.GA_CHARLIBRE2, LIGNE.GL_CODEARTICLE, LIGNE.GL_QTEFACT, LIGNE.GL_NATUREPIECEG, LIGNE.GL_DEPOT  
FROM DB000000.dbo.ARTICLE ARTICLE, DB000000.dbo.LIGNE LIGNE  
WHERE LIGNE.GL_CODEARTICLE = ARTICLE.GA_CODEARTICLE AND ((ARTICLE.GA_CHARLIBRE2=" + Worksheets("LOT200" ).Range("B3" ) + " ) AND (LIGNE.GL_NATUREPIECEG='BLF') AND (LIGNE.GL_DEPOT='902'))
 
??

Reply

Marsh Posté le 26-04-2004 à 17:05:21    

bah, désolé d'insister aussi, mais, ...
peux tu essayer avec des & à la place des +  ?
 
c bizarre, mon excel me crie "incompatibilité de type" chez moi;
toi, tu peux ?


Message édité par dalcap le 26-04-2004 à 17:05:37
Reply

Marsh Posté le 28-04-2004 à 09:17:56    

alors, ça marche ?

Reply

Marsh Posté le 02-06-2004 à 16:48:12    

Non ca marche pas, j'ai essayé avec des + mais aussi des &
 
SELECT ARTICLE.GA_CODEARTICLE, ARTICLE.GA_LIBELLE, ARTICLE.GA_LIBCOMPL, Sum(LIGNE.GL_QTEFACT) , Sum(LIGNE.GL_MONTANTHT), LIGNE.GL_PMAP, ARTICLE.GA_PVTTC, ARTICLE.GA_CHARLIBRE2  FROM DB000000.dbo.ARTICLE ARTICLE, DB000000.dbo.LIGNE LIGNE  WHERE LIGNE.GL_CODEARTICLE = ARTICLE.GA_CODEARTICLE AND ((ARTICLE.GA_CHARLIBRE2='" & Worksheets('LOT').Range('A3') & "')  AND (LIGNE.GL_NATUREPIECEG='BLF') AND (LIGNE.GL_DEPOT='902'))  GROUP BY ARTICLE.GA_ARTICLE, ARTICLE.GA_CODEARTICLE, ARTICLE.GA_LIBELLE, ARTICLE.GA_LIBCOMPL, LIGNE.GL_PMAP, ARTICLE.GA_PVTTC, ARTICLE.GA_CHARLIBRE2 ORDER BY GA_CODEARTICLE
 
Il me dis toujours que la requete est incorrect et qu'elle ne peut pas être préparée...
 
je craque..
 
Une autre idée ?

Reply

Marsh Posté le 02-06-2004 à 17:53:05    

heu ???
1) essayer d'abord avec une requete simple avec une seule table, sans where ?
2) ajouter 1 where (1 seul)
3) remplacer ta clause where par un where quelquechose =" & worsheet_machin  
 
P.S.: les tables avec des points ('.') dedans, c'est normal ?
c'est quelque chose que je n'avais pas vu, mais qui me tracasse, là, tu pourrais me dire ?
 
bon courage

Reply

Marsh Posté le 07-10-2004 à 15:59:04    

Oui, c'est normale.
Article.piece
 
C'est Table Article et champs piece.

Reply

Marsh Posté le 07-10-2004 à 18:18:41    

AuBonMicro a écrit :

Oui, c'est normale.
Article.piece
 
C'est Table Article et champs piece.


 
heu... t'es encore là dessus...  :ouch:  
 
c'est plutôt à cela que je faisais allusion :
 

AuBonMicro a écrit :

Non ca marche pas, j'ai essayé avec des + mais aussi des &
<...>
FROM DB000000.dbo.ARTICLE ARTICLE, DB000000.dbo.LIGNE LIGNE  WHERE LIGNE.GL_CODEARTICLE  
<....>


où là, il me semble qu'il s'agirait plutôt de nom de tables, non ???
 
Sinon, tu en es où ? t'as réussi à faire ce que tu voulais ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed