Utiliser une variable comme nom de table Access dans une requête SQL
Bonjour,
J'ai trouvé sur le super site de Jacques Boisgontier un code
qui permet d'importer dans une base access des données présentes dans un fichier excel.
Ce code fonctionne si la base access et le fichier excel se trouvent dans le même répertoire et si dans VB il a été coché dans outil/ préférence "Microsoft DAO 3.6"
Code:
1 2 3 4 5 6 7 8 9 10 11
| Sub ExporterAccessDAO()
'cocher Microsoft DAO 3.6 dans Outils/Références
Dim bd As DAO.Database
ChDir ActiveWorkbook.Path
Set bd = OpenDatabase(ActiveWorkbook.FullName, False, False, "excel 8.0")
bd.Execute "DELETE FROM clients IN '" & ActiveWorkbook.Path & "\access2000.mdb'"
Sql = "INSERT INTO client IN '" & ActiveWorkbook.Path & "\access2000.mdb' SELECT * FROM [Mabd]"
bd.Execute Sql
bd.Close
Set bd = Nothing
End Sub |
Dans ce code sont écrits en dur le nom de la base "access2000.mdb"et celui de la table "Clients" dans laquelle sont importées les données du fichier excel.
Pour rendre plus souple ce code, j'ai crée dans le fichier excel un onglet parametres.
Dans ce dernier, j'ai nommé une cellule "chemin" qui retourne l'emplacement de la base "C:/..." et une autre "NomBaseAccess" qui retourne le nom de la base access concernée par exemple "MaBase".
Code:
1 2 3 4 5 6 7 8 9 10 11
| Sub ExporterAccessDAO()
'cocher Microsoft DAO 3.6 dans Outils/Références
Dim bd As DAO.Database
ChDir ([chemin])
Set bd = OpenDatabase(ActiveWorkbook.FullName, False, False, "excel 8.0")
bd.Execute "DELETE FROM clients IN '" & [chemin] & "\" & [NomBaseAccess] & ".mdb '"
Sql = "INSERT INTO clients IN '" & [chemin] & "\" & [NomBaseAccess] & ".mdb ' SELECT * FROM [Mabd]"
bd.Execute Sql
bd.Close
Set bd = Nothing
End Sub |
j'ai voulu aller plus loin et nommer dans le ficher excel une cellule "Table1" pour retourner le nom de la table access pour remplacer le nom "clients" dans le code de base.
Dans la ligne de code:
Code:
"bd.Execute "DELETE FROM clients IN '" & [chemin] & "\" & [NomBaseAccess] & ".mdb '""
J'ai essayé plusieurs synthaxes pour remplacer "clients" par "Table1", mais toutes ont fait échouer l'action.
Espérant avoir été clair sur l'explication de mon problème.
D'avance merci pour votre aide.
Cdt
Georges
Utiliser une variable comme nom de table Access dans une requête SQL
Bonsoir Pierre,
Tu as bien compris mon souci et tu m'as apporté la bonne solution. Tout fonctionne parfaitement.
Merci d'avoir modifié le libellé de " l'intitulé" de ma question, il est beaucoup plus explicite.
Merci aussi à toi Kiki29 pour le rappel des liens à des informations intéressantes.
Merci pour votre aide rapide et efficace
Bonne fin de journée.