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 21/11/2011, 11h52   #1
Invité de passage
 
Inscription : juin 2002
Messages : 48
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 48
Points : 1
Points : 1
Par défaut Export VBA depuis Excel d'un CSV vers TT Access existante

Bonjour à tous,

Dans mes traitements depuis un classeur Excel, j'ai besoin d'intégrer un fichier CSV dans une table existante d'un fichier Access.

J'ai trouver la procédure suivante ...
http://excel.developpez.com/faq/?pag...sfertCsvAccess

... mais celle-ci ne fonctionne qu'en mode création de table : j'ai l'erreur "... erreur table existante ..."

Peut-on réaliser cela sans recréer la table ? En effet, j'ai besoin de garder la structure (clé, index...)

Merci par avance.

@++
loki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 12h04   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 872
Points : 1 843
Points : 1 843
Tu peux faire des requêtes en ADO qui mélangent une base Access et un fichier texte.

Par exemple après avoir créé ta connexion à ta base Access, tu peux faire une requête :

Code :
1
2
3
query = "INSERT INTO myTable (myCol1, myCol2)" _
        & " SELECT csvCol1, csvCol2" _
        & " FROM [Text;;;DATABASE=" & csvPath & "].[" & csvName & "]"
Il faut par contre créer un fichier schema.ini dans le répertoire du CSV pour que ça fonctionne correctement. Tu trouveras je pense des tutos sur le net.
ZebreLoup est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 13h18   #3
Invité de passage
 
Inscription : juin 2002
Messages : 48
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 48
Points : 1
Points : 1
Bonjour ZebreLoup,

Merci pour ton retour.
Pourrais-tu m'indiquer un nom pour cette méthode ou un lien vers le tuto : je ne parviens pas à trouver de site décrivant cette méthode ...

De plus, peux-tu me dire si cela fonctionnera bien à partir du VBA d'Excel ?

Merci par avance.
loki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 13h48   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 872
Points : 1 843
Points : 1 843
Il y a ça sur MSDN par exemple : Tuto

Je vais essayer de te faire un truc rapide comme exemple

Hypothèses :
Ton fichier s'appelle "monFichier.csv" et contient les colonnes "nom", "prenom", "age". Séparés par des point-virgules. La première ligne contient les en-têtes de colonne.
Tu as une table "TableCible" qui contient les colonnes "name", "firstName", "age".

Tu vas créer dans le répertoire où est situé ton fichier csv un fichier nommé schema.ini

Ce fichier contiendra :
Code :
1
2
3
4
5
6
7
8
9
[monFichier.csv]
Format=Delimited(;)
DecimalSymbol=,
ColNameHeader=True
MaxScanRows=0
CharacterSet=ANSI
Col1 = nom Char Width 100
Col2 = prenom Char Width 100
Col3 = age Integer
Ensuite dans ton code VBA :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Dim csvName, csvPath As String
    csvPath = "D:\CheminDuFichier"
    csvName = "monFichier.csv"
 
    Dim cn As New ADODB.Connection
    cn.Provider = "Microsoft.Jet.Oledb.4.0"
 
    initConnection_dbMapping cn
    cn.ConnectionString = "C:\MaBaseDeDonnees.mdb"
 
    Dim query As String
 
    query = "INSERT INTO TableCible (name, firstName, age)" _
        & " SELECT nom, prenom, age" _
        & " FROM [Text;;;DATABASE=" & csvPath& "].[" & csvName & "]"
 
    cn.Open
    cn.Execute query
    cn.Close
Bien sûr il faut adapter le schema.ini (Nom du fichier, colonnes, separateur de colonnes, séparateur de décimale...) et la requête en fonction de ton fichier et de ta table.
ZebreLoup est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 13h55   #5
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 872
Points : 1 843
Points : 1 843
Et juste une autre piste sans création de fichier schema.ini, mais avec obligation qu'Access soit installé sur le poste :

1/ Sous Access, faire une première importation de texte manuellement, en sauvant la configuration (cela revient en fait à la création du schema.ini mais via Access).

2/ Créer une procédure dans Access pour refaire cette importation. En utilisant DoCmd.TransferText (cf MSDN pour plus d'infos, ou google)

3/ Dans le code VBA Excel, créer une instance d'Access et lancer la procédure créée en 2/ avec les bons paramètres.
ZebreLoup est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h48.


 
 
 
 
Partenaires

Hébergement Web