Mon commentaire ci-dessus visait simplement à ouvrir quelques possibilités que vous pourriez avoir sous la main.
PowerQuery est un plug-in gratuit pour Office 2013. Dans Office 2016, il fait partie d'Excel et n'est plus un plug-in.
Quoi qu'il en soit, vous semblez préférer l'approche consistant à utiliser une table temporaire ou une variable de table sur votre SQL. Par conséquent, je vais développer un peu plus cette approche :
Au final, vous voudrez une requête similaire à celle-ci :
set nocount on;
declare @tblVAT table
(
Country nvarchar(50),
VAT decimal(9, 7)
);
insert into @tblVAT
(Country, VAT)
values (N'Germany', 0.19),
(N'Frence', 0.20),
(N'Spain', 0.21);
select tc.Name,
tc.ID,
case when tc.Country is null then tv.Country
else tc.Country
end as Country,
tv.VAT
from dbo.tblCustomers as tc
full outer join @tblVAT as tv
on tv.Country = tc.Country;
Notez l'importance de set nocount on;
au début de la requête SQL ci-dessus. Sans cela, cela ne fonctionnera pas !
Une fois que vous avez cette requête, vous pouvez simplement la coller dans Excel en utilisant le menu Data
► Get External Data
► From SQL Server
. Dans une première étape, vous obtiendrez la table des clients, puis dans une deuxième étape, vous affinerez la requête pour inclure la variable de table comme décrit ci-dessus. Voici un petit résumé visuel :
Je suppose qu'à ce stade, les seules questions restantes sont :
- Comment créer dynamiquement l'instruction SQL ci-dessus et
- comment obtenez-vous le tableau ci-dessus dans Excel puis mis à jour avec cette instruction SQL mise à jour.
Pour créer dynamiquement le SQL ci-dessus, vous pouvez consulter ce qui suit :Utilisation d'un tableau ou d'un dictionnaire comme clause from dans sql dans excel vba
Pas plus tard qu'hier, j'ai répondu à une question similaire dans laquelle un utilisateur souhaitait transmettre le contenu d'une feuille Excel en tant que tableau créé dynamiquement à un serveur SQL. Vous pouvez facilement l'adapter (ou même l'utiliser tel quel) à votre objectif.
Pour la dernière étape (mettre à jour ce tableau dans Excel avec cette nouvelle requête SQL), vous pouvez utiliser l'enregistreur de macros et faire ce que j'ai fait dans la capture d'écran ci-dessus. Le code créé automatiquement n'est ni plus ni moins que ce que je vous proposerais.
Donc, voilà. Faites-moi savoir si je n'ai pas été assez clair ou si vous avez besoin de plus de détails pour comprendre cette solution.