2 votes

Application.filesearch dans Excel 2007 w/loop

J'ai fait plusieurs recherches et j'ai du mal à trouver le bon code pour utiliser le .filesearch qui n'existe plus. J'ai cherché à utiliser Dir et FileSystemObject mais je n'ai rien trouvé d'autre que de la confusion en utilisant une boucle après la recherche... J'espère que vous pourrez m'aider à trouver une solution plus simple !

En bref, mon code actuel recherche dans un dossier tous les fichiers Excel, ouvre le premier, fait ce qu'il doit faire avec, le ferme et ouvre le fichier recherché suivant. Merci d'avance !

FilePath = "S:\My\File\Path"
FileSpec = ".xls"

Set FS = Application.FileSearch
    With FS
        .LookIn = FilePath
        .Filename = FileSpec
        .Execute
    End With

For b = 1 To FS.FoundFiles.Count
    StrFile = FS.FoundFiles(b)

Set mobjXL = New Excel.Application
With mobjXL

    .Visible = False

'REST OF CODE HERE

next b

3voto

UberNubIsTrue Points 612

Cela devrait vous mettre sur la bonne voie :

Sub Your_Sub()

Dim FSO as Object
Dim FSO_FOLDER AS Object
Dim FSO_FILE as Object
Dim FILE_PATH as String
Dim FILE_EXT as String

FILE_PATH = "S:\My\File\Path"
FILE_EXT = "xls"

''Create FileSystem Objects
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FSO_FOLDER = FSO.GetFolder(FILE_PATH)

If FSO_FOLDER.Files.Count > 0 Then

    ''Loop through each File in Folder    
    For Each FSO_FILE IN FSO_FOLDER.Files

       ''Test extension
       If FSO.GetExtensionName(FSO_FILE.Name) = FILE_EXT Then
           ''Do your thing here
       Else:End if

    Next

Else

Msgbox "No Files Found at " & FILE_PATH

End If

Set FSO = Nothing
Set FSO_FOLDER = Nothing

End Sub

1voto

Yoan Tournade Points 380

Pour ceux qui veulent faire de l'ancien code qui repose sur des Application.FileSearch fonctionnent à nouveau avec le moins de modifications possible, voici une classe que vous pouvez utiliser en remplacement :

https://github.com/MonsieurV/VBA.Application.FileSearch

Tout ce que vous avez à faire est de remplacer votre Set fs = Application.FileSearch par :

Dim fs As YtoFileSearch
Set fs = New YtoFileSearch

Et utilisez-le comme d'habitude :

With fs
    .NewSearch
    .LookIn = "D:\User\Downloads\"
    .fileName = "*.pdf"
    If .Execute() > 0 Then
        Debug.Print "Found these PDF files:"
        For i = 1 To .FoundFiles.Count
           Debug.Print .FoundFiles(i)
       Next
    Else
        Debug.Print "Nothing found"
    End If
End With

Si vous n'avez pas de problèmes de code hérité, mieux vaut utiliser directement Scripting.FileSystemObject o Dir() (voir Réponse de UberNubIsTrue )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X