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 :

SaveAs xlText (texte délimité par tabulations): supprimer la ligne vide à la fin


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 13
    Points
    13
    Par défaut SaveAs xlText (texte délimité par tabulations): supprimer la ligne vide à la fin
    Bonjour à tous,

    J'enregistre avec VBA des données en texte délimité par tabulations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        InjectFile.SaveAs _
            FileName:=InputFile.Path & Application.PathSeparator & "Output.txt", _
            FileFormat:=xlText, _
            ConflictResolution:=xlLocalSessionChanges
    Mon souci est que le fichier qui en résulte contient une ligne supplémentaire à la fin, qui contient uniquement un linebreak.
    Le logiciel où le fichier doit être injecté ne tolère pas cette ligne supplémentaire.

    Je ne peux pas laisser l'utilisateur ouvrir le fichier dans un éditeur de texte pour réparer ça: la base de donnée où on envoie le fichier est trop sensible, et une fausse manœuvre finira forcément par arriver.

    J'essaie de réparer ça en ouvrant le fichier et en supprimant le dernier caractère:
    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
    Sub EditTextFile()
     
     
    Dim strFinal As String      'Final string to print to file
    Dim strLine As String       'Line read from original text file
    Dim FilePath As String
     
    FilePath = "Output.txt"
    FilePath = ThisWorkbook.Path & Application.PathSeparator & FilePath
     
    strFinal = ""
     
    Open FilePath For Input As #1   'open the text file for reading
     
    Do While Not EOF(1)
    Line Input #1, strLine
    recordCounter = recordCounter + 1
    strFinal = strFinal + strLine + vbCrLf 'Linebreak
    Loop
     
    strFinal = Left(strFinal, Len(strFinal) - 2) 'Je supprime le Linebreak que j'ai moi-même introduit + 1 caractère
     
    Close #1 'close the file
     
    Open FilePath For Output As #1
    Print #1, strFinal
    'overwrite the file with the new string
    Close #1
     
    End Sub
    Mais même si j'augmente le nombre de caractères supprimés à la fin, c'est le dernier caractère de mes données qui est supprimé au lieu du Linebreak en trop.

    Je rame depuis plus de 2h là-dessus et je ne trouve pas.
    Est-ce qu'une bonne âme pourrait me sauver?

    Merci,
    Jules

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Chose certaine, avec le code suivant, tu auras toujours une ligne vide à la fin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Open FilePath For Output As #1
    Print #1, strFinal
    Close #1
    Pour ne pas en avoir, ajoute un ; sinon un retour de chariot est ajouté automatiquement.

    Cordialement

    Docmarti.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Mon héros!

    Le code pour virer la ligne supplémentaire fonctionne, avec le point virgule.

    J'en profite: est-ce qu'il y a un moyen de récupérer les données d'un fichier d'un coup plutôt que ligne par ligne à réassembler?
    J'ai adapté un code trouvé en ligne, mais ça ne me paraît pas très propre...

    Encore merci!
    Jules

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par Jules.LT Voir le message
    J'en profite: est-ce qu'il y a un moyen de récupérer les données d'un fichier d'un coup plutôt que ligne par ligne à réassembler?
    Oui il y a Input au lieu de Line Input :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    num = FreeFile
    Open f For Input As num
    maxi = FileLen(f)
    a = Input(maxi, num)
    Close num
    Tu peux aussi utiliser Get :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim res As String
        Dim L As Long
        num = FreeFile
        L = FileLen(F)
        res = Space(L)
        Open F For Binary Access Read As #num
        Get #num, , res
        Close num
    Cordialement

    Docmarti.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup, très bonne journée!

    Edit: En ayant appris un peu plus sur l'étiquette des forums d'entraide, voici le lien vers l'autre post que j'ai fait sur le sujet: Lien

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

Discussions similaires

  1. [LV2009] Supprimer les lignes vides dans un fichier texte
    Par Super2006 dans le forum LabVIEW
    Réponses: 3
    Dernier message: 11/11/2011, 14h32
  2. Supprimer une ligne vide dans un fichier texte
    Par Tibà22 dans le forum Débuter
    Réponses: 2
    Dernier message: 18/04/2011, 16h58
  3. Réponses: 6
    Dernier message: 30/10/2009, 16h13
  4. KSH: Supprimer des lignes vides (sans espaces ni tab) en fin de fichier text
    Par SmileAndFly dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 31/07/2008, 20h47
  5. Réponses: 3
    Dernier message: 05/05/2007, 02h44

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