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 :

Rechercher tous les fichiers csv d'un repertoire et les importer en table dans Access


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 20
    Points : 6
    Points
    6
    Par défaut Rechercher tous les fichiers csv d'un repertoire et les importer en table dans Access
    Bonjour à tous!

    J'essaie de récuperer tous les fichiers csv d'un répertoire fixe et de les importer dans des tables access distinctes avec la délimitation du ";" et comme nom de table le nom de fichier en enlevant le ".csv"

    J'ai trouve ce code mais rien ne se passe:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Sub TransfertAllCsvInDir()
     
    Dim rep As String
    Dim Dossier As String
    Dim Nom_Tbl As String
     
    'obtient le premier fichier ou répertoire qui est dans "c:\"
    Dossier = "C:\repertoire"
    rep = Dir(Dossier & "*.CSV", vbDirectory)
    'boucle tant que le répertoire n'a pas été entièrement parcouru
    On Error GoTo Erreur
    Do While (rep "")
    'teste si c'est un fichier ou un répertoire
    If (GetAttr(Dossier & rep) And vbDirectory) = vbDirectory Then
    'MsgBox "Répertoire " & rep
    Else
    Nom_Tbl = Left(rep, Len(rep) - 4)
     
    'On attache le fichier trouvé
    DoCmd.TransferText acLinkDelim, , Nom_Tbl, Dossier & rep, True
    'On Ajoute les données dans la table de destination
    DoCmd.RunSQL "INSERT INTO Tabledest ( Champ1, Champ2, Champ3,Champ4 )SELECT Champ1 AS Expr1, Champ2 AS Expr2, Champ3 AS Expr3, Champ4 AS Expr4 FROM [" & Nom_Tbl & "];"
    'On libère le fichier
    DoCmd.DeleteObject acTable, Nom_Tbl
    End If
    Suite:
    'passe à l'élément suivant
    rep = Dir
    Loop
    GoTo Fin
    Erreur:
    Fin:
    End Sub
    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 20
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    Merci pour vos réponses!

    Le code qui est dans la faq, ne permet pas de creer des tables avec la delimitation du ";"
    Je l'ai testé, ça met tout dans un même champ, en plus je suis obligée de mettre en dur dans le code le nom du fichier alors que moi je voudrai qu il parcourt tout un repertoire et qu'il trouve les "cs"v et les envoi dans les tables avec comme nom de table le nom du fichier. Je ne sais pas si je suis assez claire dans mes explications

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, désolé je viens par curiosité de retester ce fichier et il fonctionne correctement, le probleme est donc chez toi
    Pour la recherche récursive ou non de fichiers voir http://www.developpez.net/forums/d20...feuille-excel/ et adapter à ton contexte

  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
    Je pense que ça va dépendre du délimiteur de colonne par défaut d'Access.
    Tu as regardé du coté de la fonction TransferText d'Access ?

    Et question bête, pourquoi tu postes dans VBA Excel et pas dans VBA Access ? Tu veux lancer ça à partir d'un fichier Excel ?
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 20
    Points : 6
    Points
    6
    Par défaut
    Oui je voudrai le faire depuis excel car ensuite je voudrai faire des requetes sur les tables et afficher les resultats dans excel... c est une autre étape!

    Je n'arrive pas à faire marcher le code chez moi j'ai une erreur à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Csv_Rst.Open "SELECT * FROM " & FichCSV, Csv_CN, _
            adOpenStatic, adLockOptimistic
    Une erreur de syntaxe dans la clause FROM...

    L'integralité du code

    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
    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
    46
    47
    Sub tranfertCSV_Vers_NouvelleTableAccess()
     
     
        Dim AccessCn As ADODB.Connection
        Dim AccessRst As ADODB.Recordset
        Dim Csv_CN As New ADODB.Connection
        Dim Csv_Rst As New ADODB.Recordset
        Dim DossierCSV As String, NomTable As String
        Dim FichCSV As String, MaBase As String
        Dim nbEnr As Long
     
        'Répertoire du fichier CSV
        DossierCSV = "C:\Documents and Settings\"    
        'Nom du fichier CSV à transfèrer
        FichCSV = "fichier.csv"
        'Chemin et nom de la base Access
        MaBase = "C:\Documents and Settings\base.mdb"
        'Nom de la nouvelle Table Access
        NomTable = "NewTable"
     
     
        'Connection au fichier CSV
        Csv_CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            DossierCSV & ";Extended Properties='text;FMT=Delimited'"
        'Requète dans le fichier CSV
        Csv_Rst.Open "SELECT * FROM & FichCSV, Csv_CN, _
            adOpenStatic, adLockOptimistic "
     
        'Connection à la base de données Access
        Set AccessCn = New ADODB.Connection
        AccessCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                       "Data Source=" & MaBase
     
     
        Csv_CN.Execute "SELECT * INTO [" & NomTable & "] IN '" & _
            MaBase & "' From [" & FichCSV & "]", nbEnr
     
     
        AccessCn.Close
        Csv_Rst.Close
        Csv_CN.Close
        Set AccessRst = Nothing
        Set AccessCn = Nothing
        Set Csv_Rst = Nothing
        Set Csv_CN = Nothing
     
    End Sub

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Normal tu as oublié que tu avais a faire à une variable dans ta chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Csv_Rst.Open "SELECT * FROM " & FichCSV & ", Csv_CN, _
           adOpenStatic, adLockOptimistic "
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 20
    Points : 6
    Points
    6
    Par défaut
    Merci, mais maintenant j'ai une erreur d'exécution 3709 " The connection cannot be used to perform this operation. It is either closed or invalid in this context"

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/08/2014, 12h35
  2. Les fichiers .csv
    Par nemesys971 dans le forum C
    Réponses: 27
    Dernier message: 03/06/2006, 16h29
  3. [CSV] Détecter le séparateur pour les fichiers CSV
    Par JavaEli dans le forum Langage
    Réponses: 1
    Dernier message: 30/11/2005, 23h42
  4. Suppression de tous les fichiers textes d'un répertoire
    Par Cathy dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 20/09/2005, 17h11
  5. [Excel] séparateur pour les fichiers csv
    Par drinkmilk dans le forum Excel
    Réponses: 2
    Dernier message: 27/08/2005, 14h21

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