IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Modifier une ligne d’un fichier .txt (et seulement celle-ci)


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut Modifier une ligne d’un fichier .txt (et seulement celle-ci)
    Modifier une ligne d’un fichier .txt (et seulement celle-ci)

    Bonjour à Tout le Forum,

    Dans le cadre d’une discussion :
    http://www.developpez.net/forums/d11...gnes-colonnes/
    #43
    Et pour avancer :

    Suivant le bon tuto:
    Manipulation des fichiers en VBA
    Par Christophe WARIN
    Il est dit (concernant les fichiers texte) :
    Une nouvelle fois, il faut choisir entre lecture et écriture. Impossible d'utiliser les deux modes simultanément.
    Or mon besoin est (si cela est possible, bien sur):
    Modifier la première ligne d'un fichier .txt et ,donc, ne pas avoir à réécrire les autres lignes.

    Mon code
    Pour l'ensemble de la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                                  Dim Appli                   As Object
                                    Dim Creation                As Object
     
                                    Dim Chemin                  As String
                                    Dim NomFichier              As String
     
        Chemin = "C:\.............\.................\"
        NomFichier = "fichierdebase.txt"
        Set Appli = CreateObject("Scripting.FileSystemObject")
    Le partie du code que je voudrais optimiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                               Dim Lecture                         As String
        Set Creation = Appli.CreateTextFile(Chemin & "TempB.txt", True)
        Open Chemin & NomFichier For Input As #1
        Do While Not EOF(1)
            Input #1, Lecture
            If Not IsNumeric(Split(Lecture, ";")(0)) Then ' si le premier enregistre n'est pas un numérique
            ' On considère que c'est les entêtes et on replace le "." par "_"
            ' Si tous les premiers enregistrements ne sont pas des numériques on adaptera
                Creation.Write Replace(Lecture, ".", "_") & vbCrLf
            Else
                Creation.Write Lecture & vbCrLf
            End If
        Loop
        Close #1
    Dans ce code : on doit créer un nv fichier (j’aimerais m’en passer).
    Faire un test pour déterminer si ce sont les entêtes de champs (je préférais savoir si c'est la première ligne, m’en contenter et pouvoir la corriger).
    Et recopier l'ensemble des lignes du fichier (je préférais m'en dispenser).

    Je ne souhaite qu’une piste …..
    Ou bien comme réponse : « c’est impossible » compte tenu du tuto cité si dessus. Et oui !

    Sachant, bien sur, quand adaptant le code si dessus on peut corriger (et en fait tout faire)), mais mon but est de diminuer le temps dans l’exécution du traitement.

    Par avance merci et bonne journée à tous
    Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
    ---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Ci dessous une méthode qui ouvre le fichier en lecture et en écriture afin d'apporter les modifications

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Dim fso As Scripting.FileSystemObject
    Dim FsoRepertoire As Scripting.Folder
    Dim FsoFichier As Scripting.File
    Dim Fichier As String
    Dim strTF As Scripting.TextStream
    Dim strRead As Scripting.TextStream
     
     
    Dim strLigne As String
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set FsoRepertoire = fso.GetFolder("C:\Téléchargements\Test")
     
     
    'Boucle sur fichiers du repertoire
    For Each FsoFichier In FsoRepertoire.Files
        Fichier = FsoFichier.Path
        FsoFichier.Move (FsoFichier.ParentFolder & "\SAV.txt") 'Renomme le fichier source
     
        Set strTF = fso.CreateTextFile(Fichier) 'Création du fichier de destination avec le nom du fichier source
        Set strRead = FsoFichier.OpenAsTextStream(ForReading) 'lecture du fichier source
     
        While Not strRead.AtEndOfStream
            strLigne = strRead.ReadLine
            If Left(strLigne, 3) = "TOT" Then 'Test la ligne de titre si besoin de la remplacer => ici si elle commence par TOT
                strTF.WriteLine "TATA"
            Else
                strTF.WriteLine strLigne
            End If
        Wend
     
        strRead.Close
        strTF.Close
     
        FsoFichier.Delete
     
    Next
    EDIT : N'ayant à ma connaissance aucune méthode pour la lecture/écriture en simultanée (Sauf si écriture à la suite du fichier)
    Jérôme

  3. #3
    Membre chevronné Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Points : 2 056
    Points
    2 056
    Par défaut
    Bonjour Jérôme,
    Et merci de ta réponse
    C’est globalement ce que je fais

    EDIT : N'ayant à ma connaissance aucune méthode pour la lecture/écriture en simultanée (Sauf si écriture à la suite du fichier)
    Je m’y attendais

    Encore merci
    Cordialement

    Bon courage
    Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
    ---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. modifier une ligne dans fichier txt
    Par mvc_dev dans le forum C#
    Réponses: 6
    Dernier message: 14/05/2012, 13h23
  2. Réponses: 20
    Dernier message: 30/04/2009, 18h02
  3. Modifier une ligne de fichier
    Par mansour67 dans le forum Qt
    Réponses: 1
    Dernier message: 16/04/2008, 18h04
  4. Lecture d'une ligne précise fichier txt
    Par House MD dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/11/2007, 15h20
  5. [vb.net] ajouter une ligne à un fichier txt existant
    Par tbdarkspirit dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/05/2007, 11h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo