<!--
  canonical-url: https://www.avonture.be/fr/blog/vba-excel-sql-server
  published:     2024-04-05
  This is a static plain-Markdown mirror generated at build time.
  Visit the canonical URL above for the fully rendered page, with images and interactive components.
-->

# MS Excel - Se connecter à une base de données SQL Server, exécuter une requête et récupérer les résultats

> Connectez MS Excel à SQL Server avec VBA. Exécutez des requêtes SQL, injectez les résultats directement dans votre feuille de calcul et conservez la mise en forme. Découvrez la meilleure méthode pour rafraîchir les données ou les partager en toute sécurité.

---
![MS Excel - Se connecter à une base de données SQL Server, exécuter une requête et récupérer les résultats](/img/v2/mssql.webp)

**TL;DR**

Cet article renvoie vers le projet GitHub `vba_excel_sql` de l'auteur, qui fournit du code VBA pour exécuter une requête SQL sur une base de données SQL Server directement depuis Excel et injecter les résultats dans une feuille tout en conservant sa mise en forme. Deux méthodes d'injection sont proposées : `AddQueryTable` (garde la connexion active pour un rafraîchissement en un clic) et `CopyToSheet` (supprime la connexion et les identifiants, plus sûr pour le partage).

> **Information:**
>
> Lisez plutôt mon nouvel article [MS Excel - Connect to a SQL Server database, run a query and get the results - Step by step](/blog/vba-excel-sql-server-part-2), bien plus complet que celui-ci.

Imaginez que vous puissiez exécuter une requête comme `SELECT customer_id, first_name, last_name, email FROM customers ORDER BY last_name ASC;` dans votre feuille Excel et qu'Excel se connecte à votre [base de données Microsoft SQL Server](/blog/docker-mssql-server), y exécute la requête, récupère le résultat et place les données directement dans votre feuille. Sympa, non ?

Imaginez que votre feuille ait déjà une belle mise en page avec des couleurs, des titres avec filtres activés et, par exemple, un nom (comme `rngMyCustomers`). Ce serait bien que les données mises à jour conservent toute la mise en page et étendent simplement la plage nommée, non ?

Arrêtez d'imaginer, c'est vraiment très simple !

Il y a des années, j'ai publié <https://github.com/cavo789/vba_excel_sql> pour ça.

Vous trouverez dans mon repository GitHub toutes les explications pour y arriver, c'est-à-dire un code VBA à ajouter dans votre fichier Excel ([accès rapide](https://github.com/cavo789/vba_excel_sql/blob/master/src/SQL2Excel.xlsm/clsData.cls)) et une [démo](https://github.com/cavo789/vba_excel_sql/blob/master/src/SQL2Excel.xlsm/test.bas).

Cette fois, je ne vais pas réécrire toute l'explication sous forme d'article parce que tout est déjà listé sur GitHub ; suivez ce lien : <https://github.com/cavo789/vba_excel_sql>

> **AddQueryTable ou CopyToSheet:**
>
> Vous verrez qu'il y a deux méthodes : `AddQueryTable` et `CopyToSheet`. Avec la première, les données sont injectées dans votre feuille Excel sous forme de *query table*, ce qui offre d'énormes possibilités, comme celle de relancer la requête. Autrement dit, la prochaine fois, il suffit de faire un clic droit sur votre tableau et de choisir `Refresh` dans le menu contextuel : hop, la requête est réexécutée sur SQL Server et vous obtenez la mise à jour en quelques secondes.
>
> Avec `CopyToSheet`, vous perdez la connectivité : la feuille peut être envoyée à quelqu'un d'autre sans risque. Les identifiants nécessaires pour se connecter au serveur ne sont pas conservés dans la feuille, contrairement à la méthode `AddQueryTable`.
