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

Fermé
Ereudet Messages postés 23 Date d'inscription vendredi 18 mai 2018 Statut Membre Dernière intervention 13 septembre 2018 - 18 mai 2018 à 16:55
yg_be Messages postés 23402 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 - 1 juin 2018 à 18:16
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 !! :)


1 réponse

yg_be Messages postés 23402 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
18 mai 2018 à 19:46
bonsoir, le plus facile serait peut-être d'adapter le code de ta macro.
0
Ereudet Messages postés 23 Date d'inscription vendredi 18 mai 2018 Statut Membre Dernière intervention 13 septembre 2018
18 mai 2018 à 20:00
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 23402 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > Ereudet Messages postés 23 Date d'inscription vendredi 18 mai 2018 Statut Membre Dernière intervention 13 septembre 2018
18 mai 2018 à 20:45
penses-tu que nous avons assez d'informations pour t'aider à modifier ton code?
0
Ereudet Messages postés 23 Date d'inscription vendredi 18 mai 2018 Statut Membre Dernière intervention 13 septembre 2018
18 mai 2018 à 23:51
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 vendredi 18 mai 2018 Statut Membre Dernière intervention 13 septembre 2018
18 mai 2018 à 23:52
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 23402 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > Ereudet Messages postés 23 Date d'inscription vendredi 18 mai 2018 Statut Membre Dernière intervention 13 septembre 2018
19 mai 2018 à 10:36
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