Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 13/12/2011, 15h14   #1
Invité de passage
 
Femme
Chercheur(e) en géographie
Inscription : 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 : 0
Points : 0
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 :
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
Jul38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 17h10   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 958
Points : 30 958
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
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
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 17h23   #3
Invité de passage
 
Femme
Chercheur(e) en géographie
Inscription : 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 : 0
Points : 0
en effet, tous les fichiers sont dans un même dossier.

Merci pour votre intérêt.

et petite question: comment je dois faire?
Jul38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 10h37   #4
Invité de passage
 
Femme
Chercheur(e) en géographie
Inscription : 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 : 0
Points : 0
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.
Jul38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 12h33   #5
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
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 :
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.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 14h05   #6
Invité de passage
 
Femme
Chercheur(e) en géographie
Inscription : 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 : 0
Points : 0
Merci beaucoup. Ca marche nickel.
ensuite, comment les selectionner pour les importer un par un?
Jul38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 14h26   #7
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
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 :
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 :
DoCmd.TransferText acImportDelim, "Import_Tournees", "simu_" & numerotation, chemin & fichier, HasFieldNames:=True
Bon après-midi.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 14h29   #8
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
Oups... oublié le code final

Code :
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
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 14h34   #9
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
Et peaufiner le tout avec une gestion d'erreur. Un peu comme ceci :

Code :
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
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 15h29   #10
Invité de passage
 
Femme
Chercheur(e) en géographie
Inscription : 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 : 0
Points : 0
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
Jul38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 16h15   #11
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
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.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 18h25   #12
Invité de passage
 
Femme
Chercheur(e) en géographie
Inscription : 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 : 0
Points : 0
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.
Jul38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 08h49   #13
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
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.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h26.


 
 
 
 
Partenaires

Hébergement Web