Option Explicit
Sub testDIRcmd()
[A1].CurrentRegion.Clear
Dim Racine$, tim#, T
Racine = "h:\*.txt"
tim = Timer
T = ListFichierBath(Racine)
If IsArray(T) Then
[A1].Resize(UBound(T), 1).Value = T
MsgBox CDec(Timer - tim) & " seconde(s) pour " & UBound(T) & " fichier ou dossiers(s)"
Else: MsgBox "Pas de fichier avec cette extension "
End If
End Sub
Function ListFichierBath(Racine$, Optional Recycles As Boolean = False)
Dim laChaine$, x&, Fichier$, bat$, Commande$, tim#, tbl, tblV, I&, arr1, arr2, a&, doss
arr1 = Array("a`", "a^", "a¨", "e`", "e^", "e¨", "i`", "i^", "i¨", "o`", "o^", "o¨", "u`", "u^", "u¨")
arr2 = Array("à", "â", "ä", "è", "ê", "ë", "ì", "î", "ï", "ò", "ô", "ö", "ù", "û", "ü")
bat = "C:\Users\polux\Desktop\baton.cmd"
Fichier = Environ("userprofile") & "\Desktop\list.txt"
Commande = "chcp 1252 > nul" & vbCrLf & "dir " & Racine & " /S /B /A:-D >" & Fichier
x = FreeFile: Open bat For Output As #x: Print #x, Commande: Close #x
ShellAndwaitingEndProcess bat
x = FreeFile: Open Fichier For Binary Access Read As #x: laChaine = String(LOF(x), " "): Get #x, , laChaine: Close #x
For a = 0 To UBound(arr1)
If InStr(1, laChaine, arr1(a)) Then laChaine = Replace(Replace(laChaine, arr1(a), arr2(a)), UCase(arr1(I)), UCase(arr2(I)))
Next
tbl = Split(laChaine, vbCrLf)
If Not Recycles Then
For I = 0 To UBound(tbl)
If tbl(I) Like "*$RECYCLE*" Then laChaine = Replace(laChaine, tbl(I) & vbCrLf, "")
Next
tbl = Split(laChaine, vbCrLf)
End If
If laChaine <> vbNullString Then
ReDim tblV(UBound(tbl), 1 To 1): For I = 0 To UBound(tbl): tblV(I, 1) = tbl(I): Next
ListFichierBath = tblV
End If
Kill Fichier
End Function
Function ShellAndwaitingEndProcess(ByVal CheminComplet As String) As Long
Dim ProcessHandle&, ProcessId&
ProcessId = Shell(CheminComplet, vbHide)
ProcessHandle = ExecuteExcel4Macro("CALL(""Kernel32"",""OpenProcess"",""JJJJ"",""" & 2031616 & """,""" & 0 & """,""" & ProcessId & """)")
ShellAndwaitingEndProcess = ExecuteExcel4Macro("CALL(""Kernel32"",""WaitForSingleObject"",""JJJJJ"",""" & ProcessHandle & """,""" & &HF0000 & """)")
End Function