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.