Création en auto d'un fichier texte à partir d'un fichier CSV

bizounours

XLDnaute Nouveau
Bonjour,

Je sollicite vos compétences et demande vos aides. Un grand merci.

Actuellement je récupère un fichier ".csv" avec des ";" comme séparateur.

A partir de ce fichier, l'objectif est de créer automatiquement (ou en activant une macro), un autre fichier au format texte avec des données fixes.

L'objectif final est de pouvoir intégrer le fichier final dans un logiciel de trésorerie.

Le type de fichier à intégrer est un fichier extrait de la banque de France constitué de taux Enonia jour par jour (une ligne par jour)


=> Une ligne type


En gros je dois pouvoir ajouter automatiquement dans le fichier :
- IN en position 1
- EON en position 9

Puis réussir à disposer les infos de la banque de France :
- La DATE sous forme 20140214 en position 50
- Enfin le taux EONIA en position 61 et 76

Note : Certaines lignes sont inscrites en ND à la place du taux pour indiquer qu'il n'y a pas de données. Il faudrait donc que Excel ignore cette ligne dans ce cas)

Note 2 : La banque de France dans son fichier indique des dates depuis 1999, il serait bien que la macro demande le mois et l'année concernée.


Si quelqu'un pouvait me faire une macro, j'en serais reconnaissant :)

Fichier en PJ :
- fichier csv --> Vient de la banque de France
- Fichier texte --> Fichier final que je voudrais obtenir
 

Pièces jointes

  • Market data.zip
    14 KB · Affichages: 39
Dernière édition:

bizounours

XLDnaute Nouveau
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Trop coool ca marche biennnnnnnnnnnnnnnn, en plus il demande ou se trouve le csv, excellent !!
Maintenant il il faut en effet mettre les espaces afi que les infos soient à la bonne position et l'enregistrer comme tu dis au format texte :)
 

Staple1600

XLDnaute Barbatruc
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Re

bizounours
(PS:je pense qu'on se complique la vie, et qu'il doit y avoir d'autres voies à explorer)

Je te laisse constater les bizarreries produites ;) par cette dernière mouture.
NB: Dans cette version, le fichier texte est créé et fermé dans la foulée
dans le répertoire où se trouve le *.csv.
Code:
Sub EONIATEST_IV()
'crédits à Docmarti pour l'ouverture du CSV ;o)
Dim Chemin$, fCSV As Workbook, NewTxtFile As Workbook, fic, dl&, ncol, arrFor
Chemin = ThisWorkbook.Path & "\"
fic = Application.GetOpenFilename("Fichiers CSV (*.csv), *.csv")
    If fic = False Then
    Exit Sub
    End If

Application.ScreenUpdating = False 'fige écran

Set fCSV = Workbooks.Open(fic, , , 2, , , True, , , , , , False, local:=True)
Set NewTxtFile = Workbooks.Add(xlWBATWorksheet)

fCSV.Sheets(1).Copy After:=NewTxtFile.Sheets(1): fCSV.Close False

With NewTxtFile
    .Sheets(1).Name = "EXPORT_TXT"
    With .Sheets(2)
        .Name = "eonia"
        .Columns("C:G").Delete: .Rows("1:8").Delete
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
    End With
    With .Sheets("EXPORT_TXT")
    .Activate
    ncol = Array(1, 9, 50, 61, 76)
    arrFor = Array("=""IN""", "=""EON""", "=TEXT(eonia!RC[-49],""aaaammjj"")", "=eonia!RC[-59]", "=eonia!RC[-74]")
        For i = 0 To 4
            .Cells(1, ncol(i)).FormulaR1C1 = arrFor(i)
        Next i
    .Range("A1:BX1").AutoFill Destination:=Range("A1:BX" & dl), Type:=xlFillDefault
    .UsedRange.Value = .UsedRange.Value
    End With
    Application.DisplayAlerts = False 'inhibe alert message
    .Sheets(2).Delete
    .SaveAs Chemin & "Export_Test" & Format(Date, "ddmmyyyy") & ".txt", xlText, False
    .Close True
    Application.DisplayAlerts = True
End With
MsgBox "Traitement terminé mais c'est pas beau à voir ;o) "
Application.ScreenUpdating = True
End Sub
 

bizounours

XLDnaute Nouveau
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Salut :p

C'est de mieux en mieux tout ça.

Tout d'abord marrant le ptit message à la fin du traitement "Traitement terminé mais c'est pas beau à voir ;o) "

Et la magique !!!!!!!!!!!! J'obtiens bien mon fichier texte avec mes positions.

Par contre, je constate que les longueurs que tu as mis dans la macro ne sont pas respecter (il y a un ptit décalage, pas comprendre pourquoi , lool)

De plus, lorsque j'affiche les caractères spéciaux, je me rends compte que les espacements sont des tabulations ou je ne sais quoi. Malheureusement moi il me faut des espaces car cela ne va pas passer dans mon logiciel :)

IN --> Position correct --> Ok
EON --> Position 11 --> Or dans dans ta macro tu as mis 09 --> Ko
La DATE --> Position 55 --> Or dans dans ta macro tu as mis 50 --> Ko
Premier TAUX EONIA --> Position 74 --> Or dans dans ta macro tu as mis 61 --> Ko
Second TAUX EONIA --> Position 92 ou 93 --> Or dans dans ta macro tu as mis 76 --> Ko

Looll je suis prêt du résultat final grâce à toi :)

PS : Les positions en gras, ce sont les positions que j'attends :)

PS 2 : Loool, pour ma compréhension tu peux mettre des petites commentaires afin de me lire a quoi elles servent les lignes de commandes ???? STPPP :)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Re

bizounours
Ces critères étaient les tiens, jeune padawan !
Ce fut donc sur cette base, que j'ai fait le dernier code ...:rolleyes:
- IN en position 1 (dans le fichier position 1) --> Ok
- EON en position 9 (dans le fichier position 4) --> Ko
- La DATE en position 50 (dans le fichier position 8) --> Ko
- Enfin le taux EONIA en position 61 et 76 (dans le fichier position 17 et 22) --> Ko

Tu oublies le signe -
(Tu devrais faire un tout dans l'aide pour comprendre le fonctionnement FormulaR1C1 ;))

En clair, les premières cellules recevant les formule sont:
A1, I1,AX1,BI1 et BX1
donc les colonnes: 1,9,50,61,76
et oh surprise dans le code VBA, on a : ncol = Array(1, 9, 50, 61, 76)

CQFD ;)
 
Dernière édition:

bizounours

XLDnaute Nouveau
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Ouppps, je suis d'accord avec toi :) à 3000% :p

Mais après création du fichier texte, justement les position "1,9,50,61 et 76" ne sont pas respectées.

Exemple si tu regardes la zone date, elle se trouve en position 55 alors qu'elle devrait se situer sur la position 50.

De plus, si tu regarde la reglette dans Notepad++ ou PSPAD ou autre, on constate que les tabulations amène l'information en position 102, au lieu d'être réellement en position 50.

Regarde la copie d'écran :)


Copie d'écran (exemple sur la position de la date) :

Lien supprimé


Copie d'écran du fichier obtenu montrant les tabulations :

Lien supprimé


Copie d'écran du fichier que je voudrais avoir avec les espaces

Lien supprimé
 

Staple1600

XLDnaute Barbatruc
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Re

Tu travailles avec Excel ou PSPad ! Faudrait savoir!
Note : Certaines lignes sont inscrites en ND à la place du taux pour indiquer qu'il n'y a pas de données. Il faudrait donc que Excel ignore cette ligne dans ce cas)
Note 2 : La banque de France dans son fichier indique des dates depuis 1999, il serait bien que la macro demande le mois et l'année concernée.
Si quelqu'un pouvait me faire une macro, j'en serais reconnaissant :)
Tu n'as jamais évoqué PSPad mais Excel !

Petit rappel:
Je te laisse constater les bizarreries produites ;) par cette dernière mouture.

Je te laisse don mettre un peu les mains dans le cambouis, histoire d'équilibrer le temps investi entre le demandeur et le répondant (en l'occurrence, moi ;))

Je vais faire petite sieste, car à 39°3 (grippe oblige) , Excel n'a plus le même goût.:p
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Re

Avant d'aller sous la couette, précisions importantes:

PS 1: Les positions en gras, ce sont les positions que j'attends :)
Tu peux employer ton temps à autre chose qu'attendre:
tester, modifier, faire des erreurs, corriger etc..
Bref commencer à apprendre VBA à petits pas ;)

PS 2 : Loool, pour ma compréhension tu peux mettre des petites commentaires afin de me lire a quoi elles servent les lignes de commandes ???? STPPP
Les commentaires viendront quand je te sentirai un peu plus investi dans la résolution de ta question ;)
et par rapport à des questions précises sur des éléments de code que tu ne comprends pas.
Les outils sont là (touche F1, XLD, le net) pour commencer à décortiquer le code ligne à ligne.
T'as le temps parce que ma sieste devrait finir à 17h18.
Ou si la fièvre persiste, je repasserai ici vers 19h45.

Bon courage, et n'oublie pas : premier réflexe:
ALT+F11 puis F1.

Allez zou au pieux !
(je me parle à moi même , je précise ;) pour éviter tout malentendu :rolleyes:)
 
Dernière édition:

bizounours

XLDnaute Nouveau
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Non, mais non tu te trompes je cherche; J'ai bien le réflexe d'analyser ta ligne de commande.

J'ai effectivement tout vérifier, mais il me manque des connaissances comme par exemple :
Lui dire de ne pas mettre des tabulations mais des espaces entre chaque zones (IN -EON-DATE-TAUX).
Vu que tu as renseigner les infos "1,9,50,61,76", je ne comprends pas car les zones ne sont pas redescendus dans les positions voulues.

A la base c'est du excel oui en effet, ou plutôt du CSV qui doit être convertit en fichier texte en mettant les bonnes position.

PSPAD et NOTEPAD sont juste des éditeurs de texte qui me permettent au final de vérifier si le fichier est convertit comme il se doit.
En utilisant PSPAD j'ai voulu te montrer ou se trouvait le problème. Je suis obligé de faire cela car mon logiciel va rejeter la ligne.


Bref, peut être que je m'exprime mal :(

PS : Je te confirme, que j'ai modifier plusieurs choses dans ta macro et pleins de manip :
- J'ai des fois "argument invalide"
- J'ai eu parfois les bonnes position mais les dates erronées

Malheureusement je suis en déficit de connaissance à ce sujet je ne peu aller plus loin, j'aimerais bien pourtant faire seul :)
 

Staple1600

XLDnaute Barbatruc
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Re

bizounours
J'ai bien le réflexe d'analyser ta ligne de commande.
Indiques alors dans ton message les lignes de codes qui t'échappent.
*: Ou mieux, repostes ma dernière macro en mettant tes propres commentaires
je compléterai avec les miens ;) , si besoin

EDITION : Afin de continuer d'avancer, peux-tu indiquer le nom du logiciel qui utilisera le fichier texte généré. Merci

*: Je commence pour te motiver ;)
Code vba:
Sub EONIATEST_IV()
'crédits à Docmarti pour l'ouverture du CSV ;o)
'Déclarations des variables
Dim Chemin$, fCSV As Workbook, NewTxtFile As Workbook, fic, dl&, ncol, arrFor
'Définition du nom du dossier où sera le fichier Texte
Chemin = ThisWorkbook.Path & "\"
'Ouverture de la boite de dialogue pour ouvrir le *.csv
fic = Application.GetOpenFilename("Fichiers CSV (*.csv), *.csv")
If fic = False Then ' test si fic correspond bien à un fichier
Exit Sub
End If


Application.ScreenUpdating = False 'fige écran
' on ouvre le fichier sélectionné dans Excel
Set fCSV = Workbooks.Open(fic, , , 2, , , True, , , , , , False, local:=True)
' à toi la suite ;o)
Set NewTxtFile = Workbooks.Add(xlWBATWorksheet)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

bizounours

Voici une ligne à ajouter
(on garde le début du code puis la fin évidemment)

Donc avec cette ligne, on introduit des espaces dans les colonnes vides.
Code VBA:
'vers le début du code
With .Sheets("EXPORT_TXT")
.Activate
.Range("A1:BX1").FormulaR1C1 = "=CHAR(32)" '<----| AJOUT ICI
ncol = Array(1, 9, 50, 61, 76)
'vers la fin du code


Je te laisse tester chez toi.

PS: Merci de pas oublier d'indiquer le nom de ton logiciel devant exploiter le fichier texte.
 
Dernière édition:

bizounours

XLDnaute Nouveau
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Merci je vais regarder des que je rentre chez moi.
Mon logiciel est un logiciel de trésorerie pour professionnel tu risques ne pas connaitre si tu travail pas ds le monde de la finance :rolleyes: : C'est FRP Tresasury ed.Universe de Sage (anciennement XRT) :)
 

bizounours

XLDnaute Nouveau
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Bonjour,

Voici les lignes de codes avec mes commentaires Ouille, c'est peut être inexacte ! ;)

En tous cas bizarre, après rajout de lignes qui permet de rajouter les espaces, le fichier final comporte bien maintenant des espaces mais entre chaque tabulations. Cela a pour conséquence d'allonger les positions.

Ouppps j'ai relu l'ensemble des lignes de codes, franchement je pêche :(


Sub EONIATEST_IV()
'crédits à Docmarti pour l'ouverture du CSV ;o)
'Déclarations des variables
Dim Chemin$, fCSV As Workbook, NewTxtFile As Workbook, fic, dl&, ncol, arrFor
'Définition du nom du dossier où sera le fichier Texte
Chemin = ThisWorkbook.Path & "\"
'Ouverture de la boite de dialogue pour ouvrir le *.csv
fic = Application.GetOpenFilename("Fichiers CSV (*.csv), *.csv")
If fic = False Then ' test si fic correspond bien à un fichier
Exit Sub
End If

Application.ScreenUpdating = False 'fige écran

Set fCSV = Workbooks.Open(fic, , , 2, , , True, , , , , , False, local:=True) 'Ouvre le fichier CSV
Set NewTxtFile = Workbooks.Add(xlWBATWorksheet) 'Ouvre le nouveau fichier texte

fCSV.Sheets(1).Copy After:=NewTxtFile.Sheets(1): fCSV.Close False

With NewTxtFile
.Sheets(1).Name = "EXPORT_TXT" 'Nom de la feuille 1
With .Sheets(2) 'Feuille 2
.Name = "eonia" 'Nom de la feuille
.Columns("C:G").Delete: .Rows("1:8").Delete 'Suppression des 8 lignes
dl = .Cells(Rows.Count, 1).End(xlUp).Row
End With

With .Sheets("EXPORT_TXT") ' Utilisation de la Feuille 1 --> Export_Txt
.Activate 'Activation cette feuille
.Range("A1:BX1").FormulaR1C1 = "=CHAR(32)" 'Sélection de la plage de données A1:BX1 puis placement des espaces dans colonnes vides
ncol = Array(1, 9, 50, 61, 76) 'Déclaration du tableau avec Les differentes positions des colonnes concernées
arrFor = Array("=""IN""", "=""EON""", "=TEXT(eonia!RC[-49],""aaaammjj"")", "=eonia!RC[-59]", "=eonia!RC[-74]")
For i = 0 To 4
.Cells(1, ncol(i)).FormulaR1C1 = arrFor(i) 'FormulaR1C1 => Plage qui contient toutes les cellules de la feuille, nombre de colonne puis place la formule dans la cellule
Next i

.Range("A1:BX1").AutoFill Destination:=Range("A1:BX" & dl), Type:=xlFillDefault 'Sélection de la plage de données puis recopie la formule
.UsedRange.Value = .UsedRange.Value 'Plage qui contient toutes les cellules utilisés
End With

Application.DisplayAlerts = False 'inhibe alert message
.Sheets(2).Delete 'Suppression de la feuille 2
.SaveAs Chemin & "Export_Test" & Format(Date, "ddmmyyyy") & ".txt", xlText, False 'Enregistement du fichier "Export_Test + date" dans le même chemin que le fichier CSV
.Close True 'Il fermera si la condition est respectait
Application.DisplayAlerts = True
End With

MsgBox "Traitement terminé mais c'est pas beau à voir ;o) " 'Affiche un message dans une boîte de dialogue,
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Bonsoir à tous

bizounours
J'ai préféré joindre le module en PJ (pour gain de place)
J'ai ajouté mes commentaires ;) en respectant cette syntaxe:
'B: ligne de commentaire -> tes commentaires
'S: ligne de commentaire -> les miens

S'il faut un format bien précis, il faut que je revoie mon code ou passe par la méthode Open/Input
[FONT=Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif](Y aura t'il des entêtes dans le fichier texte ?)
[/FONT]
[FONT=Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif]Pour infos:
Je suis en train de tester d'autres pistes (dont celle-ci citée ci-dessus)
[/FONT]+ une piste qui passe par PowerShell (mais cela on verra plus tard)
 

Pièces jointes

  • csvToTxt.zip
    1.6 KB · Affichages: 16
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Création en auto d'un fichier texte à partir d'un fichier CSV

Re

bizounours
Avant de passer aux alternatives, une variante du code en cours (sans l'ajout des Chr(32) )
(on ne passe pas par les formules et changement du type de fichier : -> 21 (pour xlTextMSDOS) )

NB: Adaptes les Constantes avant de tester la macro.
Code:
Sub EONIATEST_V()
Dim fCSV As Workbook, NewTxtFile As Workbook, Fichier$, dl&, i&
Const Ici$ = "C:\Temp\": Const Fic$ = "eonia.csv": Fichier = Ici & Fic
Application.ScreenUpdating = False
Set fCSV = Workbooks.Open(Fichier, , , 2, , , True, , , , , , False, local:=True)
Set NewTxtFile = Workbooks.Add(-4167): fCSV.Sheets(1).Copy After:=NewTxtFile.Sheets(1): fCSV.Close False
With NewTxtFile
    .Sheets(1).Name = "EXPORT_TXT"
    With .Sheets(2)
        .Name = "eonia"
        .Columns("C:G").Delete: .Rows("1:8").Delete
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
    End With
    Set f = Sheets("eonia")
    With .Sheets("EXPORT_TXT")
    .Cells(1, 1).Resize(dl) = "IN": .Cells(1, 9).Resize(dl) = "EON"
        For i = 1 To dl
        .Cells(i, 50) = Format(f.Cells(i, 1), "yyyymmdd"): .Cells(i, 61) = f.Cells(i, 2): .Cells(i, 76) = f.Cells(i, 2)
        Next i
    End With
    Application.DisplayAlerts = False
    .Sheets(2).Delete
    .SaveAs Ici & "XTXT" & Format(Now, """J""dmyyyy""H""hhmmss") & ".txt", 21
    .Close True
    Application.DisplayAlerts = True
End With
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 182
dernier inscrit
moutassim.amine