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. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut [VBA-E] Derniere ligne fichier texte
    Coucou,

    Voilà pour vérifier qu'un fichier texte s'est correctement telechargé, je voudrais savoir si sa derniere ligne contient une certaine chaine.

    J'ai trouvé ce code sur le forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Macro1()
        Dim myFile As String
        myFile = "nomfichier.txt"
        ActiveSheet.QueryTables.Add(Connection:="TEXT;" & myFile, Destination:=Range("A10")).Refresh
    End Sub
    Il permet de copier tout le fichier texte mais il me faudrait la derniere ligne uniquement (car c'est un gros fichier qui peut se telecharger incompletement (ca se dit? ) donc sa copie totale ne m'inetresse pas surtout que je ne sait pas sur quelle ligne excel sera copiée la derniere ligne du fichier et je ne sais meme pas si il y a assez de ligne sur ma feuille excel )

    Voilà donc si quelqu'un sait comment faire...

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim laderniere as string
    laderniere = ""
    open "....\.....txt" for input as #1
    while not EOF(1)
      line input #1, laderniere
    wend
    msgbox laderniere
    par exemple

  3. #3
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Pas mieux que jmf!
    Tu écrases chaque ligne lue par la suivante... jusqu'à la dernière!

  4. #4
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    +1

    vu qu'un fichier texte ne peut être lu que séquentiellement.

  5. #5
    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
    et tu as une idée du nombre de caractére de la derniére ligne ?

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    si le fichier texte est tres volumineux , tu essayer cette macro pour en récuperer la derniere ligne


    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
    'Necessite d'activer la référence Microsoft ActiveX Data Object 2.x Library 
    Dim Rc As ADODB.Recordset
    Dim Cn As String, Chemin As String, Fichier As String
     
    Chemin = "C:\leRepertoire"
    Fichier = "monFichier.txt"
     
    Cn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
    "Dbq=" & Chemin & ";Extensions=asc,csv,tab,txt"
     
    Set Rc = New ADODB.Recordset
    Rc.Open "SELECT * FROM " & Fichier, Cn, adOpenKeyset, adLockReadOnly, adCmdText
     
    If Not Rc.EOF Then
    Rc.MoveLast
    MsgBox Rc.Fields(0).Value
    End If
     
    Rc.Close
    Set Rc = Nothing

    bonne soiree
    michel

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

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

    merci de vos réponses !

    je tente d'utiliser la solution de silky (car mon fichier est assez gros) mais j'ai un petit souci : "erreur d'execution '-214...' Ce pilote ODBC ne prend pas en charge les propriétés demandées"

    à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rc.Open "SELECT * FROM " & Fichier, Cn, adOpenKeyset, adLockReadOnly, adCmdText
    (jamais vu qu'on pouvais utiliser des requetes sql dans Excel )

    j'ai pourtant activé Microsoft ActiveX Data Object 2.7 Library

    une idée?
    (et à quoi servent ces 3 instructions : adOpenKeyset, adLockReadOnly, adCmdText ?)

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    pourquoi parles tu de classeur Excel ? j'avais compris dans ton premier message que tu voulais tester la derniere ligne d'un fichier txt ( ce qui est le cas dans l'exemple proposé )


    sinon tu peux aussi faire une requete dans un classeur : il suffit d'adapter la variable de connection (Cn)



    bonne journée
    michel

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

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    euh... j'ai du mal me faire comprendre

    il s'agit bien d'un fichier texte !!

    Et j'ai toujours l'erreur du message percedent (j'ai essayé d'activer des references un peu au pif mais sans succes )

    voici les references que j'ai d'activées :
    - Visual basic for application
    - microsoft excel 9.0 object library
    - ole automation
    - microsoft office 9.0 object library
    - microsoft activeX data objects 2.7 library
    - microsoft ole db service component 1.0 type library

    Sinon pour repondre a bbil : non je en sais pas combien j'ai de caracteres dans la derniere ligne, pourquoi?

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    rebonjour

    peux tu montrer la procedure exacte que tu as utilisé ?


    bonne journée
    michel

  11. #11
    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
    Sinon pour repondre a bbil : non je en sais pas combien j'ai de caracteres dans la derniere ligne, pourquoi?
    ben je pensai un truc comme lire depuis la fin du fichier .. moins le nombre de caractére de ta ligne... exple:


    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
    Sub DernierCaracteres()
      specfichier = "F:\Isis3000 7.00h\Usr\old\ISIS1000\C\T_ISIS.DAT"
       Dim iSkip As Long 'Nbre caractéres à laisser..
       Dim stLu As String
       Dim f As File 'Rajouter référence Microsoft scripting...
       Dim t As TextStream
       Set fs = CreateObject("Scripting.FileSystemObject")
       Set f = fs.GetFile(specfichier)
       Set t = f.OpenAsTextStream
     
       iSkip = f.Size - 100 ' On conserve seulement les 100 derniers caractéres
       If iSkip > 0 Then t.Skip iSkip
       stLu = t.ReadAll
       Debug.Print stLu
    End Sub

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

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

    voilà mon code (le tien meme ):

    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
    Sub Macro1()
     
        'Necessite d'activer la référence Microsoft ActiveX Data Object 2.x Library
     
        Dim Rc As ADODB.Recordset
        Dim Cn As String, Chemin As String, Fichier As String
     
        Chemin = "D:\excel"
        Fichier = "nomfichier.txt"
     
        Cn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
        "Dbq=" & Chemin & ";Extensions=asc,csv,tab,txt"
     
        Set Rc = New ADODB.Recordset
        Rc.Open "SELECT * FROM " & Fichier, Cn, adOpenKeyset, adLockReadOnly, adCmdText
     
        If Not Rc.EOF Then
        Rc.MoveLast
        MsgBox Rc.Fields(0).Value
        End If
     
        Rc.Close
        Set Rc = Nothing
     
    End Sub
    C'est le meme, j'ai juste changé la valeur de chemin et fichier

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

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    ok bbil, jme doutais un peu

    Mais le pb est que je cherche à vérifier si la derniere ligne contient un certain morceau de texte donc si la derniere ligne n'est pas la bonne... (et en plus je pense bien que le nombre de caracteres est variable)

  14. #14
    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
    ok bbil, jme doutais un peu

    Mais le pb est que je cherche à vérifier si la derniere ligne contient un certain morceau de texte donc si la derniere ligne n'est pas la bonne... (et en plus je pense bien que le nombre de caracteres est variable)
    .. oui mais bon, avec le code que je t'ai envouyé tu lit les 100 derniers caractéres... suffit que ta derniére ligne y soit dedans... tu peu aussi en lire plus ...

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

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    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;

    et vlà le code :

    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
    Sub Macro4()
     
       specfichier = "D:\excel\EXPL.C24.LMDV.RSPC.LP24ABJH.G0010V00.txt"
       Dim iSkip As Long 'Nbre caractéres à laisser..
       Dim stLu As String
       Dim f As File 'Rajouter référence Microsoft scripting...
       Dim t As TextStream
       Set fs = CreateObject("Scripting.FileSystemObject")
       Set f = fs.GetFile(specfichier)
       Set t = f.OpenAsTextStream
     
       iSkip = f.Size - 100 ' On conserve seulement les 100 derniers caractéres
       If iSkip > 0 Then t.Skip iSkip
       stLu = t.ReadAll
       MsgBox (stLu)
     
    End Sub


    pourquoi j'ai pas 100 caraceteres ??

    hormis ca j'ai 2/3 questions sur ton code :

    1) Avec ca : If iSkip > 0 Then t.Skip iSkip, tu regarde si il y au moins 100 caractere dans le fichier mais ensuite le t.skip ?? j'ai une idée je pense que ca crée un flot de texte "t" qui contient les 100 dernier caracteres mais bon t.Skip... enfin j'aurai besoin detre eclairci là dessus

    2) Set f = fs.GetFile(specfichier) , fs tu le declare pas? Ca je pige pas non plus

    3) Enfin, ta derniere ligne cetai un debug.print mais quand je lancais la macro rien ne se passait, pourtant je pensais que cetai comme un msgbox

    Voilà si ta encore qque min à me consacrer

  16. #16
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    rebonjour

    je ne reussis pas à reproduire ton message d'erreur .
    peut etre que la structure des données ne permet pas ce type de requete ...

    quoi qu'il en soit , les solutions proposées par mes autres camarades devraient répondre à ta demande


    bonne journée
    michel

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

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Ok pas de souci silky

    Jvais utiliser la methode bbil je pense mais elle me donne des résultats bizarres

    J'essaye de voir un peu pour qu'elle me donne les resultats voulus 8)

  18. #18
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Et la première! Celle de jmf? Tu l'as essayée? Elle ne te plait vraiment pas?

  19. #19
    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
    Bonjour Mega,
    Je crois qu'il est raciste... ou alors maso !

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

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    hihi non !!

    C'est juste que ta solution prend 3 minutes avant d'afficher la msgbox et que ce qui est affiché correspond aux 3 premiere ligne de mon fichier ainsi qu'un morceau de la 4eme

    (me demande pas pourquoi )

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 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, 17h14
  2. [VBA-E] Calcul sur fichiers Texte
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/02/2007, 15h37
  3. [VBA-E]derniere ligne non vide
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/07/2006, 11h48
  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, 09h08
  5. [VBA-E] Lire un fichier texte
    Par Lnmex dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/05/2006, 20h33

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