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

Récupération de données depuis un fichier texte - VB/VBA/VBS - Programmation

Marsh Posté le 21-10-2020 à 21:46:05    

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.

Reply

Marsh Posté le 21-10-2020 à 21:46:05   

Reply

Marsh Posté le 22-10-2020 à 10:23:14    

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.

Reply

Marsh Posté le 28-10-2020 à 09:49:44    

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!

Reply

Marsh Posté le 04-11-2020 à 08:59:34    

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).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed