Intégrer des données provenant de différentes sources (CSV et SQL) dans une seule feuille, Excel VBA
Scénario :
Supposons que nous souhaitions intégrer des données provenant de deux sources différentes :
1. Un fichier CSV contenant des données de ventes.
2. Une base de données SQL contenant des informations sur les clients.
Nous voulons intégrer ces données dans une feuille de calcul Excel, en associant les informations des clients aux données de vente via un identifiant commun CustomerID
.
Étapes :
1. Ouvrir Excel et créer un nouveau module VBA.
2. Importer les données de ventes depuis un fichier CSV.
3. Récupérer les données des clients depuis une base de données SQL.
4. Associer les données de ventes avec les données des clients en utilisant le CustomerID
.
5. Écrire les données intégrées dans une nouvelle feuille.
6. Gérer les erreurs et s’assurer que les données sont correctement formatées.
Code VBA :
Sub IntegrerDonnees() ' Déclarer les variables nécessaires Dim wsVentes As Worksheet Dim wsClients As Worksheet Dim wsSortie As Worksheet Dim plageVentes As Range Dim plageClients As Range Dim derniereLigneVentes As Long Dim derniereLigneClients As Long Dim connexionDb As Object Dim rs As Object Dim requete As String Dim i As Long, j As Long ' Créer une nouvelle feuille pour les résultats Set wsSortie = ThisWorkbook.Worksheets.Add wsSortie.Name = "Données Intégrées" ' Étape 1 : Importer les données de ventes depuis le fichier CSV Workbooks.Open Filename:="C:\Chemin\Vers\DonneesVentes.csv" Set wsVentes = ActiveSheet derniereLigneVentes = wsVentes.Cells(wsVentes.Rows.Count, 1).End(xlUp).Row Set plageVentes = wsVentes.Range("A2:F" & derniereLigneVentes) ' Supposons que les données commencent à la ligne 2 ' Copier les données de ventes dans la feuille de résultats wsVentes.Range("A1:F1").Copy Destination:=wsSortie.Range("A1") plageVentes.Copy Destination:=wsSortie.Range("A2") ' Fermer le fichier CSV Workbooks("DonneesVentes.csv").Close SaveChanges:=False ' Étape 2 : Récupérer les données des clients depuis la base de données SQL Set connexionDb = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") ' Chaîne de connexion pour la base de données SQL (à ajuster selon vos détails DB) connexionDb.Open "Provider=SQLOLEDB;Data Source=VotreServeur;Initial Catalog=VotreBaseDeDonnees;User ID=VotreUserID;Password=VotrePassword" ' Requête SQL pour récupérer les données des clients requete = "SELECT CustomerID, CustomerName, CustomerEmail FROM Customers" rs.Open requete, connexionDb ' Écrire les données des clients dans la feuille de résultats à partir de la colonne G wsSortie.Cells(1, 7).Value = "CustomerID" wsSortie.Cells(1, 8).Value = "CustomerName" wsSortie.Cells(1, 9).Value = "CustomerEmail" i = 2 ' Commencer à écrire les données des clients à partir de la ligne 2 Do While Not rs.EOF wsSortie.Cells(i, 7).Value = rs.Fields("CustomerID").Value wsSortie.Cells(i, 8).Value = rs.Fields("CustomerName").Value wsSortie.Cells(i, 9).Value = rs.Fields("CustomerEmail").Value rs.MoveNext i = i + 1 Loop ' Fermer l'enregistrement et la connexion à la base de données rs.Close connexionDb.Close ' Étape 3 : Associer les données de ventes avec les données des clients en fonction du CustomerID derniereLigneClients = wsSortie.Cells(wsSortie.Rows.Count, 7).End(xlUp).Row ' Boucle pour associer les données de ventes avec les données des clients For i = 2 To derniereLigneVentes For j = 2 To derniereLigneClients If wsSortie.Cells(i, 1).Value = wsSortie.Cells(j, 7).Value Then wsSortie.Cells(i, 10).Value = wsSortie.Cells(j, 8).Value ' Nom du client wsSortie.Cells(i, 11).Value = wsSortie.Cells(j, 9).Value ' Email du client Exit For End If Next j Next i ' Étape 4 : Formater et nettoyer wsSortie.Columns("A:K").AutoFit wsSortie.Rows(1).Font.Bold = True wsSortie.Rows(1).Interior.Color = RGB(200, 200, 255) MsgBox "L'intégration des données est terminée !", vbInformation End Sub
Explication :
1. Création de la feuille de résultats : Nous commençons par créer une nouvelle feuille appelée « Données Intégrées » pour stocker les données fusionnées.
2. Importation des données de ventes : Le fichier CSV contenant les données de ventes est ouvert et les données sont copiées dans la feuille de résultats. Les données sont supposées commencer à partir de la cellule A1, avec les en-têtes dans la ligne 1.
3. Récupération des données des clients depuis SQL : À l’aide d’ADO (ActiveX Data Objects), nous nous connectons à une base de données SQL, exécutons une requête pour récupérer les données des clients, puis les insérons dans la feuille de résultats à partir de la colonne G.
4. Association des données de ventes et des données des clients : Nous parcourons les données de ventes et les associons aux données des clients via le CustomerID
. Si une correspondance est trouvée, nous écrivons le nom et l’email du client à côté des données de vente.
5. Formatage des résultats : Les colonnes sont redimensionnées automatiquement et les en-têtes sont mis en gras avec une couleur de fond pour plus de clarté.
Résultat :
La feuille de résultats contiendra les données suivantes :
- Colonnes A à F : Données de ventes (provenant du fichier CSV).
- Colonnes G à I : Données des clients (provenant de SQL).
- Colonnes J à K : Détails du client correspondants à chaque vente.
Conclusion :
Cette solution montre comment intégrer des données provenant de différentes sources (CSV et SQL) dans une seule feuille Excel. L’automatisation via VBA rend ce processus plus rapide et plus efficace. Vous pouvez adapter cette solution pour inclure d’autres sources de données (comme des API ou d’autres formats de fichiers) et l’étendre selon vos besoins.