Trouver les fichiers en mode dynamique ?

alucard_xs

XLDnaute Occasionnel
Bonjour,

voilà je cherche à lister (pour plus tard les manipuler) tout les fichiers .xls que j'ai dans un repertoire, pour cel j'ai donc mis une boite de choix, pour cibler son repertoire, ensuite il m'indique le nom du repertoire que je veux scanner, par contre je n'arrive pas à dénombrer et à afficher les fichiers xls qui sont présents dans ce repertoire, j'ai bien trouver comment afficher et compter des fichiers .xls dans un repertoire donner mais je n'arrive pas à joindre les deux programmes, afin que mon nom de repertoire soit variable ... pour le moment il m'insique et me marque les fichiers présents dans N: et pis c'est tout ...

Merci de m'aider

voci mon code :
-----
Code:
sub essai1212()
choix = ChoixDossierFichier("d:\09OfficeVBA", 1) '<- ici le chemin de ton choix
If choix <> "" Then MsgBox choix
    
Dim p As String, x As Variant
p = "N:/*xls"
x = GetFileList(p)
Select Case IsArray(x)
Case True 'files found
MsgBox UBound(x)
Sheets("feuil1").Range("A:A").Clear
For i = LBound(x) To UBound(x)
Sheets("feuil1").Cells(i, 1).Value = x(i)
Next i
Case False 'no files found
MsgBox "No matching files"
End Select
End Sub

-----
Function ChoixDossierFichier(Racine, Optional SelType As Byte = 0)
Dim objShell, objFolder, Chemin, SecuriteSlash, FlagChoix&, Msg$

    If SelType = 0 Then
      FlagChoix = &H1&: Msg = "Choisissez un dossier :"
    Else
      FlagChoix = &H4000&: Msg = "Choisissez un fichier :"
    End If
                                            
    Set objShell = CreateObject("Shell.Application")
    'le troisième paramètre permet de choisir
    'la s&eacute;lection d'un dossier ou d'un fichier (0 ou 1)
    'le dernier paramètre permet de choisir le dossier racine
    Set objFolder = objShell.BrowseForFolder(&H0&, Msg, FlagChoix, Racine)
    On Error Resume Next
    Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & ""
    If objFolder.Title = "Bureau" Then
        Chemin = "C:\Windows\Bureau"
    End If
    If objFolder.Title = "" Then
        Chemin = ""
    End If

    SecuriteSlash = InStr(objFolder.Title, ":")

    If SecuriteSlash > 0 Then
        Chemin = Mid(objFolder.Title, SecuriteSlash - 1, 2) & ""
    End If
    ChoixDossierFichier = Chemin
End Function


'==================


Function GetFileList(FileSpec As String) As Variant
' Returns an array of filenames that match FileSpec. ' if no matching files are found, it returns false
Dim Filearray() As Variant, Filecount As Integer
Dim Filename As String

'On Error Goto NoFilesFound Filecount = 0
Filename = Dir(FileSpec)
If Filename = "" Then GoTo NoFilesFound

' loop until no more matching files are found
Do While Filename <> ""
    Filecount = Filecount + 1
    ReDim Preserve Filearray(1 To Filecount)
    Filearray(Filecount) = Filename
    Filename = Dir()
Loop
GetFileList = Filearray
Exit Function ' Error handler
NoFilesFound:
GetFileList = False
End Function
 
Dernière édition:

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

peut etre en convertissant la variable choix (si c'est bien une variable) en chaine de caractères ? non ?
 

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Que veux-tu faire des noms de fichiers ? Les mettre dans une liste, les ouvrir ?
Une solution pour les lister
Code:
Sub ListerLesFichiersParOrdreAlpha(Chemin)
Set fs = Application.FileSearch
With fs
    .LookIn = Chemin
    .FileType = msoFileTypeExcelWorkbooks
    '.FileName = "cmd*"
    If .Execute(SortBy:=msoSortByFileName, _
    SortOrder:=msoSortOrderAscending) > 0 Then
        'Pour le nombre de fichier
        MsgBox "Ce dossier contient " & .FoundFiles.Count & _
            " fichier(s) répondant aux critères."
        For i = 1 To .FoundFiles.Count

            '********************** ICI *******************
            [COLOR="Green"]'soit tu affiches leurs noms[/COLOR]
            MsgBox .FoundFiles(i)

            [COLOR="green"]'soit tu les places dans une liste dans un userform[/COLOR]
            Me.TaListe.additem .FoundFiles(i)

            [COLOR="green"]'soit tu les ouvres[/COLOR]
            Workbooks.open Chemin & .FoundFiles(i)
            DoEvents
            
            [COLOR="green"]'soit tu places leurs noms dans une feuille de calculs[/COLOR]
            Worksheets("Feuil1").cells(i+1, 1).value = FoundFiles(i)

            [COLOR="green"]'soit tu places le llien dans une feuille de calculs[/COLOR]
            Worksheets("Feuil1").Hyperlinks.Add Worksheets("Feuil1").cells(i+1, 1), .FoundFiles(i)


        Next i
    Else
        MsgBox "Aucun fichier n'a été trouvé."
    End If
End With

End Sub
Tu appelles cette sub avec, en paramètre, le chemin pris dans ta liste des répertoires.
Voir les fichiers joints ici
 
Dernière édition:

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Je souhaiterai les mettre dans une liste en feuil1 en fait, juste pour les lister, pour bien montrer à l'utilisateur les fichiers sur lesquels il va appliquer une macro( que je ferai lus tard).
Merci au passage ;)
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

"Tu appelles cette sub avec le chemin pris dans ta liste des répertoire en paramètre" -> tu veux dire "choix" ?
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

je débute dans ce langage de prog, quand tu dis d'appeler cette sub, késako ? ce ne sont pas les fonctions qu'on appele plutot ?
 

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

je débute dans ce langage de prog, quand tu dis d'appeler cette sub, késako ? ce ne sont pas les fonctions qu'on appele plutot ?
Non, on peut faire appel à une fonction ou à une macro qui fait une action spécifique... heureusement !
En l'ocurrence, quand tu as récupéré le nom de ton répertoire, dans la macro qui le récupères, tu appelles la procédure avec le chemin complet de ce répertoire
Je suppose que ta sub s'appelle ListeDeRépertoire
Code:
Sub ListeDeRépertoire()
    'ton code pour récupérer le nom du répertoire
    '...
    '...
    'tu récupères le chemin complet Ex:
    Chemin = "C:\LeRep\LeSousRep" & "\"
    'et tu appelles la procédure qui affiche, liste ou ouvre les 
    'fichiers du répertoire "Chemin" avec cette syntaxe

    ListerLesFichiersParOrdreAlpha Chemin

    'A partir de là, tu fais ce que tu veux des fichiers si tu les as ouverts
    'ou si tu les as placés dans une liste
    '...
End sub
Mais je crois comprendre ton pb. Où se trouve la liste des répertoires ? Dans une feuille de calculs ? Dans un userform ?
Si c'est dans une feuille de calculs, où as-tu pris ta liste ? Tu dois la prendre dans la barre d'outils "commandes" et non "formulaires"
A te lire ;)

Evite les késako, généralement on sait de quoi on parle... enfin, pas toujours...
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

en fait je ne suis pas sur de récuperer la liste du repertoire ...

ce bout de code :

Code:
sub essai1212()
choix = ChoixDossierFichier("d:\09OfficeVBA", 1) '<- ici le chemin de ton choix
If choix <> "" Then MsgBox choix
end sub
me permet de choisir mon repertoire d'étude, normalement "choix" représente mon repertoire non ? mais c'est une variable et non une chaine de caractères ...
ce que je souhaite en fait , c'est d'automatiser tout ça, je choisi mon repertoire via la boite de dialogue et dans le repertoire sur lequel j'ai cliqué, on m'indique (sur la feuille 1 par exemple d'une nouveau document) la liste des fichiers en .xls
 

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Salut Alucard, je viens de faire l'effort de lire ta page de code... De ton côté, balise ton code. Pour ça tu le sélectionnes et tu fais un clic sur le bouton # en édition. Tu verras, c'est magique. Pour éditer ton message et le corriger tu as le Bouton "Editer" en bas de ton message. Tel qu'il est, lire ton code est une galère.
De ma lecture il en ressort que ton code est bien compliqué pour faire ce que tu veux. Je pense que tu as fait un simple copier/coller sans comprendre.
Décris, pas à pas, ce que tu veux faire.
1 - lister les répertoires d'un répertoire donné
2 - Placer cette liste... où ?
3 - Sélectionner un répertoire dans cette liste
4 - Lister les fichiers du répertoire sélectionné
5 - Placer cette liste... où ?
@+

PS - On a tous commencé par... Msgbox "coucou" ... alors ne te décourage pas ;)
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

ok voilà qui est fait, oui j'essaie de comprendre avec des recherches sur le net

1)faire apparaitre une boite de dialogue me permettant de choisir un repertoire
2)valider ce repertoire et afficher sur la feuil1 de excel la liste des fichiers .xls présents dans ce repertoire
3)appliquer une macro sur ces fichiers (bon ça on verra après lol)

mais j'aimerai bien arriver au moins aux 2 premiers points aujourd'hui.

Merci
 
Dernière édition:

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Pour faire la première partie, voici le code
Code:
Sub ListerLesFichiersDunRepertoire()
Dim chemin As String
    chemin = ChoixDossierFichier("d:\") '<- ici le chemin de ton choix
    If chemin = "" Then Exit Sub
    ListerLesFichiersParOrdreAlpha (chemin)
End Sub

Function ChoixDossierFichier(Racine)
Dim objShell, objFolder, chemin, SecuriteSlash, FlagChoix&, Msg$
    FlagChoix = &H4000&: Msg = "Choisir un dossier :"
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(&H0&, Msg, FlagChoix, Racine)
    If objFolder Is Nothing Then Exit Function
    chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & ""
    ChoixDossierFichier = chemin
End Function

Sub ListerLesFichiersParOrdreAlpha(chemin)
Dim fs
Dim FL1 As Worksheet
Set fs = Application.FileSearch
Set FL1 = Worksheets("Feuil1") 'instance de feuil1
With fs
    .LookIn = chemin
    .FileType = msoFileTypeExcelWorkbooks
    If .Execute(SortBy:=msoSortByFileName, _
        SortOrder:=msoSortOrderAscending) > 0 Then
        'Placement du nom des fichiers dans feuil1
        For i = 1 To .FoundFiles.Count
            'On place le nom des fichiers à partir de la ligne 2 (i + 1)
            FL1.Cells(i + 1, 1) = .FoundFiles(i)
        Next i
    Else
        MsgBox "Aucun fichier n'a été trouvé."
    End If
End With
Set FL1 = Nothing
Set fs = Nothing
End Sub
Les noms des fichiers du répertoire sélectionné se retrouveront dans feuil1 de ton classeur

Pour l'ouverture des fichiers, comment souhaites-tu la faire ? Un clic sur le nom de fichier ? La sélection dans listbox qui affiche les noms de fichiers ?
@+
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Merci beaucoup pour ton aide :)

sinon pour mes fichiers, je pense que un simple click sur les fichiers présents en liste dans la feuille un devrait suffire.

Par contre j'ai une erreur dans le programme

erreur 445
cet objet ne gere pas cette action et la ligne en jaune est la suivante :

Set fs = Application.FileSearch

sinon je vois que j'ai accès quà mon D: et sous repertoire , est ce possible d'avoir accès à tout son disque dur ?
 
Dernière édition:

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

PS - Corrige cette ligne
Code:
    ListerLesFichiersParOrdreAlpha chemin
les parenthèses ne sont pas nécessaires
@+
 

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Merci beaucoup pour ton aide :)

sinon pour mes fichiers, je pense que un simple click sur les fichiers présents en liste dans la feuille un devrait suffire.
Oui, c'est suffisant. Place ton code dans la feuille de code de ta feuille Feuil1 -> Editeur VB -> Sélection de feuil1 -> Insertion du code (à tout hasard) ;)
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

par contre j'ai tjrs la même erreur :

sur cette ligne :

Set fs = Application.FileSearch
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

j'ai vraiment du mal pour écrire le code reliant la cellule au fichier, il y beaucoup de tuto sur le net ou même dans les forums, mais ça fait vraiment trop d'informations à la fois.
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Ce Application.FileSearch, il nous renvoie quelle information, de plus quelle est sa dimension ?
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

j'utilise office 2007 je pense que ça doit venir de là je vais essayer chez un pote sur office 2003.
 

MJ13

XLDnaute Barbatruc
Re : Trouver les fichiers en mode dynamique ?

Bonjour à tous.

Si tu débutes dans le VBA, le mieux serait de commencer par une petite macro simple pour lister les fichiers comme celle de CbernardT (que tu as vu puisque tu y as répondu et staple t'a répondu) dont voici une
adaptation avec le principal sur les fichiers
Code:
Sub ListeFichiers()
'CbernardT [URL]http://www.excel-downloads.com/forum/61963-recuperer-noms-de-dossier-et-de-fichier.html[/URL]
Dim Dossier As Object, Fichier As Object
Dim Chemin As String
Dim I As Long
'Chemin du dossier à analyser (à adapter au besoin)
Chemin = ThisWorkbook.Path
'Chemin = "c:\"
'Définition de la variable
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
' Boucle sur les fichiers
For Each Fichier In Dossier.Files
I = I + 1
'Cells(I, 1) = Fichier.Name ' Nom du fichier
'Cells(I, 2) = Fichier.DateCreated ' Date dernière modification
        Cells(I, 1).Formula = Fichier.Path
        Cells(I, 2).Formula = Fichier.Name
        Cells(I, 3).Formula = Fichier.Size
        Cells(I, 4).Formula = Fichier.Type
        Cells(I, 5).Formula = Fichier.DateCreated
        Cells(I, 6).Formula = Fichier.DateLastAccessed
        Cells(I, 7).Formula = Fichier.DateLastModified
Next
End Sub
Tu peux choisir ce dont tu as besoin puis lancer un traitement sur les fichiers qui t'intéresse.
 
Dernière édition:

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

bon ça marche bien pour lister les fichiers, ça venait bien de ma version d'excel.

Merci Mj13 :) pour ton aide aussi

à présent je vais essayer de voir comment relier mes cellules où apparaissent mes noms de fichiers aux vrais fichiers, comme ça je clique dessus et ça les ouvre.
 

Discussions similaires


Haut Bas