Macro pour traitement de 600 Fichiers txt --> 1 feuille xls

Bonjour à tous,

je suis débutant dans le domaine de la macro. Je dois traiter un grand nombre de fichiers,et là je sèche un peu.

Est ce que quelqu'un pourrait m'aider à construire une macro qui me permettrai d'importer mes fichiers textes sur une seule feuille excel.

Les fichiers à importer son comme ceci : (fichier 1)

ax,ay,0=simple appui 1

0.015195454,-0.047955669,0,,,,,

0.018371279,-0.041170553,0,,,,,

0.014791985,-0.048026111,0,,,,,

0.013614239,-0.056492411,0,,,,,

0.019580388,-0.048658342,0,,,,,

0.014765579,-0.040746128,0,,,,,

0.011088273,-0.050044395,0,,,,,

0.013431867,-0.051767761,0,,,,,

0.013004626,-0.047346128,0,,,,,

  • 0.058564556,0.00321081,1,,,,,
  • 0.960377101,1.65193001,1,,,,,
0.252280846,-0.426082819,1,,,,,

0.17392946,-0.257254719,1,,,,,

0.124433158,-0.204960276,1,,,,,

Le fichier destination souhaité :

Colonne A:

Nom du fichier1

ax

0.015195454

0.018371279

0.014791985

0.013614239

0.019580388

0.014765579

0.011088273

0.013431867

0.013004626

  • 0.058564556
  • 0.960377101
0.252280846

0.17392946

0.124433158

0.097836027

0.082266393

0.082546498

0.067208976

0.07142314

0.065815557

Colonne B:

nom du fichier 1

ay

  • 0.047955669
  • 0.041170553
  • 0.048026111
  • 0.056492411
  • 0.048658342
  • 0.040746128
  • 0.050044395
  • 0.051767761
  • 0.047346128
0.00321081

1.65193001

  • 0.426082819
  • 0.257254719
  • 0.204960276
  • 0.169295515
  • 0.149740837
  • 0.156270312
  • 0.15658371
  • 0.150991382
  • 0.155740767

colonne C:

nom du fichier 1

0=simple appui 1

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

Colonne D:

Nom du fichier 2

ax

0.00321081

1.65193001

  • 0.426082819
  • 0.257254719
  • 0.204960276
.

Merci beaucoup d'avance pour votre aide.

Ant

Bonjour Schrolfy, bonjour le forum,

On veut bien t'aider mais toi tu nous aides pas beaucoup !...

Quel est le format des fichiers ? Parce "texte" ça ne signifie pas grand chose...

Où sont-ils (dans quel dossier) tes fichiers source ? Un seul dossier, plusieurs ?

Il y a-t-il, dans leur(s) dossier(s) d'autres fichiers qui ne doivent pas être traités ou tous les fichier sont concernés ?

Elles sont où (dans quel onglet) les données du fichier source ? Le premier ?

Le fichier créé va s'appeler comment ? Et va être enregistrer dans quel dossier ?

Et si ça ne te fait pas trop mal, joindre un fichier source pour que l'on ait une idée précise de sa structure.

Voilà, voilà... À toi de jouer !

Merci beaucoup pour la rapidité de ta réponse.

et désolé pour mon ignorance

Le fichier source est en .csv (j'en joins un à ce message) quand je l'ouvre avec excel, la totalité se trouve dans le premiere onglet (et dans la première colonne). Les séparateurs sont des virgules.

Tous les fichiers sources sont dans un même dossier (sur le bureau) appelé "fichiers sources"

Ce dossier ne contient que les fichiers source à traiter.

On peut appeler le fichier créé "Data". Et l’enregistrer n'importe où. (même dossier que les fichiers sources si cela peut simplifier la tache)

Merci encore pour ta réactivité, je suis à ta disposition

Re,

Pourquoi ne mets-tu pas en pièce jointe un fichier tel qu'il est vraiment sans les séparations...

schlorfy a écrit :

Le fichier source est en .csv (j'en joins un à ce message) quand je l'ouvre avec excel, la totalité se trouve dans le premiere onglet (et dans la première colonne). Les séparateurs sont des virgules.

Il a été généré au format américain, mais il est possible de l'ouvrir proprement avec une macro.

Ou alors tu fais une mise en colonne avec délimiteur ","


ouverture par macro

Sub ouvrir_csv()

Nom_Fichier = Application.GetOpenFilename("Fichiers csv, *.csv")
If Nom_Fichier <> False Then
    Workbooks.OpenText Filename:=Nom_Fichier
End If

End Sub

avec

Workbooks.OpenText Filename:=Nom_Fichier, Local:=True

il ouvrira en attendant les ";" si tu es en Excel FR

Tu peux utiliser ceci :

Les données seront toutes dans les mêmes colonnes, je ne vois pas l'intérêt de passer de A à D lors du changement de fichier.

Le n° de fichier est mis à droite sur la première ligne du fichier

Il faut d'abord rechercher le répertoire

et ensuite compiler

Re,

En fait désolé Schlorfy mais le fichier tu tu as mis en pièce jointe s'ouvre déjà séparé quand je le fais via la macro et pas, quand je l'ouvre directement. Comme la commande proposée par Steelson ne fonctionnait pas avec mon code j'ai cherché dans l'aide est j'ai trouvé Format... Mais je ne sais pas si ça va fonctionner chez toi...

Le code :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim CA As String 'déclare la variable CA (Chemin d'accès)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim F As String 'déclare la variablle F (Fichier)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set CD = ThisWorkbook 'définit le classeur destination CD
CA = CD.Path 'définit le chemin d'accès CA
Set OD = CD.Sheets(1) 'définit l'onglet destination OD
'si "oui" au message interrompt la procédure, sinon les éventuelles anciennes données sont ecrasées
If MsgBox("Les éventuelles anciennes données seront écrasées ! Voulez-vous interrompre la macro les enregistrer sous ?", vbYesNo, "ATTENTION") = vbYes Then Exit Sub
OD.Cells.Clear 'suprime le contenu de l'onglet OD
F = Dir(CA & "\*.csv") 'définit le premier fichier CSV du dossier ayant CA pour cehmin d'accès
Do While Not F = "" 'boucle tna tqu'il existe des fichiers
    Set CS = Workbooks.Open(CA & "\" & F, Format:=2) 'définit le classeur dource CS
    Set OS = CS.Sheets(1) 'définit l'onglet source OS
    'définit la cellue de destination DEST (A1 si A1 est viode, sinon la première cellule vide de la ligne 1 de l'onglet destination OD)
    Set DEST = IIf(OD.Range("A1").Value = "", OD.Range("A1"), OD.Cells(1, Application.Columns.Count).End(xlToLeft).Offset(0, 1))
    DL = OS.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet source OS
    OS.Range("A1:C" & DL).Copy DEST 'copie les trois premières colonne de l'oglet source et les colle dans dest
    CS.Close False 'ferme le classeur source sans enregistrer
    F = Dir 'redéfinit le fichier F (prochaine fichier csv du dossier ayant CA pour cehmin d'accès)
Loop 'boucle
CD.Save 'enregistre le classeur destination
End Sub

Le fichier a placer impérativement dans le même dossier !...

19data.xlsm (102.92 Ko)

Salut ThauThème !

Code sans doute plus optimisé que le mien.

J'ai réutilisé un programme fait en 2008 assez universel, qui me permettait de compiler plus de 1500 fichiers (résultats d'essais moteurs).

Amicalement.

Waouh ! ! C'est vraiment génial! Et pratiquement exactement ce que je cherchais! Le seul petit bémol, c'est que le nom du fichier n'apparait pas en haut de chaque colonne. Mais s'il ne me reste plus que ca à faire à la main, ca me fait déjà une bonne 30ène d'heure de gagnées

Merci beaucoup beaucoup !

Re,

Oui désolé je n'avais pas vu cela dans l'énoncé. Mas puisque il y a un bémol voici le bécarre... (j'en ai profité pour corriger les nombreuses fautes dans les commentaires, pfff... Quelle honte !)

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim F As String 'déclare la variablle F (Fichier)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set CD = ThisWorkbook 'définit le classeur destination CD
CA = CD.Path 'définit le chemin d'accès CA
Set OD = CD.Sheets(1) 'définit l'onglet destination OD
'si "Oui" au message, interrompt la procédure, sinon écrase les éventuelles anciennes données
If MsgBox("Les éventuelles anciennes données seront écrasées ! Voulez-vous interrompre la macro pour les enregistrer sous ?", vbYesNo, "ATTENTION") = vbYes Then Exit Sub
OD.Cells.Clear 'suprime le contenu de l'onglet OD
F = Dir(CA & "\*.csv") 'définit le premier fichier CSV du dossier ayant CA pour chemin d'accès
Do While Not F = "" 'boucle tant qu'il existe des fichiers
    Set CS = Workbooks.Open(CA & "\" & F, Format:=2) 'définit le classeur source CS
    Set OS = CS.Sheets(1) 'définit l'onglet source OS
    'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la ligne 1 de l'onglet destination OD)
    Set DEST = IIf(OD.Range("A1").Value = "", OD.Range("A1"), OD.Cells(1, Application.Columns.Count).End(xlToLeft).Offset(0, 1))
    DL = OS.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet source OS
    DEST.Resize(1, 3).Value = CS.Name 'écrit le nom du classeur source dans les trois colonnes de la première ligne
    'copie les trois premières colonnes de l'onglet source et les colle dans DEST décalée d'une ligne vers le bas
    OS.Range("A1:C" & DL).Copy DEST.Offset(1, 0)
    CS.Close False 'ferme le classeur source sans enregistrer
    F = Dir 'redéfinit le fichier F (prochain fichier csv du dossier ayant CA pour chemin d'accès)
Loop 'boucle
CD.Save 'enregistre le classeur destination
End Sub

Personnellement je n'aurais pas mis les informations dans différentes colonnes ... tout dépend de ce que tu veux en faire ensuite, mais cela va limiter leur exploitation.

Steelson, je dois moyenner chaque ligne pour obtenir une courbe en fonction du nom des colonnes... J'ai réléchis à la meilleure manière, je crois que c'est comme ca.

ThauThème, merci 1000 fois, t'imagine même pas le nombre d'heure que tu viens de sauver

Le résultat est parfait !

Rechercher des sujets similaires à "macro traitement 600 fichiers txt feuille xls"