XL 2013 [Résolu] Modifier un fichier .txt sans le supprimer

Lone-wolf

XLDnaute Barbatruc
Bonsoir le Forum :)

Voici, pour commencer la macro

VB:
Sub RemplaceTexte()
Dim GF As Object
Dim Cible As String
Dim fichier As String
Dim chemin As String
Dim AncTexte As String
Dim NouvTexte As String
Dim nom As String
Dim nomXml As String
Dim val As Long
   
    Sheets("Feuil1").Activate
    Set GF = CreateObject("Scripting.FileSystemObject")

    fichier = ThisWorkbook.Path & "\Fichiers\" & [A2].Text & ".txt"
    chemin = ThisWorkbook.Path & "\"
    chemin2 = ThisWorkbook.Path & "\Fichiers\"

    nom = [C2].Text
    AncTexte = [E2].Text
    NouvTexte = [F2].Text

    Open fichier For Input As #1
        val = FileLen(fichier)
        Cible = Input(val, 1)
  Close #1
 
  Cible = Application.Substitute(Cible, AncTexte, NouvTexte)
 
  Open fichier For Append As #1
       Print #1, Cible
           GF.CopyFile fichier, chemin2 & nom & ".txt"
    Set GF = Nothing
  Close #1
  Name fichier As chemin & nom & ".xml"
End Sub

Le problème c'est, qu'une fois la modification faite, elle supprime le fichier et j'ai du ajouter CopyFile pour qu'elle me remette le fichier de sauvegarde. Comment garder le fichier avec les modifications?
 

Pièces jointes

  • Modifier txt.zip
    24.8 KB · Affichages: 37

youky(BJ)

XLDnaute Barbatruc
Bonsoir à tous,
Dans ta macro il y a un truc que j'ai remarqué c'est........ val
val est un mot clé VBA
Perso je l'utilise pour convertir un label en chiffre
ou encore val("69 Lyon") renvoie 69
Test avec une autre variable
Bruno
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir Bruno :)

Merci pour la remarque, j'y avait pas pensé. Mais après refait un test, ça me supprime toujours le fichier.

VB:
Sub RemplaceTexte()
Dim Cible As String, Fichier As String, Chemin As String, _
AncTexte As String, NouvTexte As String, NomXml As String
Dim ValTxt As Long

    Sheets("Feuil1").Activate

    Fichier = ThisWorkbook.Path & "\Fichiers\" & [A2].Text & ".txt"
    Chemin = ThisWorkbook.Path & "\"

    AncTexte = [E2].Text
    NouvTexte = [F2].Text

    Open Fichier For Input As #1
    ValTxt = FileLen(Fichier)
    Cible = Input(ValTxt, 1)
    Close #1

    Cible = Application.Substitute(Cible, AncTexte, NouvTexte)
    NomXml = [C2].Text

    Open Fichier For Append As #1
    Print #1, Cible
    Close #1
    Name Fichier As Chemin & NomXml & ".xml"
End Sub
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
De toute façon on ne peut pas remplacer un enregistrement d'un fichier texte par un autre de longueur différente. Ça oblige à le réécrire en entier.
Alors ouvrez en un en Input sous numéro #1 et un autre For Output sous numéro #2.
Dans une boucle Do While Not EOF(1), lisez dans une variable Z As String chaque enregistrement du #1 par un Line Input #1, Z, modifiez le s'il y a lieu et Print #2, Z
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Dranreb :), le Forum :)

De toute façon on ne peut pas remplacer un enregistrement d'un fichier texte par un autre de longueur différente. Ça oblige à le réécrire en entier.

Tout dépend de ce que tu veux remplacer. Si tu veux remplacer par exemple, il a dit bonjour à sa maman par, il a dit 164 ans à sa maman, c'est sûr que ça n'a ni tête ni queue.

Pour la boucle, je n'ai pas vraiment saisi. Comme c'est la première fois que j'écrit le code en prenant un exemple, je suis paumé. :oops:
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Essaie comme ça :
VB:
Sub RemplaceTexte()
Dim Wst As Worksheet, Fichier As String, AncTexte As String, _
   NouvTexte As String, NomXml As String, ZLn As String
Set Wst = Sheets("Feuil1")
Fichier = ThisWorkbook.Path & "\Fichiers\" & Wst.[A2].Text & ".txt"
AncTexte = Wst.[E2].Text
NouvTexte = Wst.[F2].Text
NomXml = Wst.[C2].Text
Open Fichier For Input As #1
Open ThisWorkbook.Path & "\" & NomXml & ".xml" For Output As #2
Do While Not EOF(1)
   Line Input #1, ZLn
   Print #2, Replace(ZLn, AncTexte, NouvTexte)
   Loop
Close #1, #2
End Sub
 
Haut Bas