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
- Se connecter à la base de données.
- Exécuter une requête SQL.
- Récupérer les résultats dans une feuille Excel.
- 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
- 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).
- 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.
- 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).
- 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.
- 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.
- 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.