Intégrer des données provenant de différentes sources (CSV et SQL) dans une seule feuille, Excel VBA

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.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x