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

  1. #1
    Candidat au Club
    [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)
    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
    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
    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é
    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
    Merci beaucoup. Ca marche nickel.
    ensuite, comment les selectionner pour les importer un par un?

  7. #7
    Membre habitué
    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

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    fichier = dir


    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é
    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é
    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
    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é
    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
    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é
    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.

###raw>template_hook.ano_emploi###