importer et convertir les données de tous les fichiers d'un même répertoire

P

patrick

Guest
bonjour le forum et jouyeuses fêtes de fin d'année à tout le monde.

voici mon problème:
j'ai un répertoire avec environ 200 fichiers qui sont sous une sorte de format texte (l'extension varie avec chaque fichier, mais pas la structure).

Je souhaiterai donc ouvrir et convertir tous ces fichiers afin de récupérer les données qui m'intéressent et des les copier dans le classeur test-001.

j'arrive à ouvrir et convertir sous exel un fichier seul.
j'arrive à ouvrir tous mes fichiers sans conversion.

Mais j'arrive pas à faire les deux en même temps.

en fait, j'ai concaténé deux programmes qui marchent indépendament. :-(


Merci d'avance pour votre aide


voici le code que j'ai utilisé (pour info, j'utilise excel97 sous windows xp)


Sub recap()
Application.ScreenUpdating = False

Dim fs, f, f1, fc, s

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder("C:\test001\2004-12-27 113734\")
Set fc = f.Files

i = 2

For Each f1 In fc
s = f1.Name
Workbooks.Open FileName:="C:\test001\2004-12-27 113734\" & s _

'partie que j'ai réjouté afin de convertir et qui marche lorsq'elle est utilisée seule
, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False _
, Comma:=True, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1))
' fin de la partie ajoutée

Range("A15").Activate
Selection.Copy

Windows("test-001.xls").Activate
Range("A" & i).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

i = i + 1
Windows(s).Activate

ActiveWorkbook.Close
Next

Application.ScreenUpdating = True

End Sub
 
M

myDearFriend

Guest
Bonjour Patrick,

Ci-dessous une proposition de code qui pourrait peut-être répondre à ta demande :

Sub ListeFichiersTxt()
Dim Dossier As Object, Fichier As Object
Dim Chemin As String
Dim I As Long
   'Chemin du dossier à analyser (à adapter au besoin)
   Chemin = ThisWorkbook.Path
   '
   Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
   For Each Fichier In Dossier.Files
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Right(Fichier.Name, 3) <> "xls" Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LireFichier Fichier
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;Next
&nbsp;&nbsp;&nbsp;'Conversion des données
&nbsp;&nbsp;&nbsp;Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Semicolon:=False, Comma:=True, Space:=True, Other:=False
&nbsp;&nbsp;&nbsp;Range("A1").Select
End Sub

Sub LireFichier(Fichier As Object)
Dim NL As Long, Chaine As String
Dim L As Long
&nbsp;&nbsp;&nbsp;'Insère le nom du fichier
&nbsp;&nbsp;&nbsp;L = ActiveSheet.Range("A65536").End(xlUp).Row
&nbsp;&nbsp;&nbsp;Cells(L + 1, 1).Value = Fichier.Name
&nbsp;&nbsp;&nbsp;'Récupère les lignes du fichier
&nbsp;&nbsp;&nbsp;Open Fichier For Input As #1
&nbsp;&nbsp;&nbsp;Do While Not EOF(1)
&nbsp;&nbsp;&nbsp;&nbsp;NL = NL + 1
&nbsp;&nbsp;&nbsp;&nbsp;Input #1, Chaine
&nbsp;&nbsp;&nbsp;&nbsp;Cells(L + NL + 1, 1).Value = Chaine
&nbsp;&nbsp;&nbsp;Loop
&nbsp;&nbsp;&nbsp;Close #1
End Sub

Cette macro va analyser le dossier dans lequel se situe ton classeur, il récupère les lignes de texte contenu dans chaque fichier présent dans ce répertoire et ENSUITE, procède à la conversion des données.

ATTENTION aux fichiers présents dans ce répertoire et au dépassement de capacité (récupération de 65535 lignes maximum !)


Cordialement.

Didier_mDF
myDearFriend-3.gif
 
P

patrick

Guest
Bonjour myDearFriend,

je te remercie de ton aide mais ta solution ne répond pas à mon attente.
Lorsque je récupère les données dans "LireFichier", cela ne me retourne pas des valeurs cohérentes. et il y a quelques petits problèmes

Merci


Patrick
 
M

myDearFriend

Guest
Désolé Patrick,


Tu dis que tu as des fichiers "sous forme" de texte, la procédure que je te donne ne fait que récupérer les lignes de données dans des fichiers texte. Si les valeurs obtenues ne sont pas "cohérentes", ça me laisse effectivement perplexe...


Cordialement.

Didier_mDF
myDearFriend-3.gif
 

Discussions similaires

Réponses
8
Affichages
708

Statistiques des forums

Discussions
312 839
Messages
2 092 686
Membres
105 509
dernier inscrit
hamidvba