Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/10/2011, 13h45   #1
Invité régulier
 
Inscription : novembre 2007
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 35
Points : 7
Points : 7
Par défaut 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
stsym est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 15h57   #2
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 704
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 704
Points : 3 625
Points : 3 625
Salut, faire une recherche dans les FAQ Excel et Access
http://excel.developpez.com/faq/ et http://access.developpez.com/faq/

http://access.developpez.com/faq/?pa...s#RenomTablADO ?
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 16h07   #3
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
Salut.

Si j'ai bien compris ton souci, il te suffirait de pratiquer comme tu l'as fait avec les autres variables, mais en encadrant le nom de la table par des crochets

Code :
bd.Execute "DELETE FROM [" & [clients] & "]  IN '" & [chemin] & "\" & [NomBaseAccess] & ".mdb '""
La mise entre crochets au sein du code sql n'est pas nécessaire si le nom de la table ne contient pas d'espaces (recommandé), mais tu t'assures ainsi que "ça passe" à tous les coups.
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 17h11   #4
Invité régulier
 
Inscription : novembre 2007
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 35
Points : 7
Points : 7
Par défaut 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.
stsym est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h47.


 
 
 
 
Partenaires

Hébergement Web