Création de fichiers .csv à partir de fichier .txt

Ereudet Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

Je viens de m'inscrire sur le forum donc si je ne fais pas les choses dans l'ordre ou si je ne suis pas au bon endroit, dites le moi :)

Je reçois le 02 de chaque mois 45 fichiers .txt contenant chacun des informations (relevés d'index de compteur EDF de la fin du mois N-1). A partir de ces fichiers .txt, je dois créer des fichiers .csv (1 fichier .csv pour chaque fichier .txt, donc 45 fichiers .csv à créer) que je transfère ensuite vers un ftp pour que ces fichiers .csv soient intégrés dans une base de donnée.

J'ai donc besoin de savoir comment je peux faire une macro qui va créer autant de fichier .csv que j'ai de fichier .txt, et comment récupérer les données qui m’intéressent dans les fichiers .txt pour les envoyer vers les .csv. Si en plus la macro peut envoyer les fichiers obtenus vers un ftp, j'aurai tout gagné ! :)

Actuellement, j'ai une macro qui va récupérer les données dont j'ai besoin dans les 45 fichiers .txt et qui les envoie dans une feuille de mon classeur Excel (mais toutes les données récupérées vont vers une unique feuille : chaque fichier .txt alimente une ligne de la feuille Excel). Comme j'ai besoin de fichiers .csv distincts, il faut que je modifie ma macro pour qu'elle crée un fichier .csv pour chaque fichier .txt.

Merci de votre aide !! :)


A voir également:

1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonsoir, le plus facile serait peut-être d'adapter le code de ta macro.
0
Ereudet Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Oui, c'est ce que je souhaite faire, mais je ne sais pas quelles lignes de code je dois ajouter pour que les données récupérées sur les fichiers .txt soient envoyées vers des fichiers .csv distincts, que la macro doit créer, et non pas vers une feuille du fichier excel. Une idée SVP ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Ereudet Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
penses-tu que nous avons assez d'informations pour t'aider à modifier ton code?
0
Ereudet Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Je pensais que vous alliez me proposer un bloc à insérer dans ma macro, donc indépendante de la macro, mais vu que c'est si gentiment demandé, voici la macro ;), merci d'avance pour ton aide ! :

Sub DonneesEchéance()
Dim FichierAOuvrir
Dim i As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set F1 = Sheets("Liste")
Set F2 = Sheets("RecupDesDonnees")

F1.Select
ChDrive Cells(2, 1)
Chemin = Cells(2, 2) & "\"
ReDim FichierAOuvrir([C10000].End(xlUp).Row - 1) As String
ReDim VDate([C10000].End(xlUp).Row - 1) As String
ReDim NomFich([C10000].End(xlUp).Row - 1) As String
ReDim N°Fich([C10000].End(xlUp).Row - 1) As String
ReDim Dest([C10000].End(xlUp).Row - 1) As String
ReDim CodeVol([C10000].End(xlUp).Row - 1) As String

NbFichiers = [C10000].End(xlUp).Row - 1
For i = 1 To NbFichiers
If Cells(i + 1, 3) = "" Then GoTo Recup
FichierAOuvrir(i) = Cells(i + 1, 3)
Next i

Recup:
F2.Select
For i = 1 To NbFichiers
Workbooks.OpenText Filename:= _
Chemin & FichierAOuvrir(i), Origin:= _
xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array _
(3, 1), Array(4, 1), Array(5, 1)), TrailingMinusNumbers:=True
VDate(i) = [c1]
NomFich(i) = [c2]
N°Fich(i) = [c3]
Dest(i) = [c4]
CodeVol(i) = [C11]

ActiveWorkbook.Close
Next i

F2.Activate

For i = 1 To NbFichiers
'PremLigne = [A65535].End(xlUp).Row + 1
Cells(i + 1, 3) = VDate(i)
Cells(i + 1, 4) = NomFich(i)
Cells(i + 1, 5) = N°Fich(i)
Cells(i + 1, 6) = Dest(i)
Cells(i + 1, 7) = CodeVol(i)

Next i
End Sub

Sub ToutEffacer()
Application.ScreenUpdating = False
If [A65535].End(xlUp).Row = 1 Then Exit Sub
Dim Msg, Titre, Reponse
Msg = "Etes-vous sûr de vouloir tout effacer?"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Effacement des données"
Reponse = MsgBox(Msg, Style, Titre)
If Reponse = vbYes Then
Range(Cells(2, 1), Cells([A65535].End(xlUp).Row, [IV1].End(xlToLeft).Column)).Select
Selection.ClearContents
End If
Range("A2").Select
End Sub
0
Ereudet Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Je ne sais pas s'il fallait faire un copié collé directement de la macro ou si je pouvais joindre un fichier .txt, donc je fais comme je peux. Si ce n'est pas la bonne méthode, vous pouvez me le dire simplement :)
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Ereudet Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
moi, j'essaierais ceci, à ajouter juste avant
ActiveWorkbook.Close
:
fichiercsv = Left(FichierAOuvrir(i), Len(FichierAOuvrir(i)) - 4) & ".csv"
Call ActiveWorkbook.SaveAs(Chemin & fichiercsv, xlCSVMSDOS, , , , False, , xlLocalSessionChanges)

pour le transfert ftp, une méthode est de créer un fichier de commande ftp, et d'ensuite appeller ftp avec ce fichier de commande. voici un exemple.
0