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 :

Supprimer une ligne fichier txt depuis vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2013
    Messages : 64
    Points : 56
    Points
    56
    Par défaut Supprimer une ligne fichier txt depuis vba
    Bonjour le forum,
    Je suis en train de créer une macro qui permet d'importer les données d'un fichier texte dans Excel. Mais il y a plus de lignes dans le fichier txt que de lignes dispos dans un excel .xlsx
    Dans la logique, voilà comment je procéde :
    1. Ouvrir le txt
    2. Supprimer le slignes contenant "Data" (ou un autre mot, je dois définir cela) du fichier txt
    3. recopier le slignes sur excel
    4. Fermer le fichier txt

    Je viens de terminer la macro à l'aide d'autre sposts sur le forum mais je bloque sur un paramètre : Lorsque je demande d'identifier les lignes contenant "Data", il ne les trouve pas et recopie en intégralité les données du txt.
    Voici ma macro ci dessous (uniquement pour supprimer les lignes contenant data, pas pour coller dans excel) avec le fichier txt associé. Pouvez-vous me donner un petit coup de main svp?
    Merci à vous
    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
    'Supprimer des lignes inutiles pour exécuter dans excel
    Sub test()
     
     
     
    Dim myFso As Object, Fichier1 As Object, Fichier2 As Object
    Dim pathFichierTxt As String, pathNouvFichierTxt As String, LigneTxt As String
     
    pathFichierTxt = "C:\Users\chemin\Nouveau document texte.txt"
    pathNouvFichierTxt = Left(pathFichierTxt, InStrRev(pathFichierTxt, "\")) & "tmp_" & Format(Now, "yyyymmddhhnnss") & ".txt"
    Set myFso = CreateObject("Scripting.FileSystemObject")
    Set Fichier1 = myFso.OpenTextFile(pathFichierTxt, 1)
    Set Fichier2 = myFso.CreateTextFile(pathNouvFichierTxt, True)
     
    While Not Fichier1.AtEndOfStream
        LigneTxt = Fichier1.ReadLine
        'If Not UCase(LigneTxt) Like "Data" Then Fichier2.WriteLine LigneTxt
        If InStr(UCase(LigneTxt), "Data") = 0 Then Fichier2.WriteLine LigneTxt
    Wend
    Fichier1.Close
    Fichier2.Close
    myFso.DeleteFile pathFichierTxt, True
    Name pathNouvFichierTxt As pathFichierTxt
    Set myFso = Nothing
    Set Fichier1 = Nothing
    Set Fichier2 = Nothing
     
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Salut

    Ta demande consistant à ouvrir un txt pour récupérer certaines lignes dans Excel, je ne compends pas pourquoi tu essaies de les écrire dans un autre txt

    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
    Sub Test()
      Dim Channel As Long
      Dim TxtLine As String
      Dim FileName As String
      Dim r As Range
     
      Set r = Range("a1")
      FileName = "n:\test.txt"
      Channel = FreeFile
      Open FileName For Input As Channel
      Do While Not EOF(Channel)
        Line Input #Channel, TxtLine
        If InStr(1, TxtLine, "data", vbTextCompare) > 0 Then
          r.Value = TxtLine
          Set r = r(2)
        End If
      Loop
      Close #Channel
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2013
    Messages : 64
    Points : 56
    Points
    56
    Par défaut
    Bonjour, et merci pour la réponse, ça fonctionne, le data est reconnu.
    Par contre je ne parviens pas à supprimer la ligne qui contient "Data"...Est-ce normal ?
    L'idée serait de supprimer la ligne pour pouvoir exporter les données par la suite (j'ai déjà le code pour l'export).

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Ta demande initiale ne demandait pas de supprimer la ligne. De ce que j'ai compris de ta demande, tu veux récupérer dans Excel les lignes d'un fichier TXT en fonction de la présence du mot "Data" dans la ligne. Si tu souhaites autre chose, sois précis dans l'énoncé de ta demande...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2013
    Messages : 64
    Points : 56
    Points
    56
    Par défaut
    Si, il faut supprimer la ligne, je reformule mon énoncé initial :
    1. Ouvrir le txt
    2. Supprimer les lignes contenant "Data" (ou un autre mot, je dois définir cela) du fichier txt
    3. Recopier le reste des lignes sur excel (celles qui ne contiennent pas le mot data : qui n'ont donc pas été supprimées)
    4. Fermer le fichier txt

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Ok.

    Il n'est pas possible de supprimer une ligne d'un fichier txt. Tu peux:
    • soit ouvrir un nouveau txt et y copier les bonnes lignes et les copier également dans XL, puis fermer ce fichier, supprimer l'ancien et renommer le nouveau;
    • soit copier les bonnes lignes dans Excel, supprimer l'ancien txt puis sauver le XL en txt.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2013
    Messages : 64
    Points : 56
    Points
    56
    Par défaut
    Ok merci pour l'info.
    La première solution correspond au code que j'ai envoyé au début de ce mail.
    Il fonctionne bien sauf que dans cette boucle (ci-dessous), le code recopie toutes le slignes, même celles qui contiennent "Data".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    While Not Fichier1.AtEndOfStream
        LigneTxt = Fichier1.ReadLine
        'If Not UCase(LigneTxt) Like "Data" Then Fichier2.WriteLine LigneTxt
        If InStr(UCase(LigneTxt), "xml") = 0 Then Fichier2.WriteLine LigneTxt
    Wend
    C'est là où je bloque

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Tu as dit précédemment que mon code fonctionnait correctement pour trouver les lignes "Data". Il te suffit donc d'insérer la ligne d'écriture dans le bloc IF mentionné dans mon code... non?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2013
    Messages : 64
    Points : 56
    Points
    56
    Par défaut
    J'y travaille, mais je ne parviens à le faire tourner.

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Donne ton code...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2013
    Messages : 64
    Points : 56
    Points
    56
    Par défaut
    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
    38
    39
    40
    41
    42
    43
    44
    45
    Sub Teust()
     
     
     
    Dim myFso As Object, Fichier1 As Object, Fichier2 As Object
    Dim pathFichierTxt As String, pathNouvFichierTxt As String, LigneTxt As String
     
    Dim r As Range, channel As Long
     
      Set r = Range("a1")
     
    pathFichierTxt = "C:\Users\test forum\Nouveau document texte.txt"
    pathNouvFichierTxt = Left(pathFichierTxt, InStrRev(pathFichierTxt, "\")) & "tmp_" & Format(Now, "yyyymmddhhnnss") & ".txt"
    Set myFso = CreateObject("Scripting.FileSystemObject")
    Set Fichier1 = myFso.OpenTextFile(pathFichierTxt, 1)
    Set Fichier2 = myFso.CreateTextFile(pathNouvFichierTxt, True)
     
    channel = FreeFile
    Open pathFichierTxt For Input As channel
     
                While Not Fichier1.AtEndOfStream
                LigneTxt = Fichier1.ReadLine
     
                'If Not UCase(LigneTxt) Like "Data" Then Fichier2.WriteLine LigneTxt
     
                    If InStr(1, TxtLine, "Data", vbTextCompare) > 0 Then
                    r.Value = TxtLine
                    Set r = r(2)
                    End If
     
                Wend
     
     
     
    Fichier1.Close
    Fichier2.Close
     
    myFso.DeleteFile pathFichierTxt, True
    Name pathNouvFichierTxt As pathFichierTxt
    Set myFso = Nothing
    Set Fichier1 = Nothing
    Set Fichier2 = Nothing
     
     
    End Sub

Discussions similaires

  1. [XL-2007] Supprimer une ligne blanche lors de la fusion de fichiers .txt (VBA)
    Par paqmarc dans le forum Macros et VBA Excel
    Réponses: 82
    Dernier message: 08/05/2018, 17h10
  2. Réponses: 0
    Dernier message: 16/11/2017, 18h38
  3. Réponses: 2
    Dernier message: 06/06/2008, 16h49
  4. Sauter une ligne + fichier txt
    Par acryline dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 29/01/2008, 22h32
  5. [VBA-E]Créer un fichier txt depuis une feuille Excel
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/02/2006, 17h36

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