sfab41
Messages postés28Date d'inscriptionvendredi 27 mars 2009StatutMembreDernière intervention 9 juillet 2009
-
17 mai 2009 à 19:37
sfab41
Messages postés28Date d'inscriptionvendredi 27 mars 2009StatutMembreDernière intervention 9 juillet 2009
-
25 mai 2009 à 16:35
Bonjour!
Petit souci qui a surement une réponse simple : pour chaque cellule d'une plage, j'utilise la fonction "FileSearch" pour rechercher dans un dossier si un fichier a pour nom la valeur de la cellule. Dans le cas où aucun fichier ne porte ce nom, la cellule est supprimée. Dans l'ensemble, cela marche, mais le problème est que si la cellule a pour contenu "blabla", il va accepter un fichier qui s'appelle "blablasdfsdf" par exemple.
Est-il possible de faire une recherche avec comme nom de fichier le nom exact de la cellule?
Voilà le code:
With Worksheets(1).Range("D8:D" & Compteur)
For Each cell In Range("D8:D" & Compteur)
If Not IsEmpty(cell) Then
With Application.FileSearch
.NewSearch
.LookIn = source
.SearchSubFolders = False
.FileName = cell.Value
.Execute
If .FoundFiles.Count = 0 Then cell.ClearContents
End With
End If
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 18 mai 2009 à 12:10
Salut,
et pourquoi ne pas utiliser la fonction "Dir" ?
Cela serait plus simple ( a mon avis) et cela resoudrait ton probleme
Sub TestSurFichier()
Dim chemin As String, NomFichier As String
Dim Cellule As Range, Maplage As Range
chemin = "c:\temp"
' on determine la plage qui contient les noms de fichiers
With Sheets("feuil1")
Set Maplage = .Range("A1:" & .Range("A" & .Columns("A").Rows.Count).End(xlUp).Address(False, False))
End With
'on boucle sur cette plage
For Each Cellule In Maplage
' si le fichier n'existe pas la fonction dir renvera une chaine vide
If Dir$(chemin & Cellule.Text) = "" Then
Cellule.ClearContents 'donc on vide la cellule
End If
Next
End Sub
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 18 mai 2009 à 22:21
Salut,
j'ai pas imagine (a tord d'ailleur ), que tu pouvais une longue liste de fichiers. De plus je me suis rappeler de cette propriete du FileSearch et qui est:
MatchTextExactly = True
ce qui dans ton precedent code donne :
Sub TestSurFichiers()
Dim chemin As String
Dim Cellule As Range, Maplage As Range
chemin = "C:\WINDOWS\system32"
' on determine la plage qui contient les noms de fichiers
With Sheets("sheet1")
Set Maplage = .Range("D8:" & .Range("D" & .Columns("D").Rows.Count).End(xlUp).Address(False, False))
End With
For Each Cellule In Maplage
If Not IsEmpty(Cellule) Then
With Application.FileSearch
.NewSearch
.LookIn = chemin
.SearchSubFolders = False
.Filename = Cellule.Value
.MatchTextExactly = True
.Execute
If .FoundFiles.Count = 0 Then Cellule.ClearContents
End With
End If
Next
End Sub
note que cell est un mot reserve vba donc a eviter comme nom de variable
par contre sur une recherche dans un repertoire contenant 2737 fichier et a partir d'une liste de 2737 fichiers
le temps que prend le code qui utilise la fonction dir donne un resultat en 1.359"
alors que ton code donne un resultat en 174.64" soit pres de 3 minutes. Alors franchement la je ne vois pas ce que je peux faire de mieux pour toi !
As tu change quoi que soit au code que je t'ai donne ? si oui montre moi
sfab41
Messages postés28Date d'inscriptionvendredi 27 mars 2009StatutMembreDernière intervention 9 juillet 2009 18 mai 2009 à 19:37
J'ai essayé la méthode avec la fonction "Dir" mais ça prend un temps dingue!!! Il n'y aurait pas moyen de faire quelque chose du type "Lookat:=xlWhole" comme on peut faire pour la fonction "Find"?
sfab41
Messages postés28Date d'inscriptionvendredi 27 mars 2009StatutMembreDernière intervention 9 juillet 2009 22 mai 2009 à 23:00
Me revoilà! Désolé mais j'ai été très occupé ces derniers temps et j'avoue ne pas avoir pris le temps de me remettre sur ma macro, ni même de répondre.
Alors voilà le topo :
- j'ai tester avec "MatchTextExactly" et le résultat est le même
- j'ai écris exactement le code que vous m'aviez fourni en 1ère réponse et le temps mis pour effectuer la macro est démentiel!
Est-ce que le fait que mes fichiers soit gros peut influencer? Est-ce que je dois activer un paramètre pour exécuter cette macro (référence)?
Merci de votre aide parce que là je bloque complètement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
sfab41
Messages postés28Date d'inscriptionvendredi 27 mars 2009StatutMembreDernière intervention 9 juillet 2009 25 mai 2009 à 16:35
C'est bon, j'ai trouvé ! En fait j'ai simplement ajouté l'extension du fichier et ça marche! Voilà c'était tout bête. En effet c'est beaucoup plus rapide de cette manière alors merci bigfish.
Nouveau code:
Dim chemin As String, NomFichier As String
Dim Cellule As Range, Maplage As Range
chemin = "c:\temp"
With Sheets("feuil1")
Set Maplage = .Range("A1:" & .Range("A" & .Columns("A").Rows.Count).End(xlUp).Address(False, False))
End With
For Each Cellule In Maplage
If Dir(chemin & Cellule.Text & ".asf") = "" Then
Cellule.ClearContents
End If
Next