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

VBA Access Discussion :

[débutant] Code pour automatiser l'import de fichiers csv [AC-2010]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Femme Profil pro
    Chercheur(e) en géographie
    Inscrit en
    décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur(e) en géographie

    Informations forums :
    Inscription : décembre 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut [débutant] Code pour automatiser l'import de fichiers csv
    Bonjour,
    Je suis plus que novice en Access et VBA et pour un travail, j’ai besoin d’importer dans un mdb une grande quantité de fichiers csv (jusqu’à 1000). Vu le nombre de fichiers, vous aurez compris qu’il faut que j’arrive à automatiser l’importation des fichiers.
    Je réussi à importer les fichiers avec des paramètres définis mais je dois pour le moment l’exécuter pour chaque fichier, hors dans l’idéal, il faudrait que je puisse en importer un nombre variable à la fois, en créant une table pour chaque fichier importé, sachant que tous les fichiers ont le même format (mêmes champs), les noms des fichiers sont normalisés au format simu_X_T_N, avec X et N qui varient. Il faudrait également que les tables crées aient le même nom que le fichier importé pour les créer.

    Pour le moment, voici ce que j’ai comme code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ImportCsv()
    DoCmd.TransferText acImportDelim, "Import_Tournees", simu_1_T_3, "C:\simu_1_T_3.csv", HasFieldNames:=True
    End Sub
    Je vous remercie pour quelconque aide que vous pourrez m’apporter.

    Merci beaucoup

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Est-ce que tout tes fichiers sont dans un même répertoire ?

    Si c'est le cas, il est possible d'automatiser tout cela.

    Philippe

  3. #3
    Candidat au Club
    Femme Profil pro
    Chercheur(e) en géographie
    Inscrit en
    décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur(e) en géographie

    Informations forums :
    Inscription : décembre 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    en effet, tous les fichiers sont dans un même dossier.

    Merci pour votre intérêt.

    et petite question: comment je dois faire?

  4. #4
    Candidat au Club
    Femme Profil pro
    Chercheur(e) en géographie
    Inscrit en
    décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur(e) en géographie

    Informations forums :
    Inscription : décembre 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Personne ne peux m'aider? parce que je ne sais même pas comment je dois m'y prendre. Mes quelques connaissances en programmation sont bien trop maigres pour penser un algorithme performant.

    Merci d'avance à tous ceux qui pourront m'aider à avancer.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    août 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations forums :
    Inscription : août 2003
    Messages : 185
    Points : 173
    Points
    173
    Par défaut
    Bonjour,

    Pour commencer, je te donne une boucle qui te permet d'explorer et d'afficher (dans ta fenêtre d'exécution immédiate de ton éditeur vba) les fichiers contenus dans un répertoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub tstFiles()
    Dim chemin As String
    Dim fichier As String
     
        chemin = "C:\Tests\ZNA\"
        fichier = Dir(chemin & "*.pdf")
        Do Until fichier = ""
            Debug.Print fichier
            fichier = Dir
        Loop
     
    End Sub
    Dans ce cas, on aura tous les fichiers dont l'extension est en pdf dans le répertoire c:\Tests\ZNA

    Vois, en changeant le chemin si tu peux lire le nom de tous tes fichiers d'extension CSV, par exemple.

    Edit : places cette petite routine dans un module pour le tester.

  6. #6
    Candidat au Club
    Femme Profil pro
    Chercheur(e) en géographie
    Inscrit en
    décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur(e) en géographie

    Informations forums :
    Inscription : décembre 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup. Ca marche nickel.
    ensuite, comment les selectionner pour les importer un par un?

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    août 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations forums :
    Inscription : août 2003
    Messages : 185
    Points : 173
    Points
    173
    Par défaut
    Tu peux modifier ton code pour voir la "numérotation" de tes fichiers.

    En supposant que tous tes fichiers soient nommés "simu_" suivis de ta numérotation X_T_N puis de l'extension ".csv",

    tu devrais pouvoir extraire cette numérotation de la façon suivante :

    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
    Sub tstFiles()
    Dim chemin As String
    Dim fichier As String
    Dim numerotation As String                                  ' Ajouter cette ligne
     
        chemin = "C:\Tests\ZNA\"
        fichier = Dir(chemin & "simu_*.txt")
        Do Until fichier = ""
    '        Debug.Print fichier                                ' Mettre cette ligne en remarque
            numerotation = Mid(fichier, 6, (Len(fichier) - 9))  ' Ajouter cette ligne
            Debug.Print fichier & " " & numerotation            ' Ajouter cette ligne
            fichier = Dir
        Loop
     
    End Sub
    Te resterait alors à adapter ton instruction importation avec les données récupérées dans chemin, fichier et numérotation.

    Ton instruction devrait prendre place juste avant l'instruction

    Ton instruction devrait alors prendre la forme suivante (à adapter, bien sûr) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferText acImportDelim, "Import_Tournees", "simu_" & numerotation, chemin & fichier, HasFieldNames:=True
    Bon après-midi.

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    août 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations forums :
    Inscription : août 2003
    Messages : 185
    Points : 173
    Points
    173
    Par défaut
    Oups... oublié le code final

    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
    Sub tstFiles()
    Dim chemin As String
    Dim fichier As String
    Dim numerotation As String                                  ' Ajouter cette ligne
     
        chemin = "C:\Tests\ZNA\"
        fichier = Dir(chemin & "simu_*.txt")
        Do Until fichier = ""
    '        Debug.Print fichier                                ' Mettre cette ligne en remarque
            numerotation = Mid(fichier, 6, (Len(fichier) - 9))  ' Ajouter cette ligne
    '        Debug.Print fichier & " " & numerotation            ' Ajouter cette ligne
            DoCmd.TransferText acImportDelim, "Import_Tournees", "simu_" & numerotation, chemin & fichier, HasFieldNames:=True
            fichier = Dir
        Loop
     
    End Sub

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    août 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations forums :
    Inscription : août 2003
    Messages : 185
    Points : 173
    Points
    173
    Par défaut
    Et peaufiner le tout avec une gestion d'erreur. Un peu comme ceci :

    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
    Sub tstFiles()
     
    On Error GoTo GestionDErreur
     
    Dim chemin As String
    Dim fichier As String
    Dim numerotation As String                                  ' Ajouter cette ligne
     
        chemin = "C:\Tests\ZNA\"
        fichier = Dir(chemin & "simu_*.txt")
        Do Until fichier = ""
    '        Debug.Print fichier                                ' Mettre cette ligne en remarque
            numerotation = Mid(fichier, 6, (Len(fichier) - 9))  ' Ajouter cette ligne
    '        Debug.Print fichier & " " & numerotation            ' Ajouter cette ligne
            DoCmd.TransferText acImportDelim, "Import_Tournees", "simu_" & numerotation, chemin & fichier, HasFieldNames:=True
            fichier = Dir
        Loop
     
    FinSub:
        ' Tes opérations de fin de procédure ici
        Exit Sub
     
    GestionDErreur:
        If Err.Number <> 0 Then
            ' Ta gestion d'erreur ici
        End If
        Resume FinSub   ' Pour finaliser ta procédure éventuellement.
    End Sub
    Sans oublier de commenter ton code

  10. #10
    Candidat au Club
    Femme Profil pro
    Chercheur(e) en géographie
    Inscrit en
    décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur(e) en géographie

    Informations forums :
    Inscription : décembre 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup!!
    Ca marche parfaitement.
    Je ne pense avoir besoin de la gestion d'erreur mais je garde ca sous le coude!

    Grace à vous, j'ai économisé mes vacances pour faire d'autres choses qui sont plus dans mes cordes.

    Encore merci

    Jul38

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    août 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations forums :
    Inscription : août 2003
    Messages : 185
    Points : 173
    Points
    173
    Par défaut
    Je ne sais pas pourquoi, mais j'ai peur de comprendre que c'était pour un devoir... Si c'est le cas, j'espère que tu as bien compris le bout de code que je t'ai filé et que tu ne t'es pas contenté de le recopier bêtement.

  12. #12
    Candidat au Club
    Femme Profil pro
    Chercheur(e) en géographie
    Inscrit en
    décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur(e) en géographie

    Informations forums :
    Inscription : décembre 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Je vous rassure, c'est dans le cadre d'un projet de recherche où je suis amenée à manipuler un très grand nombre de données. Etant géographe, bien que je sois capable de comprendre un code, je suis incapable d'en construire un de toute pièce. Votre aide m'a permis d'économiser 1 semaine de travail pour m'occuper de la rédaction, la formalisation d'autres éléments du projet et autres.

    Je vous remercie encore et je vous souhaite de passer de bonnes fêtes.

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    août 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations forums :
    Inscription : août 2003
    Messages : 185
    Points : 173
    Points
    173
    Par défaut
    Bonjour,

    Dans ce cas, cela me fait d'autant plus plaisir d'avoir pu vous être utile. Je dois avouer que le ton de votre dernier message me laissait un goût amer dans la bouche : j'avais l'impression d'avoir été grugé par un(e) étudiant(e) trop paresseux(se) que pour faire un devoir.

    Ce n'est pas le cas, tant mieux.

    Bonne journée à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/06/2015, 13h55
  2. Réponses: 7
    Dernier message: 07/03/2011, 16h37
  3. Réponses: 0
    Dernier message: 03/02/2011, 13h15
  4. SQL express Cherche une idée pour automatiser un import ?
    Par tibofo dans le forum Administration
    Réponses: 3
    Dernier message: 06/08/2009, 10h46
  5. Réponses: 8
    Dernier message: 14/09/2006, 17h43

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