Recherche de fichiers en vba

Résolu
isis1be Messages postés 45 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 19 avril 2008 - 3 oct. 2007 à 17:21
isis1be Messages postés 45 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 19 avril 2008 - 11 oct. 2007 à 14:47
Salut à tous
J'ai trouvé un code qui permet de rechercher des fichier que je modifie car je doit faire la recherche à partir d'une donnée insérer dans ma userform par l'utilisateur et il faut afficher le résultat dans une ListBoxResult, voila mais il me dit qu'il y a une erreur à la ligne AddItem  il me dit "fonction ou variable attendue" mais je sais pas ce que cela veut dire

Private Sub btnchercher_Click()

    Dim ChercheFichier As FileSearch, compteur As Long
    Set ChercheFichier =  Application.FileSearch
    Dim NomClient As String
    NomClient = ZoneRech.Value
    With ChercheFichier
    .LookIn = "C:\Documents and Settings\vincent\Bureau"
    .Filename = NomClient & "*"
    .FileType = msoFileTypeExcelWorkbooks
    .SearchSubFolders = True
    .Execute
    For compteur = 1 To .FoundFiles.Count
     ListBoxResult.AddItem.FoundFiles 
    Next
    End With
    ListBoxResult.ListIndex  = 0

End Sub 


Voila si quelqu'un peut me donner un coup de main
Voila un grand merci et surtout bon surf à tous

10 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
10 oct. 2007 à 23:19
J'ai mis un .xls en bleu si tu veux rechercher des fichiers xls seulement.
Si tu veux afficher tous les fichiers, enlève cette partie et laisse seulement l'astérisque.
En fait, mets ou enlève les astérisques selon le besoin.

Private Sub CommandButton1_Click()
    Dim Fichier As String
   
    ListBoxResult..Clear  'on vide en premier

    'recherche dans le répertoire qu'on veut
    Fichier = Dir(" C:\Documents and Settings\vincent\Bureau\ ")
   
    Do While Fichier <> ""
    'UCase pour s'assurer d'une bonne comparaison entre les chaînes
        If UCase(Fichier) Like "*" & UCase(ZoneRech.Value) & "*.XLS" Then
            ListBoxResult.AddItem Fichier
        End If
        Fichier = Dir  ' Recherche suivante
    Loop

    'On spécifie l'Index à afficher seulement si la liste n'est pas vide
    If ListBoxResult.ListCount > 0 then ListBoxResult.ListIndex = 0
  
End Sub

MPi²
3
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
3 oct. 2007 à 17:59
Salut,

Il y a 2 erreurs sur ta ligne de code :
- FoundFiles renvoie une collection (équivalent en gros à un tableau), il faut donc prendre un seul élément du tableau à la fois :
- tu as oublié l'espace entre .Additem et .FoundFiles :

ListBoxResult.AddItem .FoundFiles(compteur)
0
isis1be Messages postés 45 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 19 avril 2008
3 oct. 2007 à 18:52
Ok , mais maintenant  quand je met un critère de recherche dans mon textbox "ZoneRech" il me donne une erreur à la dernière ligne

    ListBoxResult.AddItem .FoundFiles(compteur)
    Next
    End With
    ListBoxResult.ListIndex = 0

End Sub

et quand je ne m'est rien dans mon textbox il m'affiche bien le chemin complet des fichiers, mais comment faire pour n'afficher que les nom des dossiers?

Merci à toi pour ton aide et @ bientôt.
0
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
3 oct. 2007 à 22:50
Si ta listbox est vide, tu ne peux pas forcer le listindex à 0
> if ListBoxResult.ListCount > 0 then ListBoxResult.ListIndex = 0

Pour le reste, j'ai fait ça :

Private Sub btnchercher_Click()
    Dim ChercheFichier As FileSearch, compteur As Long
    Dim ls_Folder As String
    Dim ll_Pos As Long
   
    Dim NomClient As String
   
    NomClient = ZoneRech.Value
    Set ChercheFichier = Application.FileSearch
   
    ListBoxResult.Clear
    With ChercheFichier
        .LookIn = "C:\Documents and Settings\vincent\Bureau"
        .Filename = NomClient & "*"
        .FileType = msoFileTypeExcelWorkbooks
        .SearchSubFolders = True
        .Execute msoSortByFileName, msoSortOrderAscending
        For compteur = 1 To .FoundFiles.Count
            'Récupère le nom du fichier
            ls_Folder = .FoundFiles(compteur)
            'Détermine la position du dernier "" dans le nom complet du fichier
            ll_Pos = InStrRev(ls_Folder, "")
            If ll_Pos > 0 Then
                'Si il y a un "", on extrait tt ce qui est situé avant (= répertoire)
                ls_Folder = Left(ls_Folder, ll_Pos - 1)
            End If
            'Teste si le répertoire a déjà été ajouté à la liste
            If Not lfctFolderExists(ls_Folder) Then
                'Si pas encore ajouté, on l'ajoute
                ListBoxResult.AddItem ls_Folder
            End If
        Next
    End With
    'Si il y a des éléments dans la liste, on sélectionne le 1e élément.
    If ListBoxResult.ListCount > 0 Then
        ListBoxResult.ListIndex = 0
    End If

End Sub

Private Function lfctFolderExists(aFolder As String) As Boolean
Dim li_Index As Integer
'Parcourt les éléments de la liste
For li_Index = 0 To ListBoxResult.ListCount - 1
    'Si un des éléments porte le nom passé en paramètre, on sort en indiquant que l'élément est déjà présent
    If ListBoxResult.List(li_Index) = aFolder Then
        lfctFolderExists = True
        Exit Function
    End If
Next li_Index
End Function

L'inconvénient, c'est que ce n'est pas super optimisé comme méthode : si tu as 2 répertoires, mais qu'ils contiennent chacun 5000 fichiers; ca va tourner qqes minutes pour sortir 2 malheureuses lignes dans ta listbox.
Je dois avoir dans un coin  un bout de programme qui fait du parcours de répertoires récursifs, sans passer par les fonctions d'Excel. Je vais essayer de le retrouver demain
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
isis1be Messages postés 45 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 19 avril 2008
4 oct. 2007 à 09:16
Ca marche mais il me trouve tous les fichiers contenant le nom renseigné en paramètre, alors qu'il ne faudrais que les fichier excel, et quand je ne mets rien en paramètres de renseignement il me trouve tous les fichiers qui sont situé sur le bureau, donc ca me fait une tartine invraissemblable de fichier, comment faire pour restreindre cette recherche au simple fichier excel? et pour n'afficher que le nom du fichier sans son chemin d'accès et est-ce possible?

Je te remercie encore pour ton aide
@ bientôt
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
4 oct. 2007 à 23:40
En passant rapidement ce qui a été dit, j'imagine que tu y arriverais avec

.Filename = NomClient & "*.xls"

MPi²
0
isis1be Messages postés 45 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 19 avril 2008
5 oct. 2007 à 12:59
Oui ca marche, c'est déja ca

Mais Je voudrais affiné le code pour qu'il m'affiche seulement le nom du fichier qu'il aurais trouvé, car ici j'ai deux fichier sur mon bureau mais il ne me montre que le chemin d'accès

C:\Documents and Settings\vincent\Bureau

Donc je voudrais voir, apparaitre les deux fichier existant sur mon bureau.
Merci pour votre aide @ bientôt
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 oct. 2007 à 23:35
Essaie comme ceci.
J'ai mis un contrôle Textbox, un Listbox et un bouton sur un Userform avec leurs noms par défaut.

Tu n'as qu'à écrire dans le textbox la partie du nom de fichier que tu recherches.

Private Sub CommandButton1_Click()
    Dim Fichier As String
   
    ListBox1.Clear
    Fichier = Dir("D:\Documents Provigo\WMS")
   
    Do While Fichier <> ""
        If UCase(Fichier) Like "*" & UCase(TextBox1.Text) & "*" Then
            ListBox1.AddItem Fichier
        End If
        Fichier = Dir
    Loop
   
End Sub

MPi²
0
isis1be Messages postés 45 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 19 avril 2008
10 oct. 2007 à 14:49
Désolé pour se retard mais j'ai été fort occupé.
Je te remercie de ton aide mais comment je l'intègre au code précédent?
encore merci
0
isis1be Messages postés 45 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 19 avril 2008
11 oct. 2007 à 14:47
Ok super tous fonctionne je te remercie beaucoup
@ plus tard MPi
0
Rejoignez-nous