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:

Staple1600

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

Bonjour à tous

bizounours (bienvenue sur le forum)
Alors j'ai basiquement testé ceci(avec l'enregistreur de macros)
Mais je parie que ce n'est pas dans le mille, n'est-ce pas ? ;)
Pour tester, ouvrir le *.csv dans Excel,
•Supprimer les 8 premières lignes
•Insérer une feuille
•Se positionner sur cette feuille et seulement là lancer la macro
Code:
Sub test()
Dim dl&
dl = Sheets("qs.d.ieueonia").Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
Range("A1") = "IN"
Range("B1") = "EON"
Range("C1").FormulaR1C1 = "=TEXT(qs.d.ieueonia!RC[-2],""aaaammjj"")"
Range("D1").FormulaR1C1 = "=qs.d.ieueonia!RC[-2]"
Range("E1").FormulaR1C1 = "=qs.d.ieueonia!RC[-3]"
Range("A1:E1").Select
Application.Goto Reference:="R1C1:R" & dl & "C5"
Selection.FillDown
ChDir "C:\Temp"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="C:\Temp\ieueonia.txt", FileFormat:=xlTextMSDOS
ActiveWorkbook.Close True
End Sub
 

bizounours

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

Bonjour,

Déjà, un grand merci de consacrer un peu de votre temps :)

J'ai fais des tests et j'ai pleins de questions :)

Oupps je sais pas si j'ai bien fait la procédure
- J'ai ouvert le CSV
- J'ai insérer une feuille
- J'ai ensuite fait "ALT+F11"
- J'ai fais "nouveau module"
- J'ai inséré la macro puis enregistrer
- J'ai ajouté un dessin (un carré) et ajouter la macro dessus

Quand je lance la macro,
Excel devient gris, plus de feuilles
Par contre, il y a bien un fichier de créer "C:\Temp\ieueonia.txt"
Je constate en parallèle qu'il y a plus de données dans le fichier excel CSV. Est ce normal ?
Le fichier texte est plutôt pas mal formaté mais les zones ne sont pas à la bonne place.

- 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

J'ai remarqué qu'il y a toujours les ND, est ce possible de dire si tu vois "ND" tu ignores la ligne.

Arggg j'aimerais savoir faire comme vous :(

Merci :)
 

Staple1600

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

Re


J'ai fait ceci comme écrit précédemment ;)
Pour tester, ouvrir le *.csv dans Excel,
Supprimer les 8 premières lignes
•Insérer une feuille
•Se positionner sur cette feuille et seulement là lancer la macro
Donc pas de carré jaune ;)

Pour lancer la macro: Outils/Macros/test -> Exécuter
ou si Excel 2007 ou supérieur:
Sur le ruban, aller dans l'onget DEVELOPPEUR puis Macros -> Exécuter une macro

 

bizounours

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

Re,
J'ai oublié de l'indiquer mais j'ai bien supprimer les 8 lignes. Le truc c'est que la macro sauf erreur de ma part ne dit pas ou mettre les infos comme la date en position 50 par exemple.

Bein des que je rentre chez moi, je test avec votre methode pour lancer la macro :)

Encore merci ☺☺

PS : Veuillez m'excuser si je n'ai pas tt compris
 
Dernière édition:

Staple1600

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

Re

bizounours
J'ai préciser d’emblée ;)
Mais je parie que ce n'est pas dans le mille, n'est-ce pas ?
Car mon exemple, crée juste un fichier texte équivalent à ce qu'il y a dans le feuille 1 (c.a.d trois colonnes)
Donc dans le fichier texte, il y aura 3 champs séparés par des espaces.

S'il faut un format bien précis, il faut que je revoie mon code ou passe par la méthode Open/Input
(Y aura t'il des entêtes dans le fichier texte ?)
 

bizounours

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

Oupppps non aucun entête :) Données brute :)

Re

bizounours
J'ai préciser d’emblée ;)

Car mon exemple, crée juste un fichier texte équivalent à ce qu'il y a dans le feuille 1 (c.a.d trois colonnes)
Donc dans le fichier texte, il y aura 3 champs séparés par des espaces.

S'il faut un format bien précis, il faut que je revoie mon code ou passe par la méthode Open/Input
(Y aura t'il des entêtes dans le fichier texte ?)
 

bizounours

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

Re,
Je t'avoue que j'ai pas réussie :(
J'ai fait à la base un nouveau classeur
Ce classeur avait pour but de récupérer dans une feuille les données brutes du fichier banque de France à l'aide d'une macro récup (Car je voulais toutes les infos dans le même classeur)
Une seconde macro avait pour but de supprimer les 8 lignes
J'avais une troisième feuille composé de formules composés de "SI" et de "ET" permettant de récupérer les données de la feuille mais en réorganisant le tout sur une nouvelle feuille. Était indiquer également dans des nouvelles colonnes les fameux espaces.
Bref, je me suis compliqué la vie et je comprends plus rien lool
Voici ce que j'ai fais : Free - Envoyez vos documents : Pas terrible

Mes difficultés :
- Je me rappelle ce qui faut mettre au début de la macro pour utiliser une macro sur un fichier fermé !
- J'ai fais des macros toutes bête en faisant "enregistrer", je comprends pas le fait de supprimer les 8 lignes avec ma macro me casse mes formules dans mes onglets de formules.
- Même si je n'utilise pas mes boutons de macro, si s'enregistre mon fichier obtenu par les formules en txt. J'ai des tabulations !

Bref comme tu peux le voir je suis perdu, sniff

Bonne soirée :cool:

PS : L'idéal serait d'obtenir à l'aide de macro entièrement le fichier obtenu par mes formules en plus de la macro que tu m'as donné :)

PS 2 : Pour mes tests, "Marketdata.xlsm" se trouvait sur mon bureau et "qs.d.ieueonia.csv" se trouvait à la racine de C:\
 
Dernière édition:

Staple1600

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

Re

bizounours
Comme tu n'as pas mis le lien vers le *.csv, moi j'ai utilisé celui-ci
https://www.banque-france.fr/filead...t_Statistiques/Changes_et_Taux/page3_quot.csv
Est-ce le même fichier?
Si non, mets le lien vers le fichier *.csv que tu utilises.

PS: Inutile de passer par un autre hébergeur (merci pour les popups publicitaires !)
Tu peux joindre directement ton fichier exemple* ici dans ta discussion (comme tu le fis dans ton premier message :rolleyes:)

*: ce qui veut dire fichier allégé, sans fioritures (puisque nous sommes en test), donc l'essentiel et c'est tout ;)
Ton fichier ne devrait faire au plus que 250 ko ;) et moins si tu le zippes au préalable.

Quand au fichier *.cvs, inutile de le joindre, mets juste l'URL de la BDF où on peut le télécharger.
 
Dernière édition:

Staple1600

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

Re

bizounours
Donc à partir du fichier CSV que j'utilise, voici la dernière macro en cours sur mon PC.
Je te laisse adapter dans quelles colonnes tu veux mettre tes champs.
Pour le moment on ne fait qu'afficher le résultat final (|-> on enregistre pas encore en *.txt)
NB: Test Ok sur XL 2013

MODE OPERATOIRE:
1) Dans un classeur vierge (que par exemple tu enregistres en csv2txt.xlsm), tu copies dans un modulestandard le code ci-dessous.
2) Tu télécharges le fichier dont j'ai mis l'URL dans le message # (mais tu ne l'ouvres pas dans Excel)
3) Tu exécutes à partir de csv2txt.xlsm,la macro nommée: EONIATEST_II
Tu dis moi ensuite ce que tu penses du résultat de cette macro de test ;)

Code:
Sub EONIATEST_II()
'crédits à Docmarti pour l'ouverture du CSV ;o)
Dim fCSV As Workbook, NewTxtFile As Workbook, fic, dl&

fic = Application.GetOpenFilename("Fichiers CSV (*.csv), *.csv")
    If fic = False Then
    Exit Sub
    End If
 'fige écran
Application.ScreenUpdating = False

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

fCSV.Sheets("page3_quot").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
        .[A1] = "IN": .[B1] = "EON"
        .[C1].FormulaR1C1 = "=TEXT(eonia!RC[-2],""aaaammjj"")"
        .[D1].FormulaR1C1 = "=eonia!RC[-2]": .[E1].FormulaR1C1 = "=eonia!RC[-3]"
        .Range("A1:E1").Select
        Application.Goto Reference:="R1C1:R" & dl & "C5"
        Selection.FillDown
        .UsedRange.Value = .UsedRange.Value
    End With
    Application.DisplayAlerts = False 'inhibe alert message
    .Sheets(2).Delete
    Application.DisplayAlerts = True
End With

Application.ScreenUpdating = True
End Sub
 
Dernière édition:

bizounours

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

Bonjour :),

Le fichier csv est toujours le même que du premier post "qs.d.ieueonia.csv".

En effet je n'ai pas pu mettre le fichier car trop gros, j'ai voulu donc le couper en 3 malheureusement, les extension de découpage n'était pas accepter.

Puis je me suis reporter sur le champ URL mais impossible de mettre le lien car il me mettait fichier invalide.

J'ai fais plusieurs tentatives jamais réussi à le faire.

Il m'est impossible de réduire en taille mon fichier dû sans doute aux petite macro ??

Pour le fichier banque de france : Voici le lien --> https://www.banque-france.fr/economie-et-statistiques/changes-et-taux/les-taux-interbancaires.html

Il suffit de faire clique droit sur "Eonia" et "enregistrer sous" :) :)
 

Discussions similaires

Statistiques des forums

Discussions
312 219
Messages
2 086 369
Membres
103 198
dernier inscrit
CACCIATORE