TOP

Requête SQL utilisant VBA Excel

YouLibreCalc for Excel logo

Description

Il existe de nombreuses façons d'obtenir des données provenant de sources externes dans une feuille de calcul Excel . Dans cet article, nous verrons comment interroger les données d'un fichier de base de données MS Access et à partir d'un fichier Excel en utilisant SQL dans VBA . Ouais, nous allons mélanger un peu SQL avec VBA ! Et c'est mieux que vous ne le pensez !

SQL représente Structured Query Language (langage de requête structuré) et est un langage utilisé pour récupérer des informations à partir de bases de données (telles que MS Access, MS SQL Server, Oracle, Sybase, SAP, MySQL et d'autres).

Vous pouvez également obtenir des données depuis Internet, des fichiers texte ou d'autres Excel ou CSV des dossiers.


1. Requête SQL de Excel VBA vers le fichier MS Access

Nous avons donc besoin d'une connexion à une base de données (variable varConn dans la macro ci-dessous) et requête SQL (variable varSQL ) pour automatiser la récupération des données de la base de données pour le rapport. Dans l'exemple ci-dessous, il y a requête SQL , qui reçoit les données d'une petite base de données dans MS Access.

Cliquez sur charger la base de données MS Access (test.mdb) .

Le fichier MS Access ressemblera à ceci :

Écrivons notre macro qui s'exécutera requête SQL .

Ouvrir le menu Service - Macro - Editeur Visual Basic , insérez le nouveau module (menu Insert - Module ) et copiez-y le texte de la macro :

Sub SQLQuery_1()
'moonexcel.com.ua
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Access Driver (*.mdb, *.accdb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

Cliquez sur Enregistrer et revenez à Excel. Choisissez dans le menu Affichage - Macros (Alt+F8) le nom de notre macro " SQLQuery_1 ". Une boîte de dialogue apparaîtra, appuyez dessus Base de données... , recherchez notre fichier Access et cliquez sur ОК .

Nous pouvons maintenant voir que notre requête macro a extrait les colonnes Month , Product et City de la table Sumproduct de la base de données test.mdb pour déposer Excel.

2. Requête SQL de VBA vers le fichier fermé Excel

De même, nous pouvons obtenir des données à partir d'un fichier Excel classique comme si elles provenaient d'une base de données. Pour cela, le code de notre macro doit être légèrement réécrit et le pilote de connexion modifié d'Access à Excel.

Nous exportons le tableau Sumproduct depuis Access dans Excel et enregistrez le fichier. Ensuite, nous insérons notre code modifié dans un nouveau module et exécutons la macro :

Sub SQLQuery_2()
'moonexcel.com.ua
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

Une fenêtre apparaîtra dans laquelle nous pourrons sélectionner notre fichier Excel (doit s'appeler Sumproduct.xlsx ou avec une autre extension). Nous le trouvons et le sélectionnons. Pressons ОК , et nous obtenons les mêmes données que celles du fichier Access.

Articles sur le sujet :