Insertion ligne dans .txt avec VBA
alors voici le texte avant modification :
%
O0312(90540 OPE1)
T4M106£T80£M600H4D4£G43H1£G41/G42D1
M98P3120
M11
G00G90G54X-115.897Y173.921B0S10000M03
M10
T80M106£T6£M600H80D80£G43H1£G41/G42D1
T2
M98P3120
G00G90G54X-85.142Y112.412B0S1500M03
(COMON Z BALANCEMENT)
G10L2P0Z#103
T6M106££M600H6D6£G43H1£G41/G42D1
M98P3120
M11
M99
%
Les symboles £ servent a repérer l'endroit ou on doit passer à la ligne. (comme si on appuyez sur entré dans texte normal)
voici donc le resultat souhaité :
%
O0312(90540 OPE1)
T4M106
T80
M600H4D4
G43H1
G41/G42D1
M98P3120
M11
G00G90G54X-115.897Y173.921B0S10000M03
M10
T80M106
T6
M600H80D80
G43H1
G41/G42D1
T2
M98P3120
G00G90G54X-85.142Y112.412B0S1500M03
(COMON Z BALANCEMENT)
G10L2P0Z#103
T6M106
M600H6D6
G43H1
G41/G42D1
M98P3120
M11
M99
%
or le résultat obtenu avec le code est :
%
O0312(90540 OPE1)
T4M106
T80
M600H4D4
G43H1
G41/G42D1
M98P3120
M11
G00G90G54X-115.897Y173.921B0S10000M03
M10
T80M106
T6
M600H80D80
G43H1
G41/G42D1
T2
M98P3120
G00G90G54X-85.142Y112.412B0S1500M03
(COMON Z BALANCEMENT)
G10L2P0Z#103
T6M106
M600H6D6
G43H1
G41/G42D1
M98P3120
M11
la difference est minime mais porte sur les dernieres lignes du texte qui ont disparus .
de plus j'ai l'impression que plus le texte contient de lignes et plus le nombre de lignes supprimées est important.
voici le code actuel qui me permet d'effectuer la modification :
Sub mise_a_la_ligne()
With Sheets("data")
dl = .Cells(Rows.Count, "G").End(xlUp).Row
For j = 2 To dl
nf = .Cells(j, "G").Value & .Cells(j, "A").Value
If Dir(nf) = "" Then
MsgBox "fichier " & nf & " non trouvé'"
Else
nfo = nf & Format(Time, "hhmmss")
Open nf For Input As 1
Open nfo For Output As 2
Line Input #1, ligne
Do Until EOF(1)
s = InStr(ligne, "M106")
If s > 0 Then
v = Split(ligne, "£")
For i = LBound(v) To UBound(v)
If v(i) <> "" Then Print #2, v(i)
Next i
Else
Print #2, ligne
End If
Line Input #1, ligne
Loop
Close 1, 2
Kill nf 'supprimer le fichier original
' If InStr(nf, ".txt") = 0 Then nf = nf & ".txt" 'on ajoute l'extension .txt si elle n'existe pas, enlever le ' initial pour activer cette ligne
Name nfo As nf 'renommer le nouveau fichier avec le nom original
End If
Next j
End With
End Subespère que mes explications suffirons a ce que tu puisse m'aider.
merci d'avance.
bonsoir,
essaie ceci
Sub mise_a_la_ligne()
With Sheets("data")
dl = .Cells(Rows.Count, "G").End(xlUp).Row
For j = 2 To dl
nf = .Cells(j, "G").Value & .Cells(j, "A").Value
If Dir(nf) = "" Then
MsgBox "fichier " & nf & " non trouvé'"
Else
nfo = nf & Format(Time, "hhmmss")
Open nf For Input As 1
Open nfo For Output As 2
Do
Line Input #1, ligne
s = InStr(ligne, "M106")
If s > 0 Then
v = Split(ligne, "£")
For i = LBound(v) To UBound(v)
If v(i) <> "" Then Print #2, v(i)
Next i
Else
Print #2, ligne
End If
Loop Until EOF(1)
Close 1, 2
Kill nf 'supprimer le fichier original
' If InStr(nf, ".txt") = 0 Then nf = nf & ".txt" 'on ajoute l'extension .txt si elle n'existe pas, enlever le ' initial pour activer cette ligne
Name nfo As nf 'renommer le nouveau fichier avec le nom original
End If
Next j
End With
End Subh2so4,
je viens de tester sur plusieurs fichiers, tout à l'air de fonctionner correctement.
merci beaucoup.
je reviens sur ce sujet....
le code fonctionne tres bien mais je suis confronté a un souci...
parfois la ligne à splitter commence par G0 et non M106
est il possible de mettre un "OR"
dans la ligne de code
s = InStr(ligne, "M106")
?
merci d'avance.
re
bonjour à tous
jamais jamais jamais!!! ouvrir un index de fichier en dur avec open (il se peut que cet index dans windows soit utilisé )
en vba on a freefile
on fait le tout d'un coup
Sub test()
Dim A, B, chaine, X, Y
A = "C:\Users\patricktoulon\Desktop\exemple.txt"
B = "C:\Users\patricktoulon\Desktop\resultat.txt"
X = FreeFile: Open A For Input As #X: lachaine = Input$(LOF(X), #X): Close #X
lachaine = Replace(lachaine, "M106", vbCrLf)
'lachaine = Replace(lachaine, vbCrLf & vbCrLf, vbCrLf) 'débloquer cette ligne ,si il faut supprimer les doubles saut de ligne existants
Y = FreeFile: Open B For Output As #Y: Print #Y, lachaine: Close #Y
End SubBonjour PatrickT,
amais jamais jamais!!! ouvrir un index de fichier en dur avec open
Tu as raison c'est une bonne pratique d'utiliser freefile. Mais à ma connaissance il n'y a aucun risque d'interaction avec windows. Le seul risque que tu aies c'est que l'index que tu as mis en dur, soit déjà considéré comme utilisé par l'interpréteur VBA, (parce que tu as mal programmé ou parce que l'index n'a pas été libéré correctement, suite à un arrêt intempestif de ta macro par exemple), et dans ce cas tu recevras un message d'erreur (erreur 55, fichier déjà ouvert). Donc "jamais est excessif" si on sait ce que l'on fait. Utiliser freefile est une bonne pratique, tout comme utiliser option explicit et déclarer les variables.
re
h2so4 non
par exemple un fichier texte est ouvert ailleurs que par vba
si tu ouvre avec le même index c'est mort , la pile c'est pour windows pas que pour vba
je peux te le confimer je traite beaucoup de xml en texte avec une app perso en vb.net et si je travaille des csv en vbaen même temps
si j'utilise un index en dur , je suis sur à 90% de planter
je peux te le dire ca m'est arrivé plein de fois avant que je me decide a venir modifier le code vba avec freefile
j'avais trop la fleme
re patrick,
je peux te le confimer je traite beaucoup de xml en texte avec une app perso en vb.net et si je travaille des csv en vbaen même temps
je n'ai jamais constaté ce problème, mais je te crois.
si j'utilise un index en dur , je suis sur à 90% de planter
Comment se concrétise ce plantage ? corruption du fichier ou message d'erreur ?
re
c'est bien le message d'erreur que tu a cité précédemment la 55
merci patrickT !