Lier des tables Excel en VBA
Comment, en VBA, lier une feuille Excel à une base de données Access ?
Méthode 1 : TransferSreadSheet
En principe, la méthode la plus directe, pour lier une feuille Excel en VBA, consiste à utiliser l’instruction DoCmd.TransferSpreadSheet
. Un exemple ?
1 2 |
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel8, "tbl Test", _ "C:Documents and SettingsHervéBureauPersonnes.xls", True, "Feuil1!" |
Vous devez fournir dans l’ordre :
- le type d’opération à effectuer (
acLink
pour lier la feuille,acExport
pour exporter,acImport
pour importer) ; - la version du classeur (voir la liste proposée) ;
- le nom de la table (en fait, de la liaison de table) à créer ;
- le chemin complet du classeur à lier ou importer ;
- une valeur
True
si la feuille commence par une ligne de titre,False
sinon ; - enfin la zone à lier, dans le classeur Excel (il peut s’agir d’une plage, ou d’une feuille entière – terminée dans ce cas par «
!
« ).
Méthode 2 : DAO
Mais Jean, sur le forum self-access.com, nous a rapporté que ça ne marchait pas sur sa machine. Une page du site de support Microsoft donnait une solution alternative, mais incomplète. Voici une version un peu améliorée…
Commencez par recopier le code qui suit dans un module standard de votre base de données :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
' --- ' LIAISON DE TABLES EXCEL ' --- ' Entrée : strNewAccTable <- Nom de la table Access à créer. ' (du raccourci, en fait) ' strXLFileName <- Chemin complet du fichier Excel à lier. ' strImportSheet <- Nom de la feuille à lier. ' blnHeaders <- True si la feuille contient des titres, ' False sinon. ' Sub XLLink( _ ByVal strNewAccTable As String, _ ByVal strXLFileName As String, _ ByVal strImportSheet As String, _ Optional ByVal blnHeaders As Boolean = True) Dim db As DAO.Database Dim tdf As DAO.TableDef Dim strConnect As String On Error GoTo XLError Set db = CurrentDb Set tdf = db.CreateTableDef(strNewAccTable) ' Chaîne de connexion strConnect = "Excel 8.0;DATABASE=" & strXLFileName If blnHeaders Then strConnect = strConnect & ";HDR=YES;" ' Connexion proprement dite tdf.Connect = strConnect tdf.SourceTableName = strImportSheet & "$" db.TableDefs.Append tdf ' Libération des ressources Set tdf = Nothing Set db = Nothing Application.RefreshDatabaseWindow Exit_XLLink: Exit Sub XLError: MsgBox Err.Number & " " & Err.Description Resume Exit_XLLink End Sub |
Pour plus de détails sur les références, consultez cette page.
Tester
Pour tester le code :
- Faites apparaître la fenêtre Exécution (
CTRL
+G
). - Tapez-y par exemple :
XLLink "tbl Test", "C:...Un fichier.xls", "Feuil1", True
puis validez par[Entrée]
.
Normalement, dans la fenêtre de base de données devrait apparaître une table (une liaison de table, pour être précis) nommée tbl Test
, et pointant vers votre fichier Excel.
La procédure XLLink
reçoit 4 arguments :
- Le nom de la table – de la liaison – à créer dans la base de données.
- Le chemin complet du classeur Excel à lier (le fichier est supposé être en version 8.0).
- Le nom de la feuille Excel à lier, à l’intérieur du classeur donné en 2.
- Une valeur booléenne qui vaudra
True
si la feuille Excel contient une ligne de titres, etFalse
sinon.
tbl Test
, les données Excel sont modifiées également.
Oups… Dans mon commentaire sur les droits de modifications de la table Excel, il faut lire 2006 et pas 1996…
La modification des données Excel est devenue impossible depuis 1996, car suite à une poursuite au civil pour violation de brevet, MS n’a plus le droit d’offrir cette fonctionalité. La table Excel est donc en lecture seulement.