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 Sub

espè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 Sub

h2so4,

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 Sub

Bonjour 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 !

Rechercher des sujets similaires à "insertion ligne txt vba"