Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : VBA Excel - Recherche de fichiers [ Archives Visual Basic / VBA ] (econs)

vendredi 27 janvier 2006 à 11:33:47 | VBA Excel - Recherche de fichiers

econs

Administrateur CodeS-SourceS


Bonjour à toutes et tous.



Je possède un dossier contenant un certain nombre de fichiers :
-   Un fichier Visio    (*.vsd)
-   Un fichier Excel    (*.xls)
-   Un fichier Word   (*.doc)
-   Un fichier Texte   (*.txt)
-   Un fichier Image   (*.bmp)
-   Un fichier Zip      (*.zip)

Etant sous Excel 2003 (sans DirListBox, sans FileListBox), j'utilise la méthode FileSearch de l'objet Application pour lister les fichiers d'un répertoire donné. Et figurez-vous que çà fonctionne ... presque. Je vois apparaître tous les fichiers dans ma ListBox, sauf le fichier Zip.


Sub RechercheFichiers(sFolder As String)
'   Cette procedure recherche tous les fichiers contenus dans un répertoire donné.
'   Elle les affiche dans une ListBox (lstFiles ).

Dim NomFichier As String
Dim nbFiles As Long

    NomFichier = "*.*"
    lstFiles.Clear
   
    With Application.FileSearch
        .NewSearch
        .LookIn = sFolder
        .SearchSubFolders = True
        .Filename = NomFichier
        .FileType = msoFileTypeAllFiles
        .MatchTextExactly = True
        If .Execute(msoSortByNone) > 0 Then
            For i = 1 To .FoundFiles.Count
                lstFiles.AddItem .FoundFiles(i)
            Next i
        Else
            MsgBox "Aucun fichier n'a été trouvé."
        End If
    End With
End Sub


' Et j'ai juste un bouton qui lance tout :

Private Sub CommandButton2_Click()
Dim sTSRFolder As String
    sTSRFolder = "C:\tmp"
    RechercheFichiers sTSRFolder 
End Sub




ATTENTION : Je sais comment contourner ce problème par une autre méthode de recherche de fichiers.
Je voudrais juste avoir une explication pour ces fichiers Zip que je ne vois pas. (Ce ne sont pas des fichiers cachés, ce ne sont pas des zip vides). Le comportement de la méthode FileSearch me paraît douteux.





Manu
----------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.

vendredi 27 janvier 2006 à 11:49:53 | Re : VBA Excel - Recherche de fichiers

jrivet

Membre Club
Salut, Je viens d'essayer ton code sous Excel 2000, et je n'ai eu aucun probleme (excepté le "msoSortByNone" qui n'est pas reconnu sous 2000) Je suis sûr que cela ne t'apporte rien de le savoir mais ca marche sous 2000. Voila. Ps: ce post est en grande partie là aussi pour suivre le déroulement du problème.

vendredi 27 janvier 2006 à 12:07:37 | Re : VBA Excel - Recherche de fichiers

econs

Administrateur CodeS-SourceS
Détrompes-toi, çà m'aide.
Ca permet de valider le code, et de montrer que le problème est bien, comme je le pensais, du côté de la méthode FileSearch.


Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.

vendredi 27 janvier 2006 à 12:08:39 | Re : VBA Excel - Recherche de fichiers

econs

Administrateur CodeS-SourceS
Mais du coup, je cherche toujours l'explication

Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.

vendredi 27 janvier 2006 à 21:32:54 | Re : VBA Excel - Recherche de fichiers

us_30

Membre Club
Bonsoir,

Je me suis intéressé à ton problème... et j'ai pas trouvé d'explication...

Pour ma part, ton code ne fonctionne pas. JE suis sous Excel 97 et Win ME.

Le blocage se fait à deux niveaux.

1. La ligne : .Filename = NomFichier
n'est pas reconnu avec "*.*", mais marche avec un "xls" par exemple. (j'ai regardé dans un livre sur VBA pour Excel 2003, justement...)

2.         If .Execute(msoSortByNone) > 0 Then
ne semble pas accepter cette syntaxe, carrément...

J'AI donc repris ton code pour voir comment je pouvais faire pour faire la même chose... et ma solution c'est de chercher tous les types de fichiers au lieu d'utiliser *.*
Puis, l'instruction .Execute(msoSortByNone) qui semble éviter la recherche dans la fin d'un repertoire, j'ai utilisé On error resume next, pour poursuivre...

Voilà ce que cela donne :

    With Application.FileSearch
        .NewSearch
        .LookIn = sFolder
        .SearchSubFolders = True
        .FileType = msoFileTypeAllFiles
        .MatchTextExactly = True
        .Execute msoSortByFileType
        On Error Resume Next
            For i = 1 To .FoundFiles.Count
                UserForm1.ListBox1.AddItem .FoundFiles(i)
            Next i
    End With

et là, cela fonctionne alors... et les zip sont reconnus au même titre que les autres...

Réflexion ?!
En fait, je suis étonné d'être obligé de changer ton code pour que cela fonctionne sous Excel 97... SI tu essayes mon code, et que cela fonctionne, faut-il conclure que l'emploi de "*.*" pour
.Filename est défaillante ? j'ai aussi remarquer (mais c'est peut être normal, bien que curieux) que si j'emploi .Filename "zip" (ou autre, comme "txt") , alors tous les noms de fichiers portant "zip" dans le nom ou dans l'extension sont recenssés... c'est pas super, à moins de faire une recherche ensuite sur l'extension...

Voilà, en espérant avoir peut-être un indice...

Amicalement,
Us.

mercredi 16 août 2006 à 16:21:37 | Re : VBA Excel - Recherche de fichiers

doctorO

Bonjour,

sur Excel 97, pour faire marcher la commande de recherche de fichiers specifiques en utilisant Application.Filesearch.Filename, il faut ajouter le caractere "\" dans la chaine de recherche et ne pas utiliser de "*".....  c'est  tres etrange

Exemple :

    With Application.FileSearch
        .NewSearch
        .FileName = "\.zip"
        .LookIn = "C:\"
        .SearchSubFolders = False
        .MatchTextExactly = True
        .FileType = msoFileTypeAllFiles
        If .Execute() > 0 Then
            MsgBox "Ce dossier contient " & .FoundFiles.Count & _
                " fichier(s) répondant aux critères."
            For i = 1 To .FoundFiles.Count
                MsgBox .FoundFiles(i)
            Next i
        Else
            MsgBox "Aucun fichier n'a été trouvé."
        End If
    End With

Pour faire une recherche sur la chaine "*B*.zip" par exemple, il faut mettre
        .FileName = "\B.zip"
Lo logique est curieuse....

De plus sous Windows XP il faut desactiver le service qui lit les archives Zip en tant que repertoire

A+
DoctorO


mercredi 7 mars 2007 à 12:38:15 | Re : VBA Excel - Recherche de fichiers

facknrask

bon on va continuer dans l'aberant

moi j'ai une macro qui fonctionne niquel sous Excel 2000 (et teste sous excel 2003) avec Windows 2000 pour la chose suivante :
recherche des fichiers qui s'appelle *.dat

Public Function FIND_DAT_FILE(ByVal Folder_DAT As String) As Integer
Dim I As Integer
Application.StatusBar = "Debut calcul nombre de fichier a traiter"
Set fs = Application.FileSearch
With fs
    .LookIn = Folder_DAT
    .FileName = "*.dat"
    If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
        FIND_DAT_FILE = .FoundFiles.Count
        ReDim Dat_file_list(.FoundFiles.Count)
        ReDim Dat_file_scanner_name(.FoundFiles.Count)
        For I = 1 To .FoundFiles.Count
        Dat_file_list(I) = .FoundFiles(I)
            If InStr(1, Dat_file_list(I), GNIQ_Dat, vbTextCompare) <> 0 Then
            GNIQ_Pos = InStr(1, Dat_file_list(I), "GNIQ")
            Dot_Dat_Position = InStr(1, Dat_file_list(I), ".dat")
            Dat_file_scanner_name(I) = Mid(Dat_file_list(I), GNIQ_Pos + Len(GNIQ_Dat), Dot_Dat_Position - (GNIQ_Pos + Len(GNIQ_Dat)))
            Else
            Dat_file_scanner_name(I) = "Autres"
            End If
        Next I
    Else
        'MsgBox "There were no files found."
    End If
End With
Application.StatusBar = "Fin calcul nombre de fichier a traiter"
End Function


Si je la lance sous Excel 97 la ligne suivante
    .FileName = "*.dat"
ne marche pas avec erreur : Run-Time error '5' : Invalid procedure call or argument
suite a vos remarques, j'ai essaye de mettre la ligne     .FileName = "/.dat" et il met seulement ".dat" dans fs.filename (vu via la local windows) sans le / mais il ne trouve pas de fichier s'appelant .dat !!!!!

mais j'ai essaye plus tordu
j'ai essaye de remettre le *.dat dans le filename apres avoir mis la ligne /.dat et la plus d'errreur Run-Time error '5' : Invalid procedure call or argument et le filename prend bien le *.data (vu via la local windows)
mais il ne trouve toujours pas de fichier s'appelant .dat !!!!!

Pourquoi il ne trouve pas !!!
he he he j'ai compris
parce qu'il faut faire la chose suivante :

l'ordre que j'avais choisi n'est pas correct suit je pense a un bug Excel
Set fs = Application.FileSearch
With fs
    .LookIn = Folder_DAT
    .FileName = "/.dat"
    .FileName = "*.dat"
    If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then

il faut mettre     .LookIn = Folder_DAT apres les filename car si on le met avant le bug reinitialise le repertoire de recherche a la racine c:\  ???? (vu avec le suivi des variables via la locals Windows dans VBA)

Set fs = Application.FileSearch
With fs
    .FileName = "/.dat"
    .FileName = "*.dat" (n'est pas indispensable sous 2000 car le / marche sous aussi sous Excel 2000 mais apres verif sous Excel 2003 le / ne marche pas, merci Bill Gate !!!)
    .LookIn = Folder_DAT
    If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then

En gros pour mettre un Wildcard * dans un Application.FileSearch compatible a la fois sous Excel 2000, 97 et 2003 il faut mettre la lignejuste ci-dessous
Set fs = Application.FileSearch
With fs
    .FileName = "/.dat"
    .FileName = "*.dat" (indispensable pour une compatibilite totale des Excel
    .LookIn = Folder_DAT
    If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then


MaaaaaaaaGiiiiiiiiiiiiqueeeeeeeeeeee



Cette discussion est classé dans : fichier, excel, recherche, fichiers, zip


Répondre à ce message

Sujets en rapport avec ce message

VB6 et des fichiers Excel 97 [ par Sandro ] Bonjour,Je cherche à ouvrir un fichier Excel 97 avec VB6, pour extraire le contenu de feuilles et de cellules, pour générer un fichier texte avec.Ext- Lire des fichiers Excel par ADO [ par mba ] Est-il possible de manipuler un fichier excel avec un recordset ADO.Y a-t-il une connexion string pour connecter un fichier Excel ? a l'aide svp !!!!!!!!! [ par LeKamé ] salut !!mon probleme !! c'est que je veux mettre dans un programme, des fichiers, bon ca c'est pas dur, je créé une ressource et je l'extrait de l'exe enregistrement chemin et fichiers dans un ini et recherche dans fichier ini [ par nanard ] Bonjour à tousJ'ai créé une appli sous VB5, et je voudrai que l'utilisateur l'installe, mais que le CD soit obligatoire pour la recherche des fichiers Pb de recherche fichiers !! [ par neo ] Bonjour,Voilà g un pbleme je n'arrive pas à trouver une solution concernant le lancement d'un fichier à partir de son nom !!Je voudrais mettre un fich recherche de fichiers txt [ par gnome ] j'ai un pb je dois trouver un fichier correspondant aux mots mis dans des textbox(9)le pb c ke les mots sont ecrits en fonction de 9 critères ex:pour Urgent excel/vb [ par CAOVINCE ] Voila, j'ai 2 fichiers, 1 original et 1 trié (que je modifie) a partir de l'original. Je veux comparer ces 2 fichiers et reecrire le tout dans un 3eme recherche de code pour appeler un fichier [ par tgerdil ] bonjourvoila, j'ai besoin d'appeler différents fichiers les uns apres les autres dans une procédure. j'ai trouvé une façonde le faire en utilisant un Recherche dans un fichier excel [ par Nixo ] Voilà , je shouaite executer un recherche par "site" (une certaine colonne du document excel) dans un fichier excel mais je ne connais pas les equiva Lier des fichiers excel et des feuilles excel [ par Mesacraft ] Bonjour, tjs dans la construction de mes macros je viens de rencontre un prob pas vraiment sympa.Dans ma première feuille j'historise des données sur


Nos sponsors

Sondage...

CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.