Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1503 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Lecture fichier texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] Lecture fichier texte

n°2307087
daniel-12
Posté le 28-10-2017 à 22:53:25  profilanswer
 

Bonjour
je souhaite lire le contenu d'un fichier texte et récupérer des informations dedans
le fichier texte est compose de ce genre de ligne
D53110000%toto
D53110000%titi
il y a 100 000 lignes
 
j'ai une listview avec les n° en colonne 1 je voudrais mettre les toto et titi en colonne 2
dans le cas bien sur ou le n° est connu
 
ce code mets 3s pour 10 n°

Code :
  1. Private Sub CommandButton1_Click()
  2. Dim tp!
  3. tp = Timer
  4. ListView1.ListItems.Clear
  5. ListView1.ListItems.Add , , "D53110000"
  6. ListView1.ListItems.Add , , "D53110001"
  7. ListView1.ListItems.Add , , "D53110002"
  8. ListView1.ListItems.Add , , "D53110003"
  9. ListView1.ListItems.Add , , "D53110004"
  10. ListView1.ListItems.Add , , "D53110005"
  11. ListView1.ListItems.Add , , "D53110006"
  12. ListView1.ListItems.Add , , "D53110007"
  13. ListView1.ListItems.Add , , "D53110008"
  14. ListView1.ListItems.Add , , "D53110009"
  15. FichierBDD = Environ("userprofile";) & "DocumentsBDD MacroControleDeroplan SA.txt"
  16. For i = 1 To 10
  17.     L = ListView1.ListItems(i).Text
  18.     L = Left(L, 9)
  19.     Open FichierBDD For Input As #1
  20.         Do While Not EOF(1)
  21.           Input #1, ligneBDD
  22.           If ligneBDD Like L & "*" Then
  23.             ListView1.ListItems(i).ListSubItems.Add = Split(ligneBDD, "%";)(1)
  24.             Me.Repaint
  25.           End If
  26.         Loop
  27.     Close #1
  28. Next i
  29. Me.Caption = "Duration of treatment: " & Format(Timer - tp, "0.000s";)
  30. End Sub


ce code mets 9s pour 10 n°

Code :
  1. Private Sub CommandButton2_Click()
  2. Dim tp!
  3. tp = Timer
  4. ListView1.ListItems.Clear
  5. ListView1.ListItems.Add , , "D53110000"
  6. ListView1.ListItems.Add , , "D53110001"
  7. ListView1.ListItems.Add , , "D53110002"
  8. ListView1.ListItems.Add , , "D53110003"
  9. ListView1.ListItems.Add , , "D53110004"
  10. ListView1.ListItems.Add , , "D53110005"
  11. ListView1.ListItems.Add , , "D53110006"
  12. ListView1.ListItems.Add , , "D53110007"
  13. ListView1.ListItems.Add , , "D53110008"
  14. ListView1.ListItems.Add , , "D53110009"
  15. FichierBDD = Environ("userprofile";) & "DocumentsBDD MacroControleDeroplan SA.txt"
  16. 'ex: D53110000%toto
  17. For i = 1 To 10
  18.     L = ListView1.ListItems(i).Text
  19.     L = Left(L, 9)
  20. Set fso = CreateObject("Scripting.FileSystemObject";)
  21.   Set f = fso.OpenTextFile(FichierBDD, ForReading, False)
  22. Do While Not f.AtEndOfStream
  23.     ligneBDD = f.ReadLine
  24.         If ligneBDD Like L & "*" Then
  25.             ListView1.ListItems(i).ListSubItems.Add = Split(ligneBDD, "%";)(1)  'recupere toto
  26.             Me.Repaint
  27.         End If
  28. Loop
  29. Set f = Nothing
  30. Next i
  31. Me.Caption = "Duration of treatment: " & Format(Timer - tp, "0.000s";)
  32. End Sub


dans les 2 codes, j'ouvre 10 fois le fichier, ce qui ne me semble pas très malin
je voudrais bien l'ouvrir 1 fois, mais je n'arrive pas a le formuler correctement
 
j'ai pourtant essayé..

Spoiler :

Set fso = CreateObject("Scripting.FileSystemObject";)
  Set f = fso.OpenTextFile(FichierBDD, ForReading, False)
   
For i = 1 To 10
    L = ListView1.ListItems(i).Text
    L = Left(L, 9)
Do While Not f.AtEndOfStream
    ligneBDD = f.ReadLine
        If ligneBDD Like L & "*" Then
            ListView1.ListItems(i).ListSubItems.Add = Split(ligneBDD, "%";)(1)  'recupere toto
            Me.Repaint
        End If
Loop
 
Next i
 
Set f = Nothing
 


Message édité par daniel-12 le 29-10-2017 à 12:44:15
mood
Publicité
Posté le 28-10-2017 à 22:53:25  profilanswer
 

n°2307092
patrice337​40
Avec la réponse, c'est facile.
Posté le 29-10-2017 à 09:53:34  profilanswer
 

Bonjour,
 
Ouvres le fichier avant de boucler 10 fois !


---------------
Cordialement, Patrice
n°2307093
daniel-12
Posté le 29-10-2017 à 10:56:25  profilanswer
 

c'est ce que j'ai fais avec le dernier code dans le spoiler
ça marche pour 1 ligne, mais arrivé atendofstream .. c'est fini

n°2307097
Marc L
Posté le 29-10-2017 à 12:39:23  profilanswer
 

 
             Bonjour,
 
             déjà préciser langage et logiciel !
             VBA ? Mais vu le mélange avec du VBScript, cela peut ramer sans compter la boucle et surtout le  Repaint  !
 
             La lecture globale d'un fichier texte peut s'effectuer en pur VBA en une passe directement en mémoire dans une variable tableau.
 
             Effectuer une présentation claire & exhaustive …
 
             « dans le cas bien sur ou le n° est connu »  :  en clair, sans décodeur ? Envisager une  Collection  ou un Dictionary
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Lecture fichier texte

 

Sujets relatifs
Lecture d'un fichier texteCréation de script avec lecture d'un fichier texte
Optimisation lecture fichier texteproblème lecture de fichier texte en ada
Lecture et recopie d'une matrice depuis un fichier texteproblème de lecture d'un fichier texte
lecture/écriture fichier texte et conversion en données numériquesOuverture/lecture dans un fichier texte Access VBA
[java]Lecture d'un gros fichier textelecture et écriture dans un fichier texte en vbs
Plus de sujets relatifs à : [VBA] Lecture fichier texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR