IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Export VBA depuis Excel d'un CSV vers TT Access existante


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 54
    Points : 28
    Points
    28
    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.

    @++

  2. #2
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    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.

  4. #4
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    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.

Discussions similaires

  1. Problème exportation heure depuis Excel vers Access
    Par AstroZelda dans le forum Général VBA
    Réponses: 0
    Dernier message: 10/06/2015, 15h13
  2. [XL-2010] Publipostage VBA (depuis excel vers outlook)
    Par krokos55 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/12/2012, 10h49
  3. [PowerShell] Exporter des donnés d'un fichier CSV vers un autre
    Par Balrogard dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 13/12/2011, 09h19
  4. Insérer un Tableau excel dans Word via VBA depuis Excel
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/05/2008, 08h52
  5. [CSV] exporter des données d'un fichier CSV vers BD Mysql
    Par samsso2006 dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2007, 22h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo