Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel
Excel Forum d'entraide sur Excel. Vos questions sur les fonctions, formules, manipulations, et tout sujet qui ne trouve pas sa place dans un sous-forum.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2011, 18h39   #1
Invité de passage
 
Inscription : août 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 6
Points : 1
Points : 1
Par défaut Utilisation de MS Query et cellules comme variables

Bonsoir,

j'aurais besoin d'un coup de main car je galère avec MS Query (sous Excel 2007), je m'explique :

- j'ai une base de donnée M$ SQL contenant une table comportant deux colonnes : gencod et libelle.

- dans Excel j'ai une liste de gencod dans la colonne A, et je voudrais remplir la colonne B avec les libellés correspondants à ces gencods.


Jusqu'à maintenant au mieux j'arrive à avoir seulement la première ligne remplie, je n'arrive pas à remplir toutes les lignes de la colonne B. Lorsque je fais "Actualiser les données", tout s'efface et il n'y a que la première ligne qui reste.

Ce que j'ai fait :

- ouverture d'un classeur
- données > données externes > à partir d'autres sources > MS Query
- sélection de ma base de donnée déjà configurée ("Test"), validation
- Assistant Requête, Annuler
- Ouverture de MS Query automatique
- Ajout de ma table "Test" de ma base "Test"
- Bouton SQL, pour taper la requête SQL suivante :
Code :
1
2
3
SELECT Vue_Test.Gencod, Vue_Test.Libelle
FROM Pricer.dbo.Vue_Test Vue_Test
WHERE Gencod = ?
- Au moment de valider la requête, il demande de taper une valeur de paramètre (puisque j'ai mis un "?"), je laisse vide et valide.
- Clique sur le bouton pour renvoyer les données et retourner sur Excel
- Sur la fenêtre d'Importation des données, je laisse "Feuille de calcul existante =$A$1", validation.
- Sur la fenêtre "Entrer une valeur de paramètre". Je suis obligé de mettre une seule cellule, je clique donc sur A1 (=Feuil1!$A$1)
- Un tableau se crée, de deux lignes + une en-tête ayant le nom des colonnes dans ma table.

et là... je ne sais plus quoi faire.

Je colle dans la colonne A les gencod dont je veux faire la correspondance, rien ne se passe.

Je clique donc sur Actualiser Tout, il me redemande d'Entrer une valeur de paramètre. Je ne peux pas sélectionner toute la colonne A, je suis obligé de ne mettre qu'une seule cellule.
Je clique donc sur une cellule, je valide, toutes les lignes disparaissent sauf la cellule que j'ai choisi, et le libellé correspondant est bien mis à jour.

Comment faire pour que la requête s'applique sur toutes les lignes renseignées dans la colonne A ?

Merci beaucoup pour votre aide,

Yateri
Yateri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h02   #2
Membre Expert
 
Avatar de Fvandermeulen
 
Frédéric Vandermeulen
Inscription : juillet 2007
Messages : 1 730
Détails du profil
Informations personnelles :
Nom : Frédéric Vandermeulen
Âge : 36
Localisation : Belgique

Informations forums :
Inscription : juillet 2007
Messages : 1 730
Points : 2 131
Points : 2 131
Salut,

Une autre piste que de lié la table tel quelle, passer par un TCD, tu pourras alors jouer avec les champs de page pour filtrer.

A+
__________________
N'oubliez pas le si votre problème est solutionné.
Fvandermeulen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 09h16   #3
Membre Expert
 
Avatar de Daranc
 
Inscription : janvier 2007
Messages : 1 166
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 1 166
Points : 1 244
Points : 1 244
la requête va s'appliquer sur la table SQL
le tri que tu demande lui est interne à Excel
ta table est quoi ? juste un listing de code avec leur correspondance ?
si c'est le cas la requête doit rapatrier toute la table ( 2003 la table ne doit pas excéder 65536 code) et faire une recherchev sur la table ( penses à la poser ailleurs que sur ta zone de travail en $e$1 par exemple)
Code :
b2=recherchev(a2;table;2;faux)
__________________
Cordialement
Daranc
Daranc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 22h28   #4
Invité de passage
 
Inscription : août 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 6
Points : 1
Points : 1
Merci pour vos réponses.

Je ne veux pas rapatrier toute la table SQL car on parle de plusieurs centaines de milliers de lignes, donc exit la solution du TCD ou de la RECHERCHEV...
Sinon pour faire simple j'aurais tapé ma requête dans SQL Studio Management et copié le résultat.

Je voudrais simplement que la requête se répète autant de fois qu'il y a de lignes à remplir dans la colonne B, avec comme variable le contenu de la cellule d'à côté (colonne A).

Grosso modo on pourra imaginer une formule comme ça pour imager :

- A -|- B -
123 | =REQUETE_SQL(maBDD;"SELECT Libelle FROM maTABLE WHERE Gencod = A1";FAUX)
456 | =REQUETE_SQL(maBDD;"SELECT Libelle FROM maTABLE WHERE Gencod = A2";FAUX)
789 | =REQUETE_SQL(maBDD;"SELECT Libelle FROM maTABLE WHERE Gencod = A3";FAUX)


J'ai vu passer un fichier Excel il y a quelques années qui faisait ça (pas comme je viens d'imager mais avec MS QUERY dans Excel et la selection d'une variable) mais impossible de le reproduire, pourtant je suis sûr de ne pas être loin.

Yat'
Yateri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 09h32   #5
Membre Expert
 
Avatar de Daranc
 
Inscription : janvier 2007
Messages : 1 166
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 1 166
Points : 1 244
Points : 1 244
Par défaut ms querry

essayes d'enregistrer une macro en créant ta requête
le filtre sera écrit dans le code enregistré
par exemple un date de debut et une de fin
tu aura dans le sql écrit dans la macro les date qui apparaitront (un format spécial sql )
tu repères deux cellules qui vont te servir de butoir dans lesquelles tu entreras les dates. tu fait une moise en forme en entrée de procedure
du type
Code :
1
2
fin$ = "{ts '" & Range("r22").Value & "'}"
debut$ = "{ts '" & Range("r21").Value & "'}"
et tu remplaces dans le code lcomme sur l'exemple
Code :
  AND (RELEVE.DATE_DECL>=" & debut$ & "  And RELEVE.DATE_DECL<=" & fin$ & ")"
pour les critères where
__________________
Cordialement
Daranc
Daranc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h00.


 
 
 
 
Partenaires

Hébergement Web