OVH Cloud OVH Cloud

Vba qui marche chez moi mais rame à mon travail

3 réponses
Avatar
Xavier POWAGA
bonjour à tous,
avec l'aide du groupe je me suis fait une petite macro qui me permet de
tester si le nom d'un fichier connu est contenu dans un répertoire qui en
contient une vingtaine .

j'ai crée la fonction suivante:
Public Function ExisteFichier(NomFichier As String) As Boolean

Dim FSO As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object

Set FSO = CreateObject("Scripting.FileSystemObject")
NomDossier = DataRepertoireFicheRex
Set Dossier = FSO.GetFolder(NomDossier)
Set Files = Dossier.Files
ExisteFichier = False
If Files.Count <> 0 Then
For Each File In Files
If File.Name = NomFichier Then
ExisteFichier = True
GoTo Etiq1
End If
Next
Etiq1: End If

End Function

A la maison, ayant un micro performant, le test de tous mes noms de fichier
prend au bas mot 10 secondes. au boulot cela prend 15 minutes.
existe il une solution pour améliorer ma fonction ? en effet pour chercher
s'il existe un fichier ayant le nom voulu je suis obligé de les tester un
par un
For Each File In Files
If File.Name = NomFichier Then
ExisteFichier = True
GoTo Etiq1
End If
Next
n'y aurait il pas un moyen pour lui demander, sans les tester un par un, si
mon fichier est contenu dans la liste ?

merci de vos idées

3 réponses

Avatar
LSteph
Bonjour,
Sur une execution selon tes ressources cela ne changera pas grand chose
mais:
A priori exit for serait mieux que goto etiq1
et remettre les variables objet à nothing serait pas mal
si tu dois executer plusieurs fois.

lSteph

"Xavier POWAGA" a écrit dans le message de news:
43ddf93e$0$23235$
bonjour à tous,
avec l'aide du groupe je me suis fait une petite macro qui me permet de
tester si le nom d'un fichier connu est contenu dans un répertoire qui en
contient une vingtaine .

j'ai crée la fonction suivante:
Public Function ExisteFichier(NomFichier As String) As Boolean

Dim FSO As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object

Set FSO = CreateObject("Scripting.FileSystemObject")
NomDossier = DataRepertoireFicheRex
Set Dossier = FSO.GetFolder(NomDossier)
Set Files = Dossier.Files
ExisteFichier = False
If Files.Count <> 0 Then
For Each File In Files
If File.Name = NomFichier Then
ExisteFichier = True
GoTo Etiq1
End If
Next
Etiq1: End If

End Function

A la maison, ayant un micro performant, le test de tous mes noms de
fichier prend au bas mot 10 secondes. au boulot cela prend 15 minutes.
existe il une solution pour améliorer ma fonction ? en effet pour chercher
s'il existe un fichier ayant le nom voulu je suis obligé de les tester un
par un
For Each File In Files
If File.Name = NomFichier Then
ExisteFichier = True
GoTo Etiq1
End If
Next
n'y aurait il pas un moyen pour lui demander, sans les tester un par un,
si mon fichier est contenu dans la liste ?

merci de vos idées




Avatar
Michel Pierron
Bonjour Xavier;
Utiliser FSO qui est très lent n'est pas nécessaire pour cette simple
utilisation; pourquoi pas tout simplement la fonction Dir:

Function FileExist(FullFileName$, Optional FileOpen As Boolean = False) As
Boolean
FileExist = Len(Dir(FullFileName)) > 0
If Not FileExist Then GoTo 1
If FileOpen Then Workbooks.Open Fichier
Exit Function
1: MsgBox "Fichier " & Fichier & " non trouvé !", 64
End Function

MP

"Xavier POWAGA" a écrit dans le message de news:
43ddf93e$0$23235$
bonjour à tous,
avec l'aide du groupe je me suis fait une petite macro qui me permet de
tester si le nom d'un fichier connu est contenu dans un répertoire qui en
contient une vingtaine .

j'ai crée la fonction suivante:
Public Function ExisteFichier(NomFichier As String) As Boolean

Dim FSO As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object

Set FSO = CreateObject("Scripting.FileSystemObject")
NomDossier = DataRepertoireFicheRex
Set Dossier = FSO.GetFolder(NomDossier)
Set Files = Dossier.Files
ExisteFichier = False
If Files.Count <> 0 Then
For Each File In Files
If File.Name = NomFichier Then
ExisteFichier = True
GoTo Etiq1
End If
Next
Etiq1: End If

End Function

A la maison, ayant un micro performant, le test de tous mes noms de
fichier

prend au bas mot 10 secondes. au boulot cela prend 15 minutes.
existe il une solution pour améliorer ma fonction ? en effet pour chercher
s'il existe un fichier ayant le nom voulu je suis obligé de les tester un
par un
For Each File In Files
If File.Name = NomFichier Then
ExisteFichier = True
GoTo Etiq1
End If
Next
n'y aurait il pas un moyen pour lui demander, sans les tester un par un,
si

mon fichier est contenu dans la liste ?

merci de vos idées




Avatar
Xavier POWAGA
merci les gars, j'ai pris en compte vos remarques et maintenant ça marche du
feu de dieu

xavier
"Michel Pierron" a écrit dans le message de news:

Bonjour Xavier;
Utiliser FSO qui est très lent n'est pas nécessaire pour cette simple
utilisation; pourquoi pas tout simplement la fonction Dir:

Function FileExist(FullFileName$, Optional FileOpen As Boolean = False) As
Boolean
FileExist = Len(Dir(FullFileName)) > 0
If Not FileExist Then GoTo 1
If FileOpen Then Workbooks.Open Fichier
Exit Function
1: MsgBox "Fichier " & Fichier & " non trouvé !", 64
End Function

MP

"Xavier POWAGA" a écrit dans le message de news:
43ddf93e$0$23235$
bonjour à tous,
avec l'aide du groupe je me suis fait une petite macro qui me permet de
tester si le nom d'un fichier connu est contenu dans un répertoire qui en
contient une vingtaine .

j'ai crée la fonction suivante:
Public Function ExisteFichier(NomFichier As String) As Boolean

Dim FSO As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object

Set FSO = CreateObject("Scripting.FileSystemObject")
NomDossier = DataRepertoireFicheRex
Set Dossier = FSO.GetFolder(NomDossier)
Set Files = Dossier.Files
ExisteFichier = False
If Files.Count <> 0 Then
For Each File In Files
If File.Name = NomFichier Then
ExisteFichier = True
GoTo Etiq1
End If
Next
Etiq1: End If

End Function

A la maison, ayant un micro performant, le test de tous mes noms de
fichier

prend au bas mot 10 secondes. au boulot cela prend 15 minutes.
existe il une solution pour améliorer ma fonction ? en effet pour
chercher
s'il existe un fichier ayant le nom voulu je suis obligé de les tester un
par un
For Each File In Files
If File.Name = NomFichier Then
ExisteFichier = True
GoTo Etiq1
End If
Next
n'y aurait il pas un moyen pour lui demander, sans les tester un par un,
si

mon fichier est contenu dans la liste ?

merci de vos idées