• Initiateur de la discussion Initiateur de la discussion Fab_01
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Fab_01

XLDnaute Nouveau
Bonjour,

J'ai débuté il y a quelques semaines en VBA et suis parvenu à faire quelques macros qui me permettent de sortir des stats. Pour l'instant j'utilise les macros que pour Excel, mais j'aimerais aller plus loin en modifiant des fichier TXT.

Je m'explique, régulièrement je reçois des fichier txt que je dois modifier de la façon suivante :

Repérer dans chaque fichier les lignes suivantes : "E2EDP19001 002"

Et les remplacer par
"E2EDP19001 002MOB"

Ces lignes peuvent se trouver plusieurs fois dans un fichier.

Je sais comment ouvrir un fichier, écrire dans un fichier mais je ne sais pas comment repérer ces lignes et les écraser par ma correction.

Je précise aussi que ces fichiers sont dans un répertoire spécifique et que l'idéal serait que la macro les contrôle tous sans devoir introduire les noms des fichiers les uns après les autres.

Pour l'instant je me débrouille avec Python, qui fonctionne assez bien, car il me crée un sous répertoire ensuite il y copie les fichiers et les corrige. De cette façon je n'écrase pas le fichier original.

Mais ayant goûté à VBA, j'aimerais pouvoir faire la même chose avec une macro.

Merci d'avance pour votre aide
 
Re : VBA modifier TXT

bonsoir

s'il s'agit d'un fichier ligne par ligne style fichier séquentiel
voir avec ce code à adapter pour le chemin\fichier !

Code:
Public Sub ModifDonnees()
ReDim Tablo(0) As String
Dim NomDuFich As String, NoDuFich As Integer
Dim ChaineSource As String, ChaineDestin As String
Dim Ligne As String, TotLig As Long, I As Long
'init
NomDuFich = "chemin\??????????????" '<<< à remplir !!!!!!!!!
ChaineSource = "E2EDP19001 002"
ChaineDestin = "E2EDP19001 002MOB"
' load
NoDuFich = FreeFile: TotLig = 0
Open NomDuFich For Input As #NoDuFich
Do While Not EOF(NoDuFich)
   Line Input #NoDuFich, Ligne
   If Ligne = ChaineSource Then
      Ligne = ChaineDestin
   Else
      I = InStr(Ligne, ChaineSource)
      If I Then Ligne = Left(Ligne, I - 1) & ChaineDestin & Mid(Ligne, I + Len(ChaineSource))
   End If
   TotLig = TotLig + 1: ReDim Preserve Tablo(TotLig): Tablo(NoLig) = Ligne
Loop
Close NoDuFich
'recopie
If TotLig > 0 Then
   NoDuFich = FreeFile: Open NomDuFich For Output As #NoDuFich
   For I = 1 To TotLig: Print #NoDuFich, Ligne: Next
   Close NoDuFich
End If
End Sub
 
Re : VBA modifier TXT

Bonsoir Fab_01, Roland_M, le Forum,

Sauf erreur, on devrait pouvoir éviter la boucle avec FSO et traiter le fichier d'un seul bloc :
Code:
[COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Option Explicit[/COLOR]

[COLOR=NAVY]Sub[/COLOR] Traitement()
[COLOR=GREEN]'myDearFriend!  -  www.mdf-xlpages.com[/COLOR]
[COLOR=NAVY]Dim[/COLOR] Chemin [COLOR=NAVY]As String[/COLOR], F1 [COLOR=NAVY]As String[/COLOR], F2 [COLOR=NAVY]As String[/COLOR], T [COLOR=NAVY]As String
Dim[/COLOR] ChaineSource [COLOR=NAVY]As String[/COLOR], ChaineDestin [COLOR=NAVY]As String[/COLOR]
    
    [COLOR=GREEN]'A adapter...[/COLOR]
    ChaineSource = "E2EDP19001 002"
    ChaineDestin = "E2EDP19001 002MOB"
    Chemin = "C:\Temp\"
    F1 = "Source.txt"
    F2 = "Resultat.txt"
    
    [COLOR=GREEN]'Traitement[/COLOR]
    [COLOR=NAVY]With[/COLOR] CreateObject("Scripting.FileSystemObject")
        [COLOR=GREEN]'Ouvre le fichier texte et mémorise le contenu[/COLOR]
        [COLOR=NAVY]With[/COLOR] .OpenTextFile(Chemin & F1, 1)
            T = .readall
            .[COLOR=NAVY]Close
        End With[/COLOR]
        [COLOR=GREEN]'Traite le contenu[/COLOR]
        T = Replace(T, ChaineSource, ChaineDestin)
        [COLOR=GREEN]'Crée le fichier texte modifié[/COLOR]
        [COLOR=NAVY]With[/COLOR] .CreateTextFile(Chemin & F2, [COLOR=NAVY]True[/COLOR])
            .WriteLine T
            .[COLOR=NAVY]Close
        End With
    End With
End Sub[/COLOR]
Cordialement,
 
Dernière édition:
Re : VBA modifier TXT

Re,

... régulièrement je reçois des fichier txt que je dois modifier de la façon suivante :

Repérer dans chaque fichier les lignes suivantes : "E2EDP19001 002"

Et les remplacer par
"E2EDP19001 002MOB"

Ces lignes peuvent se trouver plusieurs fois dans un fichier.

Je sais comment ouvrir un fichier, écrire dans un fichier mais je ne sais pas comment repérer ces lignes et les écraser par ma correction.

Je précise aussi que ces fichiers sont dans un répertoire spécifique et que l'idéal serait que la macro les contrôle tous sans devoir introduire les noms des fichiers les uns après les autres.

Pour l'instant je me débrouille avec Python, qui fonctionne assez bien, car il me crée un sous répertoire ensuite il y copie les fichiers et les corrige. De cette façon je n'écrase pas le fichier original.

Et pour tenter de répondre au mieux à la demande :
Code:
[COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Option Explicit[/COLOR]

[COLOR=NAVY]Sub[/COLOR] Traitement()
[COLOR=GREEN]'myDearFriend!  -  www.mdf-xlpages.com[/COLOR]
[COLOR=NAVY]Dim[/COLOR] Fichier [COLOR=NAVY]As Object[/COLOR][COLOR=NAVY]
Dim[/COLOR] Chemin [COLOR=NAVY]As String[/COLOR], T [COLOR=NAVY]As String
Dim[/COLOR] ChaineSource [COLOR=NAVY]As String[/COLOR], ChaineDestin [COLOR=NAVY]As String
Dim[/COLOR] Compteur [COLOR=NAVY]As Long[/COLOR]

    [COLOR=GREEN]'A adapter...[/COLOR]
    Chemin = "C:\Temp\"
    ChaineSource = "E2EDP19001 002"
    ChaineDestin = "E2EDP19001 002MOB"
    
    [COLOR=GREEN]'Traitement[/COLOR]
    [COLOR=NAVY]With[/COLOR] CreateObject("Scripting.FileSystemObject")
        [COLOR=NAVY]For Each[/COLOR] Fichier [COLOR=NAVY]In[/COLOR] .GetFolder(Chemin).Files
            [COLOR=NAVY]If[/COLOR] Fichier.Name [COLOR=NAVY]Like[/COLOR] "*.txt" [COLOR=NAVY]Then[/COLOR]
                Compteur = Compteur + 1
                [COLOR=GREEN]'Ouvre le fichier texte et mémorise le contenu[/COLOR]
                [COLOR=NAVY]With[/COLOR] .OpenTextFile(Chemin & Fichier.Name, 1)
                    T = .readall
                    .[COLOR=NAVY]Close
                End With[/COLOR]
                [COLOR=GREEN]'Traite le contenu[/COLOR]
                T = Replace(T, ChaineSource, ChaineDestin)
                [COLOR=GREEN]'Crée le fichier texte modifié[/COLOR]
                [COLOR=NAVY]With[/COLOR] .CreateTextFile(Chemin & "OK " & Fichier.Name, [COLOR=NAVY]True[/COLOR])
                    .WriteLine T
                    .[COLOR=NAVY]Close
                End With
            End If
        Next[/COLOR] Fichier
    [COLOR=NAVY]End With[/COLOR]
    MsgBox Compteur & " fichiers traités."
[COLOR=NAVY]End Sub[/COLOR]
Cordialement,
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
120
Retour