Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA. Recherche d'un fichier dans un sous-répertoire

5 réponses
Avatar
HD
Bonjour,

Je cherche un fichier ayant un nom "Toto.xls" dans un répertoire et les
sous-répertoires de "C:\MonRep\"... Le problème est que si il existe un
fichier "MonToto.xls" celui ci va se retrouver dans la liste des fichiers
trouvés alors que je ne veux que les fichier "Toto.xls"...

Voici ma macro:

With Application.FileSearch
.NewSearch
.FileType = msoFileTypeExcelWorkbooks
.LookIn = RepCAC
.FileName = FicNom
.SearchSubFolders = True
.Execute
With .FoundFiles
ReDim Classeurs(1 To .Count, 1 To 1)
For I = 1 To .Count
Classeurs(I, 1) = .Item(I)
Next I
Application.ScreenUpdating = False
With Range("A1").Resize(.Count)
.Value = Classeurs
.Sort [a1]
End With
End With
End With

Bien sûr j'ai essayé d'utiliser les options .MatchTextExactly et
.MatchAllWordForms mais cela ne change rien...

Merci d'avance pour votre aide.
--
@+
HD

5 réponses

Avatar
MichDenis
Bonjour HD,

Est-ce que tu as renseigné ta variable comme il se doit :

Dim FicNom As string
FicNom = "Toto.xls"

' et le reste de ta procédure !

.FileName = FicNom



Salutations!




"HD" a écrit dans le message de news:
Bonjour,

Je cherche un fichier ayant un nom "Toto.xls" dans un répertoire et les
sous-répertoires de "C:MonRep"... Le problème est que si il existe un
fichier "MonToto.xls" celui ci va se retrouver dans la liste des fichiers
trouvés alors que je ne veux que les fichier "Toto.xls"...

Voici ma macro:

With Application.FileSearch
.NewSearch
.FileType = msoFileTypeExcelWorkbooks
.LookIn = RepCAC
.FileName = FicNom
.SearchSubFolders = True
.Execute
With .FoundFiles
ReDim Classeurs(1 To .Count, 1 To 1)
For I = 1 To .Count
Classeurs(I, 1) = .Item(I)
Next I
Application.ScreenUpdating = False
With Range("A1").Resize(.Count)
.Value = Classeurs
.Sort [a1]
End With
End With
End With

Bien sûr j'ai essayé d'utiliser les options .MatchTextExactly et
.MatchAllWordForms mais cela ne change rien...

Merci d'avance pour votre aide.
--
@+
HD
Avatar
HD
Est-ce que tu as renseigné ta variable comme il se doit :
Oui.... Exactement comme ce que tu montre ci-dessous


Dim FicNom As string
FicNom = "Toto.xls"

' et le reste de ta procédure !

.FileName = FicNom


En fait mon FicNom est "Budget.xls" et j'obtiens comme résultat par exemple
ces deux types de lignes :
"O:DP 09 HonorairesBudget.xls"
"O:EB5 PlanEQUIPE ET BUDGET.xls"

Alors que bien sûr je ne cherche que les fichier se nommant "Budget.xls"...
Peut être y'at il un problème venant de l'espace devant le nom ?

--
@+
HD

Avatar
MichDenis
Bonjour HD,

Essaie ceci :

Et renseigner : le nom du fichier à rechercher ... et le répertoire de départ de la recherche.

P.S. Même en effectuant une recherche via l'explorateur, le phénomène que tu observes se reproduit.

La fonction recherche demande une version d'excel ou plus récente.


'--------------------------------
Sub Rechercher()

Dim Nb As Integer, G As Integer
Dim FicNom As String
FicNom = "denis1.xls" 'à déterminer

With Application.FileSearch
.NewSearch
.FileType = msoFileTypeAllFiles
.LookIn = "c:Excel" 'à déterminer
.Filename = FicNom
.SearchSubFolders = True
If .Execute > 0 Then
With .FoundFiles
Nb = .Count
ReDim Classeurs(1 To Nb, 1 To 1)
For i = 1 To Nb
If Check(.Item(i), FicNom) = True Then
G = G + 1
Classeurs(G, 1) = .Item(i)
End If
Next i

Application.ScreenUpdating = False
With Range("A1").Resize(Nb)
.Value = Classeurs
.Sort [a1]
End With
Application.ScreenUpdating = True
End With
End If
End With

End Sub

'--------------------------------
Function Check(F As String, NomRecherche As String) As Boolean
Check = False

If Split(F, "")(UBound(Split(F, ""))) = NomRecherche Then
Check = True
End If
End Function
'--------------------------------


Salutations!


"HD" a écrit dans le message de news: cvvbe6$1tm8$
Est-ce que tu as renseigné ta variable comme il se doit :
Oui.... Exactement comme ce que tu montre ci-dessous


Dim FicNom As string
FicNom = "Toto.xls"

' et le reste de ta procédure !

.FileName = FicNom


En fait mon FicNom est "Budget.xls" et j'obtiens comme résultat par exemple
ces deux types de lignes :
"O:DP 09 HonorairesBudget.xls"
"O:EB5 PlanEQUIPE ET BUDGET.xls"

Alors que bien sûr je ne cherche que les fichier se nommant "Budget.xls"...
Peut être y'at il un problème venant de l'espace devant le nom ?

--
@+
HD

Avatar
HD
If Split(F, "")(UBound(Split(F, ""))) = NomRecherche Then


La fonction Split n'existe pas dans Excel 97... En tout cas à priori il me
faut trouver une astuce pour extraire le nom du fichier exacte et filtrer
les indésirables...

Merci Michel pour ton aide.
--
@+
HD

Avatar
MichDenis
Bonjour HD,

Tu peux remplacer la fonction proposée par une parmi celles-ci :

'-----------------------------------
Function Check(F As String, NomRecherche As String) As Boolean
Check = False

If Mid(F, InStrRev(F, "") + 1, 500) = NomRecherche Then
Check = True
End If
End Function
'-----------------------------------

OU

'-----------------------------------
Function Check(F As String, NomRecherche As String) As Boolean

Check = False
Dim Nb As Integer, B As Integer

Nb = Len(F)
For B = Nb To 1 Step -1
If Mid(F, B, 1) = "" Then
If Right(F, Nb - B) = NomRecherche Then
Check = True
Exit For
Else
Exit For
End If
End If
Next

End Function
'-----------------------------------


Salutations!




"HD" a écrit dans le message de news: d0178k$2tok$
If Split(F, "")(UBound(Split(F, ""))) = NomRecherche Then


La fonction Split n'existe pas dans Excel 97... En tout cas à priori il me
faut trouver une astuce pour extraire le nom du fichier exacte et filtrer
les indésirables...

Merci Michel pour ton aide.
--
@+
HD