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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Récupération de données depuis un fichier texte

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupération de données depuis un fichier texte

n°2365191
vylkor
Posté le 21-10-2020 à 21:46:05  profilanswer
 

Bonsoir,
 
On m'a demandé de créer un fichier Excel a mon nouveau boulot, mais j'ai un doute sur comment construire mon fichier pour faire au plus simple.
 
Le contexte:
J'ai une machine qui me crée des rapports dans un dossier. A chaque cycle, j'ai 4 rapports crée, deux en .txt et deux en .csv. (noms sous la forme RAPP1111, REG1111, COURBE1111, PT1111).
Le dossier (sur le réseau) contient a ce jours 10 600 fichiers et fait 8go, rien que ça.
 
La demande:
Je dois récupérer les lignes 3 et 4 de tous les fichiers RAPPXXXX qui ont été crées sur les 7 derniers jours pour récupérer les heures de début et de fin de cycles et faire un chronographe avec
 
Le problème:
Pour l'instant je pensais faire une boucle pour mettre dans un tableau dynamique tous les rapports dont la date de création correspond a l'intervalle demandée et le nom commence par "RAPP", mais face au nombre juste hallucinant de fichiers dans ce dossier, j'ai peur de me retrouver avec quellque chose d'extrêment lent.
Y a t il un moyen que lorsque je commence ma boucle les fichiers soient présentés par ordre chronologique, pour pouvoir juste selectionner les 200 derniers fichiers crées?
 
Merci a vous, et j'espère avoir été assez clair dans l'explication.

mood
Publicité
Posté le 21-10-2020 à 21:46:05  profilanswer
 

n°2365206
caps lock
Posté le 22-10-2020 à 10:23:14  profilanswer
 

Je n'ai pas le temps de faire ton code, mais une recherche rapide sur google te donnerai des pistes avec "vba sort files in folder by date"
Avec "Scripting.FileSystemObject" et la propriété "DateCreated" par exemple.

n°2365704
vylkor
Posté le 28-10-2020 à 09:49:44  profilanswer
 

Salut!
 
Merci pour la piste, j'ai eu le temps de creuser ça hier et j'ai pu sortir un petit bout de code.
Alors, le temps de calcul étant plus court que prévu (a peine 1 minute), finalement il y a pas de filtre au lancement de la macro, ce qui me donne:
 

Code :
  1. Sub GetFileNames()
  2. Dim xRow As Long
  3. Dim xDirectory$, xFname$, xRappSearch$, xTxtRapp$, xTxtEnt$, xRappNumber$
  4. Dim xDate As Date
  5. Dim cell As Range, fso As Object
  6. Dim Extract As String
  7. 'Nettoyate de la feuille
  8. Sheets("Sheet3" ).Cells.Clear
  9. 'On défini le chemin d'accès
  10. xDirectory$ = "\\laroute\"
  11. 'On défini le type de nom des fichers (*=chaine de caractère libre)
  12. xRappSearch$ = "rapp*.txt"
  13. 'On crée la liste de tous les fichiers dont le nom correspond
  14. xFname$ = Dir(xDirectory$ & xRappSearch$, 7)
  15. Do While xFname$ <> ""
  16. Sheets("Sheet3" ).Cells(1, 1).Offset(xRow) = xFname$
  17. xRow = xRow + 1
  18. xFname$ = Dir
  19. Loop
  20. 'Lancement de la boucle de recherche
  21. 'Set fso = CreateObject("Scripting.FileSystemObject" )
  22. On Error Resume Next
  23. For Each cell In Range(Cells(1, 1), Cells(1, 1).Offset(xRow))
  24. 'On cherche la date de création du rapport sur windows
  25. 'cell.Offset(0, 1).Value = fso.getfile(xDirectory$ & cell.Value2).DateCreated
  26. 'On recherche les dates et heures de début et fin de cycles dans les fichiers rapp*.txt
  27. xRapp$ = cell.Offset(0, 0)
  28. xTxtRapp$ = xDirectory$ & xRapp$
  29. Open xTxtRapp$ For Input Access Read As #1
  30. If IsEmpty(cell.Offset(0, 0)) Then Extract = ""
  31. For i = 1 To 3
  32. Line Input #1, Extract
  33. Next i
  34. xDate = Format(Right(Replace(Extract, ".", "/" ), 19), "dd/mm/yyyy hh:mm:ss" )
  35. cell.Offset(0, 1).Value = xDate
  36. Line Input #1, Extract
  37. xDate = Format(Right(Replace(Extract, ".", "/" ), 19), "dd/mm/yyyy hh:mm:ss" )
  38. cell.Offset(0, 2).Value = xDate
  39. Close #1
  40. 'On recherche les noms de programmes dans les fichiers ent*.txt correspondant au rapp*.txt
  41. xRappNumber$ = Right(xRapp$, Len(xRapp$) - 4)
  42. xRappNumber$ = Left(xRappNumber$, Len(xRappNumber$) - 4)
  43. xTxtEnt$ = xDirectory$ & "ENT" & xRappNumber$ & ".txt"
  44. If IsEmpty(cell.Offset(0, 0)) Then xTxtEnt$ = ""
  45. Open xTxtEnt$ For Input Access Read As #1
  46. For i = 1 To 2
  47. Line Input #1, Extract
  48. Next i
  49. 'On ne garde que le nom de programme (après le deuxième ":" )
  50. Extract = Right(Extract, Len(Extract) - InStr(Extract, ":" ))
  51. Extract = Right(Extract, Len(Extract) - InStr(Extract, ":" ))
  52. cell.Offset(0, 3).Value = Extract
  53. Close #1
  54. Next cell
  55. Set fso = Nothing
  56. On Error GoTo 0
  57. End Sub


 
Je vais chercher comment retrouver la présence des lignes "Test Conforme" ou "Test Non Conforme" au milieu des fichiers ENT0000.txt à une position aléatoire maintenant, je vais googler ça, mais si vous avez des pistes je suis preneur.
 
Merci!

n°2366480
vylkor
Posté le 04-11-2020 à 08:59:34  profilanswer
 

Je me répond a moi même, mais si qqun d'autre en a besoin un jours:
 

Code :
  1. If Not IsEmpty(cell.Offset(0, 0).Value) Then
  2.             Do Until EOF(1)
  3.                 Line Input #1, Extract
  4.                 xTexte$ = xTexte$ & Extract
  5.             Loop
  6.                 If InStr(xTexte$, "Test conforme" ) > 1 Or InStr(xTexte$, "Cycle conforme" ) > 1 Then cell.Offset(0, 4).Value = "Cycle OK" Else cell.Offset(0, 4).Value = "Cycle non ok"
  7.         End If


 
Rajouté au niveau de la ligne 52 du code précédent (+ la déclaration de variable).


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

  Récupération de données depuis un fichier texte

 

Sujets relatifs
Perte des données copiées lors du lancement d'une macro VBA/ExcelLire un fichier txt ou équivalent avec vba
Exporter fichier .rtf en php et ouverture avec libreoffice writerTrouver la plus grande clé qui ne contient pas de données communes
Récupérer et modifier les donnéesrécupération d'une donnée dans stockage local en PHP
Ouvrir fichier .odb avec PythonRécolte de données sportive
Recuperation des données d'un fichier texteaide recuperation donnees d'un fichier texte
Plus de sujets relatifs à : Récupération de données depuis un fichier texte


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR