Ajout de texte dans un fichier .txt

LBi

XLDnaute Junior
Bonjour,
Je voudrais pouvoir insérer un texte en début de ligne dans des fichiers .txt à l'intérieur d'un dossier contenant beaucoup de courriers.

TEX|nom|NOM|x| à la lignes 2
TEX|prénom|PRENOM|x| à la lignes 3
TEX|date de naissance|DATENAIS|x| à la ligne 7
TEX|date d'examen|DATEEXAM|x| à la ligne 10

Voici le fichier original (tous les fichiers ont la même structure)
546445465464646
TOTO
JOSEPH
RUE DE LA LUNE

75000 PARIS
02/10/1970
7711689235820 58
354654653434131
29/05/2018

et voilà le fichier modifié que j'aimerais obtenir après insertion de " TEX|......... '
546445465464646
TEX|nom|NOM|x|TOTO
TEX|prénom|PRENOM|x|JOSEPH
RUE DE LA LUNE

75000 PARIS
TEX|date de naissance|DATENAIS|x|02/10/1970
7711689235820 58
354654653434131
TEX|date d'examen|DATEEXAM|x|29/05/2018

Ce qui me permettrait d’intégrer le nom, prénom, date de naissance et date d'examen dans un tableau biologique.

Le corps du texte des résultats biologiques à cette structure:
RES|HEMATIES x1 000 000|NFCGRC|N|4.34|/æL|3.84|5.12|N|F|0|/æL|0|0
RES|HÇmoglobine|NFCHBCC|N|13.1|g/100mL|11.8|15.0|N|F
RES|HÇmatocrite|NFCHTC|N|39.2|%|35.0|45.0|N|F
RES|V.G.M.|NFCVGMC|N|90|fL|83|97|N|F
RES|T.C.M.H.|NFCTCMHC|N|30.2|pg|27.5|33.2|N|F
RES|C.C.M.H.|NFCCCMHC|N|33.4|%|31.9|35.9|N|F
RES|IDC|NFCIDCC|N|13.8|%|0.0|16.9|N|F
RES|LEUCOCYTES|NFCBGC|N|6980|/æL|3800|9100|N|F

Merci d'avance de vos contributions.
 

Pièces jointes

  • fichier original.Txt
    121 bytes · Affichages: 31
  • fichier modifié.Txt
    568 bytes · Affichages: 39

Staple1600

XLDnaute Barbatruc
Re

@LBi
Je connais aussi bien ton projet que tu suis mal mes précédents conseils :D?
Recyclons, recyclons (en cette période de Tour de France ;))
Re

@LBi
Qu'à cela ne tienne !...;)
Il suffit de parcourir les archives du forum pour trouver des discussions où l'on cause du moyen de déterminer la première cellule non vide d'une colonne.
(Souvent on y évoquera de commencer la recherche vers le bas, on pourra lire ce genre de code: DerLig As Long
ou bien encore: DerLig=Cells(Rows.Count,1).End...)

Pour consulter les archives, il suffit de cliquer ici
La rechercher pour cette discussion pourrait s'axer par exemple sur:
Open fichier TXT, ecrire dans fichier TXT etc...
https://msdn.microsoft.com/fr-fr/vb...articles/open-statementUn indice de plus[/url
 

job75

XLDnaute Barbatruc
Bonjour LBi, JM,

Cette macro permet de modifier le fichier texte comme indiqué :
Code:
Sub ModifFichierTexte()
Dim fichier$, i&, a$(1 To 10)
fichier = ThisWorkbook.Path & "\fichier original.txt" 'à adapter
'---lecture---
Open fichier For Input As #1 '1ère ouverture
For i = 1 To 10
    Line Input #1, a(i)
Next
Close #1 '1ère fermeture
'---modif---
a(2) = "TEX|nom|NOM|x|" & a(2)
a(3) = "TEX|prénom|PRENOM|x|" & a(3)
a(7) = "TEX|date de naissance|DATENAIS|x|" & a(7)
a(10) = "TEX|date d'examen|DATEEXAM|x|" & a(10)
'---écriture---
Open fichier For Output As #1 '2ème ouverture
For i = 1 To 10
    Print #1, a(i)
Next
Close #1 '2ème fermeture
End Sub
Les 2 fichiers joints sont à télécharger dans le même répertoire (le bureau).

A+
 

Pièces jointes

  • ModifFichierTexte(1).xlsm
    22.5 KB · Affichages: 18
  • fichier original.Txt
    121 bytes · Affichages: 21
Dernière édition:

LBi

XLDnaute Junior
Bonsoir,
D'abord merci de votre contribution.
Malheureusement, la macro efface le reste du texte de la biologie.
1) Il faudrait seulement changer les lignes 2 3 7 et 10 sans rien changer d'autre.
2) J'aimerais bien l'intégrer au début de la macro1 pour qu'elle s’exécute après le choix du fichier.

voici la macro du projet
Sub Macro1()
Dim Chemin$, NomFichier$, t
Dim DerCol&
DerCol = Sheets("T1").Cells(4, Columns.Count).End(xlToLeft).Column + 1
t = Array(Array(1, 9), Array(2, 9), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1))
ThisWorkbook.Sheets("Entrée").Cells.Clear
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Sélectionner votre fichier, svp": .AllowMultiSelect = False: .Filters.Clear: .Filters.Add "Fichiers TXT", "*.txt", 1
.FilterIndex = 1: .InitialView = msoFileDialogViewProperties
If .Show = -1 Then
Chemin = .SelectedItems(1): Application.ScreenUpdating = False
Workbooks.OpenText Chemin, StartRow:=6, DataType:=xlDelimited, Other:=True, OtherChar:="|", FieldInfo:=t
ActiveWorkbook.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets("Entrée").Range("A1")
Application.CutCopyMode = False: ActiveWorkbook.Close False
Sheets("Nouvelle").Range("F1:I120").Copy
Sheets("T1").Cells(4, DerCol).PasteSpecial xlValues
Application.CutCopyMode = False
Columns.Replace "Ç", "é"
Else
MsgBox "Vous n'avez pas sélectionné de fichier!", vbCritical, "ERREUR"
End If
End With
End Sub
 

Pièces jointes

  • Tableau biologique essai.xlsm
    134.2 KB · Affichages: 29

job75

XLDnaute Barbatruc
Bonjour LBi, le forum,
Malheureusement, la macro efface le reste du texte de la biologie.
Il faut traiter toutes les lignes du fichier texte :
Code:
Sub ModifFichierTexte()
Dim fichier$, n&, a$()
fichier = ThisWorkbook.Path & "\fichier original.txt" 'à adapter
'---lecture---
Open fichier For Input As #1 '1ère ouverture
While Not EOF(1) 'EndOfFile: fin du fichier
    n = n + 1
    ReDim Preserve a(1 To n)
    Line Input #1, a(n)
Wend
Close #1 '1ère fermeture
'---modif---
a(2) = "TEX|nom|NOM|x|" & a(2)
a(3) = "TEX|prénom|PRENOM|x|" & a(3)
a(7) = "TEX|date de naissance|DATENAIS|x|" & a(7)
a(10) = "TEX|date d'examen|DATEEXAM|x|" & a(10)
'---écriture---
Open fichier For Output As #1 '2ème ouverture
For n = 1 To UBound(a)
    Print #1, a(n)
Next
Close #1 '2ème fermeture
End Sub
Le traitement séquentiel d'un fichier texte est très rapide.

Fichier (2).

Bonne journée.
 

Pièces jointes

  • ModifFichierTexte(2).xlsm
    22.8 KB · Affichages: 19
  • fichier original.Txt
    151 bytes · Affichages: 22

job75

XLDnaute Barbatruc
Re,

On peut éviter la boucle pour l'écriture :
Code:
Sub ModifFichierTexte()
Dim fichier$, n&, a$()
fichier = ThisWorkbook.Path & "\fichier original.txt" 'à adapter
'---lecture---
Open fichier For Input As #1 '1ère ouverture
While Not EOF(1) 'EndOfFile: fin du fichier
    n = n + 1
    ReDim Preserve a(1 To n)
    Line Input #1, a(n)
Wend
Close #1 '1ère fermeture
'---modif---
a(2) = "TEX|nom|NOM|x|" & a(2)
a(3) = "TEX|prénom|PRENOM|x|" & a(3)
a(7) = "TEX|date de naissance|DATENAIS|x|" & a(7)
a(10) = "TEX|date d'examen|DATEEXAM|x|" & a(10)
'---écriture---
Open fichier For Output As #1 '2ème ouverture
Print #1, Join(a, vbCrLf)
Close #1 '2ème fermeture
End Sub
Fichier (3).

A+
 

Pièces jointes

  • ModifFichierTexte(3).xlsm
    22.9 KB · Affichages: 27
  • fichier original.Txt
    151 bytes · Affichages: 31

LBi

XLDnaute Junior
Super ça marche.
1) J'ais essayé d'ajouter la macro 2 à la la macro 1 après le choix du fichier sans succès.:(
2) Je voudrais ajouter le nom du labo, mais il n'y a que le numéro. J'ais donc créé un tableau pour pouvoir faire la liaison Numéro vers Nom
3) Dans la Protéinurie, comment faire pour que la cellule ne se mette pas en rouge alors quelle est <0.15 si le labo ajoute un signe < (exemple <0.04 )
4) Dans la cellule "date d'examen" je n'arrive pas à mettre le format date "21 février 2017" au lieu de 21/02/2017. sur les colonnes F,G,H,I sans les fusionner (si je fusionne les 4 cellules, il se produit une erreur de copie vers T1).
Ouf! C'est tout pour le moment.
Je m’attelle à l'intégration de graphiques, je pense que j'aurai besoin de conseils pour les programmer. (peut être faut il ouvrir un autre fil de discussion sur ce sujet ?)
Bon fin de weekend
 

Pièces jointes

  • Toto.Txt
    18.2 KB · Affichages: 29
  • Tableau biologique.xlsm
    65 KB · Affichages: 17

job75

XLDnaute Barbatruc
Bonjour LBi, le forum,

Je vous laisse découvrir le fichier joint et sa feuille T1.

La Macro1 n'allait pas, je l'ai revue : maintenant en ligne 3 les cellules sont fusionnées.

La Macro2 est maintenant paramétrée et le fichier texte n'est plus modifié une fois traité.

Les MFC des cellules F10, F15:F16, F25:F26, F33 ont été revues (formules).

Enfin dans la feuille "Nouvelle" la formule en F37 a été revue, elle renvoyait une erreur.

A+
 

Pièces jointes

  • Tableau biologique(1).xlsm
    60.6 KB · Affichages: 17
  • Toto.Txt
    18.2 KB · Affichages: 30

job75

XLDnaute Barbatruc
Re,

J'ai simplifié les MFC, il n'y en a plus qu'une seule sur la plage F4:F121, formule :
Code:
=ET(H4="à";OU(--F4<G4;--F4>I4))+ET(H4="inf à";--F4>=I4)
Fichier (2).

A+
 

Pièces jointes

  • Tableau biologique(2).xlsm
    60.3 KB · Affichages: 22
  • Toto.Txt
    18.2 KB · Affichages: 23

LBi

XLDnaute Junior
Bonsoir,
Je me perds un peu dans la complexité du projet...

1) je trouve plus intéressant que la feuille T1 se remplisse au fur et à mesure des résultats biologiques comme sur le (Tableau biologique 4).
1a) problème pour incrémenter le numéro en ligne 1
1b) le nom du labo ne fonctionne pas


Tableau biologique(2)

2) Quand le labo met < 0.06 alors que la normale est à inf à 5 , la cellule se met en rouge ( due à la présence du <) j'ai mis en MFC (si la valeur de la cellule contient "< " interrompre la MFC ) si vous pouviez l’intégrer dans votre formule
=ET(H4="à";OU(--F4<G4;--F4>I4))+ET(H4="inf à";--F4>=I4) pour toutes les cellules " inf à "

3) La Macro2 est maintenant paramétrée et le fichier texte n'est plus modifié une fois traité.
3a) Quand je ré-ouvre le fichier, les textes "TEX|nom|NOM|x|" "TEX|prénom|PRENOM|x|" "TEX|date de naissance|DATENAIS|x|" et "TEX|date d'examen|DATEEXAM|x|" ont été rajoutés .

4) Si j’intègre " Toto 1 " puis " Toto 2 " la biologie de Toto 1 " est écrasée, puisque les premières lignes sont vides. ( il faudrait peut être tester par la date d'examen en ligne 3 qui, elle, est obligatoire).

Je vous remercie encore pour tout le temps que vous consacrez à mon projet.
Cordialement.
 

Pièces jointes

  • Tableau biologique 4.xlsm
    71.1 KB · Affichages: 18
  • Toto 1.Txt
    16.1 KB · Affichages: 23
  • Toto 2.Txt
    18.6 KB · Affichages: 25
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour LBi, le forum,

1) Je n'avais pas assez corrigé votre macro Macro1.

Pour calculer DerCol vous utilisiez la ligne 4, ça ne va pas.

En effet DerCol ne s'incrémentait pas si les cellules F4:I4 restaient vides.

Dans ce fichier (3) DerCol est calculée à partir de la ligne 1, il n'y a plus de problème.

2) Pour les MFC vous n'avez pas compris que -- permet de les neutraliser quand la cellule est un texte.

En effet dans ce cas --F4 renvoie une valeur d'erreur.

3) Enfin pour le nom du labo vous manquez de suite dans les idées.

Car c'est vous même en feuille "Labo" qui avez mis un espace devant les numéros de labo.

D'où votre formule DROITE(F134;13) en feuille "Nouvelle"


Bonne journée.
 

Pièces jointes

  • Tableau biologique(3).xlsm
    62 KB · Affichages: 23
  • Toto 1.Txt
    16.1 KB · Affichages: 24
  • Toto 2.Txt
    18.6 KB · Affichages: 21

LBi

XLDnaute Junior
Bonjour,

3) Car c'est vous même en feuille "Labo" qui avez mis un espace devant les numéros de labo.
3a) A l'ouverture des " vrais tableaux " il y a un espace après le numéro du labo d’où l'erreur - corrigée
2) Pour les MFC vous n'avez pas compris que -- permet de les neutraliser quand la cellule est un texte.
2a) Dans le Tableau biologique(3)bis, la feuille " Nouvelle" en ligne 16 la CRP est en rouge alors qu'elle est inf à 5. Faut-il mettre une MFC (si la valeur de la cellule contient "< " interrompre la MFC ) dans les cellules " inf à" ? ou pouvez-vous la rajouter dans votre formule.

Pouvez vous ?
1) Que la feuille T1 se remplisse au fur et à mesure des résultats biologiques comme sur le Tableau biologique (3)bis avec incrémentation du numéro en ligne 1
2) Voyez ce fichier (4) - suite de l'autre fil - et ces 2 macros dans le code de la feuille "T1" :
2a) Je ne trouve pas les 2 macros dans le Tableau biologique (4) pour pouvoir les intégrer au Tableau biologique(3)bis , elle doivent pourtant y être, car le graphique fonctionne bien !!

Bonne journée à vous aussi.
 

Pièces jointes

  • Toto 2.Txt
    18.7 KB · Affichages: 24
  • Tableau biologique(3)bis.xlsm
    57 KB · Affichages: 13