Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
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 29/11/2011, 16h03   #1
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
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 :
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.
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 20h01   #2
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 714
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : juin 2006
Messages : 1 714
Points : 3 654
Points : 3 654
Salut, surtout qu'il y a cela : http://excel.developpez.com/faq/?pag...sfertCsvAccess
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 23h35   #3
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
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
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 00h36   #4
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 714
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : juin 2006
Messages : 1 714
Points : 3 654
Points : 3 654
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
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 09h43   #5
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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 ?
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 12h50   #6
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
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 :
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 :
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
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 13h36   #7
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

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

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Normal tu as oublié que tu avais a faire à une variable dans ta chaine

Code :
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
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 14h43   #8
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
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"
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h31.


 
 
 
 
Partenaires

Hébergement Web