dreameddeath a écrit :
Il faudrait que tu trouves la boucle la plus lente, mais je pense que c'est la deuxième.
Pour moi la première boucle est inutile, elle peut être remplacée par :
Code :
- j = fso.Getfolder(Dossiercondition1).Files.Count
|
Pour la deuxième l'algo est bien compliqué je trouve. En gros tu comptes tout + tu comptes les plus de quatre heure c'est ça ?
Code :
- For Each File In Folder.Files
- for each strExt in SPLIT(UCASE(strExtensionsToTest),"," )
- if RIGHT(UCASE(File.Path),LEN(strExt)+1) = "." & strExt then
- t=t+1
- If (DateDiff("h", File.DateLastModified, Now() ) > heureMaximalFichiers ) Then
- i=i+1
- exit for
- END IF
- end if
- next
- next
|
ça me parait bien compliqué car en fait s'il existe un fichier de moins de quatre alors tu peux t’arrêter tout de suite non ?
Code :
- FichierRecentTrouve = 0
- For Each File In Folder.Files
- for each strExt in SPLIT(UCASE(strExtensionsToTest),"," )
- if RIGHT(UCASE(File.Path),LEN(strExt)+1) = "." & strExt then
- If (DateDiff("h", File.DateLastModified, Now() ) <= heureMaximalFichiers ) Then
- FichierRecentTrouve = 1
- exit for
- END IF
- end if
- next
- ' arret immediat en fin de boucle
- if(FichierRecentTrouve)then
- exit for
- end if
- next
- if (j=0) and FichierRecentTrouve=0 then
- ...
- end if
|
Maintenant si c'est le foreach file qui est "lent", peut être que "dir" est plus rapide
Code :
- Set WshShell = CreateObject("wscript.shell" )
- ' le filtre peut être mis via *.oki aussi, plus un tri par date décroissante peut être utile
- Set oExec = WshShell.Exec("cmd /c dir """ & Dossiercondition2 & "\*.*""" )
- ' l'expression régulière est peut-être à adapter à ton envir, mais elle sert chez mois à séparer la date du nom du fichier
- Set parseFileLine = new RegExp
- parseFileLine.pattern = "^(\d{2}/\d{2}/\d{4}\s+\d{2}:\d{2}).{19}(.+\.(csv|oki|xls))$"
- Do Until oExec.StdOut.AtEndOfStream
- line = oExec.StdOut.ReadLine()
- ' controle d'extension et de structure de line (car "dir" renvoie un peu n'importe quoi)
- Set parts = parseFileLine.Execute(line)
- if(parts.count>0) then
- ' Submatches(0) contient la date, submatches(1) le nom du fichier
- strText = strText & chr(10) & chr(13) & parts.Item(0).Submatches(0) & "|" & parts.Item(0).Submatches(1)
- ' Faire le controle de date ici sortir si Ko
- end if
- Loop
- MsgBox strText
|
J'ai testé que le code fonctionne en local, mais faut tester que ça va "plus vite" chez toi car rien n'est moins sûr
Pour toutes les options de la commande "dir" tu peux essayer l'URL http://ss64.com/nt/dir.html
Aller bon courage
|