VBA. Recherche d'un fichier dans un sous-répertoire
5 réponses
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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <hd@anti.spam.fr> a écrit dans le message de news: uIwOAAaHFHA.720@TK2MSFTNGP10.phx.gbl...
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...
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
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
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 ?
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
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
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" <hd@anti.spam.fr> a écrit dans le message de news: cvvbe6$1tm8$1@biggoron.nerim.net...
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 ?
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
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
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...
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
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
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" <hd@anti.spam.fr> a écrit dans le message de news: d0178k$2tok$1@biggoron.nerim.net...
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...
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...