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 :

[VBA-E] Derniere ligne fichier texte


Sujet :

Macros et VBA Excel

  1. #41
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par Elstak
    c'est la folie sur ce post calmez vous les mecs !!

    en fait oui ca pourrait aller ta solution mais (je l'ai essayé) je ne coprend pas trop le résultat que j'ai !

    voici la derniere ligne du fichier texte :

    2006-04-09;PCC9002;00:08:19;USER;1041;0;

    et voici ce que j'obtient :

    :08:19;USER;1041;0;
    n'y aurai-t'il pas des espaces .. modifie le msgbox pour les mettre en évidence :

    Citation Envoyé par Elstak
    1) Avec ca : If iSkip > 0 Then t.Skip
    ou t est un textStream ... t.Skip n .. 'permet d'ignorer les n premier caractéres...
    Citation Envoyé par Aide en ligne VB
    Skip, méthode
    Description
    Omet un nombre spécifié de caractères lors de la lecture d'un fichier TextStream.
    Syntaxe
    object.Skip(characters)
    Citation Envoyé par Elstak
    2) Set f = fs.GetFile(specfichier) , fs tu le declare pas? Ca je pige pas non
    un oubli ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Dim fs As FileSystemObject
    Citation Envoyé par Elstak
    3) Enfin, ta derniere ligne cetai un debug.print mais quand je lancais la
    je crois que tu as déjà eu la réponse...

  2. #42
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Hé ! la soluce est juste au dessus !
    Je peux maintenant débarraser mon disque de l'énorme fichier que tu m'y a fait générer ???

  3. #43
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Alors,

    merci bbil pour ces précisions !!

    Jmf je pige pas trop en quoi ce nouveau code est mieux
    Déjà j'ai toujours le probleme : si je ne supprime pas le retour chariot c'est toujours le meme probleme... si je l'enleve manuellement le code marche bien (comme celui d'avant... donc je ne voit pas ce qu'il fait de mieux )

  4. #44
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    il ignore la ligne vide !
    Dis-moi : t'as corrigé ce que j'ai corrigé par edit ? jmfcoucou et pas (erreur de frappe) fmfcoucou :
    Chez moi çà baigne, y compris avec 20 retours charriots inutiles...
    While Not EOF(1)
    Line Input #1, jmfcoucou
    If jmfcoucou <> "" Then laderniere = jmfcoucou
    Wend

  5. #45
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Yes je l'avai vu !! (ca va tu te fait pas de pub )

    mon code c'est ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Dim laderniere As String, jmfcoucou As String
        laderniere = ""
        Open "D:\excel\Nom.txt" For Input As #1
        While Not EOF(1)
          Line Input #1, jmfcoucou
          If jmfcoucou <> "" Then laderniere = jmfcoucou
        Wend
        Close #1
        MsgBox laderniere
    y'aura pas moyen de faire un truc du genre :

    -aller à la derniere ligne
    -faire une action corrrespondant à la touche suppr
    (puis lancer ton code)

    car là jouvre le fichier, je me place juste apres le dernier ; et je tape 1 fois sur suppr, j'enregistre et ca marche nickel

  6. #46
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    1) est-ce que tout va maintenant ?
    2) non ! la correction doit être apportée dans le code générateur du fichier, si tu veux te débarrasser de façon orthodoxe de ce retour-charriot
    3) je peux maintenant libérer mon disque ?
    4) si ce n'est pas toi qui a généré ce fichier texte, on peux le corriger, mais au prix d'une autre boucle ! Le plus normal est de corriger le générateur et pas le résultat !

  7. #47
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Yop, alors,

    Le fichier je le telecharge (je doit creer une macro qui puisse le telecharger chaque semaine, son nom change etc... en fait y'a plein de fichier y'en a pas qu'un mais le probleme est toujours le meme)

    les fichier qui font 8 à 10 mega se telechargent parfois mal (mauvais serveur apparement) donc comme je connais des données de la derneire ligne je vais la verifier et si elle est bonne alors je ne relance pas le telechargement (tu comprend l'idée? )

    donc y'a pas de generateur (enfin si biensur c'est pas tapé à la main.. mais je ne peut rien y changer ils seront toujours comme ca !), ta boucle pour virer le caractere apres le dernier ; m'interesse donc

    voilà je pense avoir tout dit !!

  8. #48
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    OK je te prépare une boucle
    Mais... je peux enfin libérer mon disque de l'énorme fichier que tu m'y a fait mettre ? PLEASE

  9. #49
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    do while (maboucleestfaite? = false)
    conserverlefichier = true
    loop

    voilà t'a pas le choix le code ne commet jamais d'erreur


    oui tu peux le suppri enfin si t'en a plus besoin pour la boucle, ca jte laisse gerer

  10. #50
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Voilà ce que je te propose : d'une pierre deux coups :

    La première fois qu'il ouvre le fichier "vicié" :
    1) il le répare pour les autres fois
    2) il en profite pour lire la dernière ligne

    Celà évite 2 boucles trop fastidieuses :

    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
    Private Sub Command1_Click()
      ficorig = "d:\essai.txt"
      tremplin = "d:\essai1.txt"
      Open ficorig For Input As #1
      Open tremplin For Append As #2
      While Not EOF(1)
      Line Input #1, toto
      If Len(toto) > 0 Then
         laderniere = toto
         Print #2, toto
       End If
      Wend
      Close
      MsgBox laderniere
      Kill ficorig
      Name tremplin As ficorig
    End Sub
    Tu m'uses !!!

    EDIT ET PS :
    Je te laisse le soin de transformer comme tu l'entends, en partant du nom originel pour créer le nom du tremplin :
    du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ficorig = "c:\toto.txt"
    tremplin = Left(ficorig, InStr(ficorig, ".txt") - 1) & "coucou.txt"
    pour économiser tes interventions (si tu utilises souvent coucou pour çà, change coucou par ce_que_tu_veux pour lever toute éventuelle ambiguïté )

  11. #51
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Yop,

    hmmm au risque de t'enerver dès le matin, ca va pas

    J'ai bien un fichier tremplin qui se crée mais le probleme est le meme.

    (J'espere avoir bien compris : je met dans ficorig le nom de mon fichier et dans nom tremplin un autre nom? là jai juste repris le nom de ficorig et ajouté 1 à la fin, d'ailleurs jai ce fichier qui se crée mais c'est long et le resultat est toujours le meme que lorsque je nouvre pas et ne fait pas 'suppr' apres le dernier point virgule... tres long et j'botient les premiere lignes)

    Là si j'ai bien compris le code, il copie ligne a ligne le contenu de ficorig et ecrase a chaque fois le contenu de la var laderniere.

    Mais n'est-il pas possible que le probleme se trouve a la suiet de la derniere ligne? et non pas qu'il y a un retour chariot de trop??

    Mon idée, mais je ne sais pas si c'est faisable, serai de detecter le dernier point virgule et de supprimerce qu'il y a apres mais sur un fichier texte.. aucune idee de comment faire. Un truc du genre on garde la position du dernier point virgule et si il y en a un apres on remplace etc... et a la fin si c'est le dernier et bien on supprime tout ce qui est apres

  12. #52
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Allons bon !
    Ce n'est plus le dernier retour-charriot mais le dernier point.virgule, maintenant !
    Alors je te propose autre chose :
    Supprimer carément tous les points virgules qui terminent tes lignes, un point c'est tout !
    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
    Private Sub Command1_Click()
      ficorig = "d:\essai.txt"
      tremplin = Left(ficorig, InStr(ficorig, ".txt") - 1) & "coucou.txt"
      Open ficorig For Input As #1
      Open tremplin For Append As #2
      While Not EOF(1)
      Line Input #1, toto
      If Len(toto) > 0 Then
         If Right(toto, 1) = ";" Then toto = Left(toto, Len(toto) - 1)
         laderniere = toto
         Print #2, toto
       End If
      Wend
      Close
      MsgBox laderniere
      Kill ficorig
      Name tremplin As ficorig
    End Sub

  13. #53
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    hm, en fait quand jouvre le fichier avec word, il y a à la derniere ligne un truc comme ca :

    blabla(dernier point virgule --->);................................P(le P à l'envers c 'est bien un retour chariot?)
    (ligne d'apres j'ai une sorte de carré dont il n'y a que le contour de tracé(blanc à l'interieur), comme pour un caractere qu'il ne peut pas afficher je pense, non? puis un P (retour chariot))
    et enxore la ligne d'en dessous, un P

    voilà donc en fait ce n'est pas une ligne mais 2 qui ne servent à rien. (peut etre qu'en plus le dernier code que tu m'a donné pense que la derniere ligne c'est là ligne avec le carré, non?)

    D'où mon idée de supprimer tout ce qu'il y a apres le dernier point virgule (le point virgule peut etre supprimé aussi)

    Un autre truc etrange, mais ce n'est pas grave, c'est que j'ai repensé à ton "gros" fichier que tu avais créé et qui prennait baeucoup moins de place que le mien, c'est qu'à la fin des lignes il y a un paquet d'espaces.
    Je vois des truc ressemblant à ca ................................................P (en beacoup plus long)

  14. #54
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tiens ... de quoi nettoyer le stlu... , modifie le nbre de caractéres (100) à lire de façon à être sur que la derniére ligne soit comprise et applique ce code à stLu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim iPos As Integer
    iPos = InStrRev(stLu, ";") 'Recherche la position du dernier ;
    stLu = Left(stLu, iPos) 'prend les caractéres jusqu'au dernier ;
    iPos = 1 + InStrRev(stLu, Chr(13)) 'Recherche la position du dernier retour chariot
    If iPos < Len(stLu) Then
     stLu = Mid(stLu, iPos)
    End If
    Debug.Print "<" & stLu & ">"
    sinon inspire toi de ce code .. pour le nettoyage ... de ta chaîne lue...

  15. #55
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Question à cent sous : est-ce que toutes tes lignes "correctes" ont un point-virgule à la fin ?
    si tu réponds vite, j'ai 10 minutes pour moi.
    dépeches-toi

  16. #56
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bon ! je dois maintenant partir (tu es long...)
    Alors, en partant du principe que :
    1) toutes tes lignes correctes se terminent par un ;
    2) tu ne veux garder, sans ce ; que les lignes qui se terminaient par un ;
    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
    Private Sub Command1_Click()
      ficorig = "d:\essai.txt"
      tremplin = Left(ficorig, InStr(ficorig, ".txt") - 1) & "coucou.txt"
      Open ficorig For Input As #1
      Open tremplin For Append As #2
      While Not EOF(1)
        Line Input #1, toto
        If Right(toto, 1) = ";" Then
           toto = Left(toto, Len(toto) - 1)
           laderniere = toto
           Print #2, toto
         End If
      Wend
      Close
      MsgBox laderniere
      Kill ficorig
      Name tremplin As ficorig
    End Sub
    Ciao

  17. #57
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    oops, desolé je teste un peu avant de reposter tt de suite

    donc toutes mes ligne qui sont à garder (toutes les lignes du fichier de toute facon) se terminent par un ";" (c'est bien ca que tu voualis savoir?)

    sinon j'essaye egalement de voir la solution de bbil qui enf ait peut etre bonne si je prend "large" j'aurai la derniere ligne et je pourai voir si il y a les caractere que je cherche dedans !

    je ertourne à mes tests

  18. #58
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    yupyup, je viens de tester ton dernier code jmf,

    alors il y a du changement : C'est toujours aussi long et mon resultat est un message blanc

    jvais essayer de bidouiller et je previen si ca fonctionne

  19. #59
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Euh en fait je vien de compernder pourquoi c'est blanc le resultat !!

    Ton code m'a supprimé tout le contenu du fichier lool ( )

    en fait je vois lors de l'execution du code un fichier "Nomcoucou" qui se cree, il fait 0ko et a la fin je pense qu'il remplace mon fichier "Nom"... pour info car je ne sait pas si tu te souvient à quoi ressemblent les lignes du fichier, mais c'est du genre nombre;nombre;nombre;... il n'y a pas qu'un ";" par ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      While Not EOF(1) 
        Line Input #1, toto 
        If Right(toto, 1) = ";" Then 
           toto = Left(toto, Len(toto) - 1) 
           laderniere = toto 
           Print #2, toto 
         End If 
      Wend
    Je comprend mal ce code, il copie une ligne du fichier d'origine dans "toto" puis right(toto,1), ca regarde le dernier caractere de la ligne?? c'est le "1" que je compernd mal car d'apres moi (mes souvenirs?) il regarde si les caractere de la ligne toto (le dernier car on prend 1) vaut ";" or il y a des espace apres les ";" (voir un poste un peu au dessus) il ne les prend pas en compte? car pour moi il ne rendre jamais dans le IF et donc le fichier tremplin n'a rien de copié (donc il est vide est remplace mon fichier d'origine d'où le fait que j'obtient mon fichier vide à la fin)

    je pense n'avoir pas été tres clair mais je me comprend et je vais voir 2/3 ptit truc

  20. #60
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    et hop j'ai gagné, j'ai ouvert le fichier avec word, jai supprimé les espace apers le ; d'une ligne (javais donc "bla;bla;bla;P" <---retour chariot)
    Et seule cette ligne s'est copiée dans mon fichier ficorig apres execution.
    (enfin dans mon fichier tremplin qui ensuite remplace ficorig)

    Je vais tenter maitenant de parcourir le fichier texte et de supprimer tous les espaces (euh comment on fait pour selectionner un caractere sur une ligne? si c'est un espace je met " "? ) bref je veux bien un petit coup de main ou meme si quelqu'un à une meilleur idée ! là je veux jsute supprimer tous les espace puis ensuite lancer le code

    Idée : tant que le dernier caractere d'une ligne n'est pas un ";" alors on suppr ce caractere mais peut on uniquement supprimer un caractere?

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Suppression ligne fichier texte
    Par stephane92400 dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 25/12/2009, 16h14
  2. [VBA-E] Calcul sur fichiers Texte
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/02/2007, 14h37
  3. [VBA-E]derniere ligne non vide
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/07/2006, 10h48
  4. [VBA-E] Récupération données fichier texte
    Par Theo28fr dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/07/2006, 08h08
  5. [VBA-E] Lire un fichier texte
    Par Lnmex dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/05/2006, 19h33

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