XL 2010 Ajout supression ligne dans fichiers TXT

auverland

XLDnaute Occasionnel
Bonjour a tous,

Je cherche à balayer des fichiers TXT et ajouter une première ligne " azerty" si celle-ci n'existe pas...
J'ai trouvé un bout de macro qui passe en revue les fichiers mais j'arrive pas à mettre la condition si "azerty" présent passe au fichier suivant else créer ligne "azerty".

Code:
Sub Traitement()

Dim Fichier As Object
Dim Chemin As String, T As String
Dim TSource As String, TCible As String
Dim Compteur As Long

  'A adapter...
  Chemin = "D:\Public\Documents\test txt\"
 

  'Traitement
  With CreateObject("Scripting.FileSystemObject")
  For Each Fichier In .GetFolder(Chemin).Files
  If Fichier.Name Like "*.txt" Then
  Compteur = Compteur + 1
  'Ouvre le fichier texte et mémorise le contenu
  With .OpenTextFile(Chemin & Fichier.Name, 1)
  T = .readall
  .Close
  End With

  'Traite le contenu
  'If....
  'Crée le fichier texte modifié

  With .CreateTextFile(Chemin & "OK " & Fichier.Name, True)
  .WriteLine T
  .Close
  End With
  End If
  Next Fichier
  End With
  MsgBox Compteur & " fichiers traités."
End Sub


Merci de votre aide
C.Auverland
 

Pièces jointes

  • Classeur1.xlsm
    14.4 KB · Affichages: 57
  • X521_B557.txt
    358 bytes · Affichages: 52
  • X521_B558.txt
    501 bytes · Affichages: 50
  • X521_B559.txt
    841 bytes · Affichages: 49
  • X521_B560.txt
    820 bytes · Affichages: 54
Dernière édition:

Roland_M

XLDnaute Barbatruc
re

voir si ça convient !?
tu as les deux choix, Ajouter, et/ou Remplacer !
je me suis servi de tes var TSource TCible si ça convient pas dans ce sens à toi de voir !?

Code:
Sub Traitement()

Dim Fichier As Object
Dim Chemin As String, T As String
Dim TSource As String, TCible As String
Dim NbrDeFichLus As Long, NbrDeFichMod As Long

    'A adapter...
    Chemin = "E:\temp\"
    TSource = "azerty"
    TCible = "querty"
    
    'Traitement
    With CreateObject("Scripting.FileSystemObject")
       For Each Fichier In .GetFolder(Chemin).Files
           If Fichier.Name Like "*.txt" Then
              NbrDeFichLus = NbrDeFichLus + 1
             'Ouvre le fichier texte et mémorise le contenu
              With .OpenTextFile(Chemin & Fichier.Name, 1)
               T = .readall: .Close
              End With
             'Traite le contenu de la chaine
              If InStr(T, TSource) > 0 Then 'si TSource existe remplace par TCible
                 NbrDeFichMod = NbrDeFichMod + 1
                 T = Replace(T, TSource, TCible)
                 With .CreateTextFile(Chemin & "OK " & Fichier.Name, True)
                  .WriteLine T: .Close
                 End With
              Else 'sinon ajoute TCible
                 NbrDeFichMod = NbrDeFichMod + 1
                 With .CreateTextFile(Chemin & "OK " & Fichier.Name, True)
                  .WriteLine TCible: .WriteLine T: .Close
                 End With
              End If
           End If
       Next Fichier
    End With
    MsgBox NbrDeFichLus & " Fichier(s) Lu(s)." & vbLf & NbrDeFichMod & " Fichier(s) modifié(s)"
End Sub
 

auverland

XLDnaute Occasionnel
Bonsoir Roland_M
Merci cela fonctionne super bien

Si je comprend bien .WriteLine TCible: veux dire écrit la valeur de TCible

J'ai des ptites questions du coup
Comment on détermine dans cette macro qu'il doit l'écrire sur la première ligne ?
Comment pourrais-je écrire cette même macro mais qui réalise l'inverse ? (c'est a dire qu'elle supprime la première ligne si elle trouve querty)
Est-il possible à la place de re-créer un fichier le modifier directement ?

Si c'est trop compliqué ne perde pas votre temps cela m'avance déjà super bien
 

Roland_M

XLDnaute Barbatruc
Bonjour,

Ta question: Si je comprend bien .WriteLine TCible: veux dire écrit la valeur de TCible
Ma réponse: Oui ! tout comme la chaine T qui contient l'extrait du fichier complet !
c'est vrai que source et cible n'est peut être pas approprié mais ça c'est un détail qu'on peut régler.

Ta question: Comment on détermine dans cette macro qu'il doit l'écrire sur la première ligne ?
Ma réponse: avec WriteLine de la donnée en premier puis WriteLine de T le contenu restant
on pourrait remplacer dans n'importe quelle ligne, mais là il faut loader le fichier en tableau, c'est une autre façon de faire !

Ta question: Comment pourrais-je écrire cette même macro mais qui réalise l'inverse ? (c'est a dire supprimer la 1'ligne si c'est querty)
Ma réponse: oui !

Ta question: Est-il possible à la place de re-créer un fichier le modifier directement ?
Ma réponse: Oui !

Je peux t'arranger ça mais j'ai besoin de savoir ta démarche exacte !
Ma question: que souhaites tu exactement ? quelles seraient possibilités ?

avec plusieurs possibilités il va falloir saisir les paramètres nécessaires !
on peut créer un userform avec des choix: Remplacer / Incorporer / Supprimer
avec saisie du texte à rechercher avec choix:
supprimer
remplacer
incorporer
remplacer et incorporer si non trouvé

qu'en penses tu ?
 
Dernière édition:

auverland

XLDnaute Occasionnel
Bonjour,
Je reçois tout les jours des acquisitions brut sous forme Txt. Certains tech oublis de paramétrer la première ligne qui a une importance dans mes possibilités de traitement.

En faite j'ai deux soft :
_ un soft fermer qui utilise la première ligne pour déterminer le type de traitement à appliquer
_ une routine Matlab commune avec d'autres collègue qui elle ne mange que les fichiers dont le nom des voies est en première ligne.

Mon but est de pouvoir traiter mes acquisitions dans les deux systèmes facilement.
De ce faite traiter mes fichier de 3 manière différentes :
  1. ajouter la première ligne en cas d'oublie sur certains fichier,
  2. modifier la première ligne pour un traitement différent
  3. enfin supprimer la première ligne.
Le top serait donc modifier directement le fichier plutôt que de le réécrire afin de limiter les opérations, avec une sélection du répertoire à traiter plutôt que de modifier dans la macro serait le top.
Je suis pas suffisamment affuter sur excel pour réaliser tout cela et votre première Macro me permet à minima de traiter mes acqui sous un soft pour cela je vous remercie
 

Roland_M

XLDnaute Barbatruc
Bonjour,

bon, je regarde pour:
1) saisie du répertoire source
2) modifier le fichier sans en créer un autre
3) ajouter une ligne de texte si ce texte n'existe pas (en 1'ligne)
4) remplacer cette 1'ligne de texte et l'ajouter si n'existe pas ?
5) supprimer cette 1'ligne de texte

ça nécessite la création d'une boite de saisie des données !


OK ?
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
re

alors voilà, voir explications dans le fichier !
avec les possibilités suivantes:
'1) saisie du répertoire source
'2) modifier le fichier sans en créer un autre
'3) ajouter une 1'ligne de texte si n'existe pas
'4) remplacer uniquement la 1'ligne de texte
'5) remplacer ou Ajouter la 1'ligne de texte si n'existe pas
'6) supprimer la 1'ligne de texte

tout est dans un userform avec une macro d'appel dans un module !
si tu as des problèmes pour l'incorporer à ton classeur on avisera !

EDIT: je viens de remettre le fichier ! si tu veux bien le reprendre !
 

Pièces jointes

  • ModifFichText_Rol_M.xlsm
    26.6 KB · Affichages: 55
Dernière édition:

auverland

XLDnaute Occasionnel
Merci beaucoup je viens de tester sur mes premiers fichiers et cela fonctionne trop trop bien...

Je le lance sur mes 5000 fichiers (20Go de données) a contrôler mais à mon avis mise à pars le temps de traitement je vois pas pourquoi cela fonctionnerait pas aussi bien.
Je vous tiens au courant lorsqu'il aura fini... a mon avis demain du coup

Encore merci vous êtes trop fort
 

Discussions similaires

Statistiques des forums

Discussions
311 705
Messages
2 081 733
Membres
101 807
dernier inscrit
foued