Introduction
Je vous propose une petite procédure qui importe le résultat d’une requête faite sur une base de données Access dans une feuille Excel.
Cette requête est exécutée par une fonction nommée QueryAccess qui renvoie une table contenant le résultat d’une requête faite sur une base de données Access.
Les arguments utilisés dans la fonction
dbFullName de type String, contient le chemin complet + le nom de la base de données.
SqlQuery de type String, contient la requête SQL.
[WithLabel] de type booléen, argument facultatif, True ou omis renvoie les étiquettes de colonnes
Le code de la procédure
Function QueryAccess(dbFullName As String, SqlQuery As String, Optional WithLabel As Boolean = True) ' Philippe Tulliez ' v 2.0 - 11/01/14 ' Ajouté argument optionnel WithLabel ' Nécessite de référencer Microsoft DAO x.x ObjectLibrary ' Arguments ' dbFullName ' Chemin + nom du fichier ' SqlQuery ' Chaîne de caractères contenant la requête SQL ' [WithLabel] ' True ou Omis renvoie les étiquettes de colonnes ' ' Variables - Déclaration et affectation des valeurs Dim db As DAO.Database, Rs As DAO.Recordset Dim myTable(), count As Long, Elem As Integer Set db = Workspaces(0).OpenDatabase(dbFullName, ReadOnly:=True) Set Rs = db.OpenRecordset(SqlQuery) ' Lecture des enregistrements de la requête While Not Rs.EOF ReDim Preserve myTable(Rs.Fields.count, count) If count = 0 And WithLabel Then For Elem = 0 To Rs.Fields.count - 1: myTable(Elem, count) = Rs(Elem).SourceField: Next ' Etiquettes de colonnes count = count + 1: ReDim Preserve myTable(Rs.Fields.count, count) End If For Elem = 0 To Rs.Fields.count - 1 myTable(Elem, count) = IIf(IsNull(Rs(Elem)), "", Rs(Elem)) Next Elem count = count + 1: Rs.MoveNext Wend QueryAccess = Application.WorksheetFunction.Transpose(myTable) Rs.Close: db.Close: Set Rs = Nothing End Function
Commentaires récents