VBA - Recherche de fichiers

tototiti2008

XLDnaute Barbatruc
Bonjour,

Je recherche un grand nombre de fichiers dans un dossier précis et ses sous-dossiers.
J'ai recherché sur le net et j'ai abouti à ce code :
Code:
Sub Cherche()
Dim RechFic As FileSearch, i As Long
    Set RechFic = Application.FileSearch
        With RechFic
        .NewSearch
        .LookIn = "C:\temp"
        .Filename = "*.*"
        .SearchSubFolders = True
        .PropertyTests.Add Name:="Entre", Condition:=msoConditionAnytimeBetween, _
            Value:="3/10/2008", SecondValue:="4/30/2008", Connector:=msoConnectorAnd
        .Execute
            For i = 1 To .FoundFiles.Count
                MsgBox .FoundFiles(i)
            Next i
        End With
End Sub

Il semble qu'il recherche (c'est long) mais il ne trouve aucune réponse.
Pour les arguments Value et SeconValue, j'ai essayé des dates au format français, américain, des variables de type date... toujours aucun résultat.

Faudrait-il que j'active une Référence ?
Si je met la ligne .PropertyTests en commentaire, il me trouve tous les fichiers sans problème, mais impossible de la faire fonctionner.

Si quelqu'un a des infos sur le sujet...

Merci d'avance. :)
 
G

Guest

Guest
Re : VBA - Recherche de fichiers

bonjour TotoTiti,

corriger la macro avec ce qui apparaît en rouge ci-dessous:

Code:
Sub Cherche()
    Dim RechFic As FileSearch, i As Long
    Set RechFic = Application.FileSearch
    With RechFic
        [COLOR=red]Do While .PropertyTests.Count > 0
            .PropertyTests.Remove (1)
        Loop[/COLOR]
        .NewSearch
        .LookIn = "C:\temp"
        .Filename = "*.*"
        .SearchSubFolders = True
        .PropertyTests.Add Name:="Entre", Condition:=msoConditionAnytimeBetween, _
                           Value:="3/10/2008", SecondValue:="4/30/2008", Connector:=msoConnectorAnd
        .Execute
        For i = 1 To .FoundFiles.Count
            MsgBox .FoundFiles(i)
        Next i
    End With
End Sub

En effet si l'on rajoute des test à la collection ".PropertyTests" avant d'avoir effacet ceux pouvant exister précédement, il s'ajoute et les fichiers rechercher doivent correspondre à tous les tests de la collection.

A bientôt
 

tototiti2008

XLDnaute Barbatruc
Re : VBA - Recherche de fichiers

Merci de ton aide Hasco, mais ça ne fonctionne toujours pas chez moi...
Et je ne sais toujours pas non plus s'il faut mettre des dates au format américain, français ou en variable date...
Si quelqu'un a une autre idée

Ca y est, je crois que ça marche :

Code:
Sub Cherche()
Dim RechFic As FileSearch, i As Long
    Set RechFic = Application.FileSearch
        With RechFic
        Do While .PropertyTests.Count > 0
            .PropertyTests.Remove (1)
        Loop

        .NewSearch
        .LookIn = "C:\temp"
        .Filename = "*.*"
        .SearchSubFolders = True
        .PropertyTests.Add Name:="Entre", Condition:=msoConditionAnytimeBetween, _
            Value:="10/03/2008", SecondValue:="30/04/2008", Connector:=[COLOR="Red"]msoConnectorOr[/COLOR]
        .Execute
            For i = 1 To .FoundFiles.Count
                MsgBox .FoundFiles(i)
            Next i
        End With
        Set RechFic = Nothing
End Sub

Pas sûr que le 'Set RechFic = Nothing' soit indispensable, mais ça na mange pas de pain.
Merci pour ton aide Hasco, je vais vérifier si les résultats son cohérents
Bonne journée :D
 

tototiti2008

XLDnaute Barbatruc
Re : VBA - Recherche de fichiers

Non, finalement ça ne marche pas, j'ai tous les fichiers en réponse...
Là, je bloque.
Si quelqu'un a une idée, ou est un pro de la recherche de fichiers avancée...
Dommage qu'il y ait si peu d'aide sur les constantes comme msoConditionAnytimeBetween et compagnie...

:mad:
 
G

Guest

Guest
Re : VBA - Recherche de fichiers

Oui,

fileSearch est souvent source de problème c'est pour cela que j'emploie plus souvent la méthode de windows scripting ci-dessous:

Code:
Sub Cherche()
   Dim fso, f, f1, fc, s
   Dim fDate As Date
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder([COLOR=red]ThisWorkbook.Path[/COLOR])
   Set fc = f.Files
 
   For Each f1 In fc
     fDate = CDate(f1.DateCreated)
     If fDate < Now And fDate > CDate("01/04/2008") Then
         s = s & f1.Name & " " & f1.DateCreated
         s = s & vbCrLf
     End If
   Next
   MsgBox s
End Sub

Pour avoir les fichiers dont les dates correspondent aux dates de modifications, remplacer DateCreated par DateLastModified.
si ce sont les derniers accès aux fichiers que l'on veut(sans forcément de modification): DateLastAccessed

si tu ne connais pas ces methode fait une recherche sur le net sur
FileSystemObject.
tu apprendra à manipuler les répertoires et fichiers.

A bientôt
 

tototiti2008

XLDnaute Barbatruc
Re : VBA - Recherche de fichiers

Merci beaucoup Hasco,

En fait je connait les filesystemobject, mais je trouvais bête de rechercher tous les fichiers si je pouvais lui demander de ne retrouver que ceux qui m'intéressent.
Bon, sans doute encore un bug Microsoft, ou alors je comprend vraiment rien.

Merci encore pour tes recherches,

A bientôt

:D
 
G

Guest

Guest
Re : VBA - Recherche de fichiers

Hello!
si je pouvais lui demander de ne retrouver que ceux qui m'intéressent.
As-tu lu tototiti2008 La solution proposée? Elle compare les dates de création.
Et tu peux avoir d'autres critères....!
d'autant plus que le FileSystemObject est plus rapide et plus souple!

A bientôt
 

tototiti2008

XLDnaute Barbatruc
Re : VBA - Recherche de fichiers

Pour mettre un terme à cette discussion, j'avais absolument besoin de rechercher dans un dossier ET ses sous-dossiers.
Je vous propose une solution que j'ai trouvé en mélant FileSearch et FileSystemObject, ça pourra toujours servir à quelqu'un :
Code:
Sub Cherche()
Dim FSo As FileSearch, FileSy, Fil
    Set FileSy = CreateObject("Scripting.FileSystemObject")
    Set FSo = Application.FileSearch
        With FSo
        .NewSearch
        .LookIn = "c:\temp"
        .Filename = "*.*"
        .SearchSubFolders = True
            If .Execute() > 0 Then
                For i = 1 To .FoundFiles.Count
                Set Fil = FileSy.Getfile(.FoundFiles(i))
                    If CDate(Fil.DateLastModified) >= CDate("29/4/08") And CDate(Fil.DateLastModified) <= CDate("30/4/08") Then
                        MsgBox .FoundFiles(i)
                    End If
                Next i
            End If
        End With
End Sub

Bonne journée à tous et merci de vos recherches
:D
 

Discussions similaires

Réponses
16
Affichages
1 K

Statistiques des forums

Discussions
312 413
Messages
2 088 201
Membres
103 762
dernier inscrit
rouazali