Insertion ligne dans .txt avec VBA

bonjour tout le monde,

j'ai besoin de votre aide … plutôt qu'un long discours je vous montre un exemple :

T3M106 T11 M600H3D3 G43H1 G41/G42D1

T49

M98P6450

(B : 180 )

M63

G0G90G55X-68.252Y132.33B180.M3S10000

M61

G43H6Z220.M8

#102=6(CORRECTEUR)

G

T11M106 T6 M600H11D11 G43H1 G41/G42D1

T10

M98P6450

(B : 180 )

M63

G0G90G55X103.478Y78.044B180.M3S6500

M61

G43H49Z220.M8

.473F1200

T252M106 T89 M600H252D252 G43H1 G41/G42D1

T46

M98P6450

(B : 164.823 )

M63

G0G90G54.1P04X110.01Y-248.751B164.823M3S8200

M61

G43H42Z208.M8

#102=42(CORRECTEUR)

G1Z130.667F1500

G1Z128.667F800

G41D#102X115.035F700

G

(FRAISE SPHERIQUE O8)

(SUITE R5 BALAYAGE DROIT)

T371M106 T291 M600H371D371 G43H1 G41/G42D1

T67

M98P6450

ceci est mon document texte d'origine.

sur les lignes contenant "M106" , certaines chaines de caractères sont séparés par un espace.

ces espaces sont le repère pour insérer cette chaine dans les lignes suivantes.

voici le résultat souhaité :

T3M106

T11

M600H3D3

G43H1

G41/G42D1

T49

M98P6450

(B : 180 )

M63

G0G90G55X-68.252Y132.33B180.M3S10000

M61

G43H6Z220.M8

#102=6(CORRECTEUR)

G

T11M106

T6

M600H11D11

G43H1

G41/G42D1

T10

M98P6450

(B : 180 )

M63

G0G90G55X103.478Y78.044B180.M3S6500

M61

G43H49Z220.M8

.473F1200

T252M106

T89

M600H252D252

G43H1

G41/G42D1

T46

M98P6450

(B : 164.823 )

M63

G0G90G54.1P04X110.01Y-248.751B164.823M3S8200

M61

G43H42Z208.M8

#102=42(CORRECTEUR)

G1Z130.667F1500

G1Z128.667F800

G41D#102X115.035F700

T371M106

T291

M600H371D371

G43H1

G41/G42D1

T67

M98P6450

aujourd'hui j'ai ce fichier joint qui me permet de rechercher le M106 dans le fichier txt.

je souhaiterai pouvoir faire cette modification depuis celui-ci.

si il faut des points, points virgule , tiré ou autre symbole au lieu des espaces pour que ce soit plus simple, je peux le modifier rapidement.

j'espère que vous pourrai m'aider….

merci d'avance.

bonjour,

une proposition

Sub aargh()
    nf = "d:\downloads\testm106.txt"
    nfo = "d:\downloads\testm106o.txt"
    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)
                Print #2, v(i)
                If i <> UBound(v) Then Print #2, ""
            Next i
        Else
            Print #2, ligne
        End If
        Line Input #1, ligne
    Loop
    Close 1, 2
End Sub

salut H2SO4 ,

c'est bon j'ai réussi

ça marche mais ça ajoute plein de lignes vides ... possible d'éviter cela ?

Bonjou:r

et un fichier ou une partie de fichier original ???

Cordialement

FINDRH

findrh,

c'est réellement juste un fichier texte. copie colle mon premier document et tu aura le vrai fichier.

bonsoir,

c'est réellement juste un fichier texte. copie colle mon premier document et tu auras le vrai fichier.

c'est ce que j'ai fait pour réaliser la macro que j'ai mise, mais cela ne semble pas te convenir. Quand je lance la macro sur ton fichier, j'obtiens le résultat que tu nous as montré. (sans ligne supplémentaire). Donc ton fichier est différent et il y a bien un intérêt à le mettre.

Hh2so4,

désolé , erreur de ma part... je te joint un fichier. oubli le 1er copier coller que j'ai fait.

ton code fonctionne bien sauf qu'il créé un saut de ligne a chaque fois. possible de mettre à la ligne suivante sans le saut de ligne ?

et si c'est possible :

plutôt que de designer le chemin dans le code, créer une variable qui récupère le chemin indiquer en colonne G ; et que le code fasse le travail ligne par ligne car quand je vais l'utiliser ce sera pour modifier une multitude de fichier en même temps.

et également si possible que les modifications soit apportées directement dans le fichier source sans en créer un autre.

merci d'avance de ton aide.

21exemple-forum.txt (649.00 Octets)

bonjour,

ton fichier contient des lignes vides (sauts de ligne), faut-il les garder ?

cette version supprime toutes les lignes blanches (vides)

Sub aargh()
    With Sheets("data")
        dl = .Cells(Rows.Count, "G").End(xlUp).Row
        For j = 2 To dl
            nf = .Cells(j, "G").Value
            nfo = Replace(nf, ".txt", Format(Time, "hhmmss") & ".txt")
            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
                    If Trim(ligne) <> "" Then Print #2, ligne
                End If
                Line Input #1, ligne
            Loop
            Close 1, 2
            Kill nf 'supprimer le fichier original
            Name nfo As nf 'renommer le nouveau fichier avec le nom original
        Next j
    End With
End Sub

non, il faut garder les autres lignes vides ...

rebonjour,

non, il faut garder les autres lignes vides ...

que signifient les ... ? Que j'aurais dû le deviner ?

voici une version adaptée

Sub aargh()
    With Sheets("data")
        dl = .Cells(Rows.Count, "G").End(xlUp).Row
        For j = 2 To dl
            nf = .Cells(j, "G").Value
            nfo = Replace(nf, ".txt", Format(Time, "hhmmss") & ".txt")
            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
            Name nfo As nf 'renommer le nouveau fichier avec le nom original
        Next j
    End With
End Sub

rien rien... c'est juste une (mauvaise ) habitude quand j'écrit... désolé

h2so4,

une erreur est générée

erreuc code

re-bonjour,

je suppose que l'erreur est l' erreur 52 nom de fichier ou numéro incorrect.

la macro lit les noms de fichiers à ouvrir en colonne G à partir de la ligne 2, jusqu'à la dernière ligne de la colonne G contenant une donnée. Le nom du fichier doit contenir le chemin complet. S'il y a un nom de fichier qui n'est pas correct, la macro s'arrête avec ce message d'erreur.

H2SO4,

j'ai pigé..

certain de mes fichiers sont sans extension. sans le .TXT ça doit être pour ça que ça déconne

que faut il modifier dans ton code pour que ça marche ?

j'ai beaucoup de fichier à traiter et je ne peux pas les renommer avec le .txt.

re,

suite,

Sub aargh()
    With Sheets("data")
        dl = .Cells(Rows.Count, "G").End(xlUp).Row
        For j = 2 To dl
            nf = .Cells(j, "G").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

tout a l'air de bien fonctionner.

merci beaucoup h2so4

bonjour tout le monde,

je ressort ce sujet car je viens de m'apercevoir d'un soucis.

toutes les lignes qui sont ajouter via le code on pour conséquence de supprimer les derniers lignes ...

en d'autre termes si j'ai un txt de 100 lignes et que j'en ajoute 10 et bien mon texte fera toujours 100 lignes à la fin et ce sera les 10 dernières lignes qui auront été effacées.

h2so4 comme tu m'avais bien aidé sur ce coup ci , si tu as une solution n'hésite pas.

d'avance merci pour votre aide.

bonsoir,

h2so4 comme tu m'avais bien aidé sur ce coup ci , si tu as une solution n'hésite pas.

je veux bien aider, je ne vois absolument pas de quoi tu parles.

H2so4,

merci de ta réponse pour commencer en revanche,

je ne comprends pas ce que tu ne comprends pas.

c'est l'explication de mon souci que tu ne comprends pas, ou bien tu ne te souviens pas de ce sujet ?

bonjour,

peux-tu mettre un exemple du problème avec les instructions pour le reproduire ?

ce que tu as avant de lancer la macro, ce que tu obtiens après son exécution et ce que tu voulais obtenir.

Rechercher des sujets similaires à "insertion ligne txt vba"