Automatiser les processus d’interrogation des bases de données, Excel VBA

Automatiser l’interrogation des bases de données à l’aide de VBA dans Excel permet de gagner du temps et d’éviter les erreurs manuelles. L’objectif ici est d’interroger une base de données à l’aide de SQL, d’exécuter la requête, puis de récupérer les résultats dans une feuille Excel.

Je vais vous fournir un exemple détaillé de code VBA qui se connecte à une base de données SQL (comme SQL Server, MySQL, ou Access) et récupère des données dans une feuille Excel. Nous allons utiliser ADO (ActiveX Data Objects) pour la connexion à la base de données.

Étapes de l’exemple

  1. Se connecter à la base de données.
  2. Exécuter une requête SQL.
  3. Récupérer les résultats dans une feuille Excel.
  4. Gérer les erreurs.

Code VBA détaillé

Sub InterrogerBaseDeDonnees()
    ' Déclarations des variables
    Dim Conn As Object ' Objet de connexion à la base de données
    Dim Rs As Object ' Objet Recordset pour stocker les résultats de la requête
    Dim StrSQL As String ' Requête SQL à exécuter
    Dim Ligne As Long ' Variable pour déterminer la ligne dans Excel où coller les résultats
    Dim ConnString As String ' Chaîne de connexion pour la base de données
    ' Chaîne de connexion (pour une base SQL Server)
    ConnString = "Provider=SQLOLEDB;Data Source=NomServeur;Initial Catalog=NomBaseDeDonnees;User ID=NomUtilisateur;Password=MotDePasse"
    ' Création de l'objet de connexion ADO
    Set Conn = CreateObject("ADODB.Connection")
    Set Rs = CreateObject("ADODB.Recordset")
    ' Tentative de connexion à la base de données
    On Error GoTo ErreurConnexion
    Conn.Open ConnString
    On Error GoTo 0 ' Réinitialiser la gestion d'erreurs
    ' Définir la requête SQL
    StrSQL = "SELECT * FROM MaTable" ' Remplacer par votre propre requête SQL
    ' Exécuter la requête
    Rs.Open StrSQL, Conn
    ' Vérifier si des résultats ont été retournés
    If Not Rs.EOF Then
        ' Commencer à coller les résultats à partir de la première ligne
        Ligne = 2 ' Commencer à la ligne 2 (en supposant que la ligne 1 contient les en-têtes)
        ' Boucle pour copier les résultats du Recordset dans la feuille Excel
        Do While Not Rs.EOF
            ' Remplir chaque cellule dans la ligne
            For i = 0 To Rs.Fields.Count - 1
                Sheets("Feuille1").Cells(Ligne, i + 1).Value = Rs.Fields(i).Value
            Next i
            Ligne = Ligne + 1 ' Passer à la ligne suivante
            Rs.MoveNext ' Passer à l'enregistrement suivant
        Loop
    Else
        MsgBox "Aucun résultat trouvé", vbInformation
    End If
    ' Fermer le Recordset et la connexion
    Rs.Close
    Conn.Close
    ' Libérer les objets
    Set Rs = Nothing
    Set Conn = Nothing
    MsgBox "Données récupérées avec succès!", vbInformation
    Exit Sub
ErreurConnexion:
    MsgBox "Erreur de connexion à la base de données: " & Err.Description, vbCritical
    Set Rs = Nothing
    Set Conn = Nothing
End Sub

Explication du Code

  1. Variables déclarées :
    • Conn : Un objet qui représente la connexion à la base de données.
    • Rs : Un objet Recordset qui stocke les résultats de la requête SQL.
    • StrSQL : La requête SQL à exécuter.
    • Ligne : La ligne où les résultats seront collés dans la feuille Excel.
    • ConnString : La chaîne de connexion à la base de données, qui contient les informations nécessaires pour se connecter (serveur, base de données, identifiants).
  2. Connexion à la base de données :
    • Nous utilisons CreateObject(« ADODB.Connection ») pour créer un objet de connexion.
    • Nous utilisons Conn.Open ConnString pour établir la connexion à la base de données à l’aide de la chaîne de connexion fournie.
  3. Exécution de la requête SQL :
    • La requête SQL est définie dans la variable StrSQL. Vous pouvez personnaliser cette requête en fonction des données que vous souhaitez interroger dans la base de données.
    • Rs.Open StrSQL, Conn exécute la requête SQL et récupère les résultats dans le Recordset (Rs).
  4. Traitement des résultats dans Excel :
    • Si des résultats sont retournés (c’est-à-dire que le Recordset n’est pas vide), le code boucle sur chaque enregistrement et copie les valeurs dans les cellules de la feuille Excel, à partir de la ligne 2 (pour laisser la ligne 1 pour les en-têtes).
    • Les colonnes sont itérées et les valeurs sont insérées dans les cellules correspondantes.
  5. Fermeture de la connexion :
    • Après avoir récupéré les données, nous fermons le Recordset et la connexion à la base de données avec Rs.Close et Conn.Close.
    • Nous libérons également les objets Recordset et Connection pour éviter les fuites de mémoire.
  6. Gestion des erreurs :
    • Un gestionnaire d’erreurs (On Error GoTo ErreurConnexion) est utilisé pour capturer toute erreur de connexion à la base de données, et un message d’erreur est affiché si la connexion échoue.

Personnalisation

  • Chaîne de connexion : Adaptez la chaîne de connexion (ConnString) en fonction de votre type de base de données. Par exemple, pour MySQL, vous devrez peut-être utiliser le provider MySQL OLE DB.
  • Requête SQL : Changez la requête SQL (StrSQL) pour correspondre aux données que vous voulez interroger. Par exemple, vous pouvez ajouter des filtres ou sélectionner des colonnes spécifiques.
  • Nom de la feuille : Assurez-vous que le nom de la feuille (Feuille1) est correct ou adaptez-le selon vos besoins.

Conclusion

Ce code VBA est une base solide pour automatiser l’interrogation d’une base de données et l’importation des résultats dans Excel. Il peut être facilement personnalisé pour répondre à des besoins spécifiques, tels que l’ajout de filtres à la requête SQL, l’enregistrement automatique dans un fichier ou l’ajout de fonctionnalités avancées comme l’exportation de données.

S’abonner
Notifier de
0 Commentaires
le plus ancien
le plus récent le plus populaire
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x