Autres [XL 2007] VBA listage répertoire Nom fichier, Date, Taille

kif

XLDnaute Occasionnel
Bonjour La Team

Avez vous SVP un exemple de code qui permets de lister un sous répertoire (fixe) de mon workbook, me permettant de recuperer à partir de la cellule C15 la liste des fichiers présents avec leur taille et date de création ?

... de mon workbook, le sous répertoire fixe sera toujours /2-Client/

Merci d'avance de votre support

Salutations

Franck
 

kif

XLDnaute Occasionnel
Ce code liste le répertoire fixe "\2-Client" et présente en cellule C15 de mon onglet "Index Docs" les nom date et taille des fichiers présents, cependant j'ai omis dans ma demande de preciser qu'il fallait qu'il liste aussi les fichiers présents si sous répertoires présents dans "\2-Client
 

patricktoulon

XLDnaute Barbatruc
re
Bonsoir
a oui mais là avec les sous dossier c'est beaucoup plus complexe due tu ne le crois
on démarre donc non pas par un dir "*.*" mais un dir (dossier ,vbdirectory)
puis si vbdirectory reboucle ou recursif sur "*.*"
des exemple dir et FSO sont a foison sur le forum
 

patricktoulon

XLDnaute Barbatruc
Bonjour
dans la feuille ou se trouve ton bouton tu vire tout code et tu met ceci

VB:
'*********************************************************************************
'liste  fichier dans dossier et sous dossier la racine peut etre un disque complet
'fonction recursive <<DirList>>  avec Dir
'auteur patricktoulon
'date; 05/04/2013
'mise ajour pour demandes particulieres
'date;17/12/2021
'transformation array en tableau 2 dims et ajout de la date et le poids du fichier
'********************************************************************************
Private Sub CommandButton1_Click()
   With Sheets("Index Docs").Range("C15")
        .CurrentRegion.ClearContents  '<<<Attention!!!!!si autres tableau trop proche choisir autre méthodes >>>
        t = DirList(ThisWorkbook.Path & "\2-Client\")
        If UBound(t) > 0 Then .Resize(UBound(t), 3) = t
    End With
End Sub


Function DirList(Dossier As String, Optional recall As Boolean = False, Optional tbl As Variant) As Variant
    Dim ItemVu As String, directory As Variant, SubFolderCollection As Collection, I As Long, A As Long, E As Long
    Set SubFolderCollection = New Collection
    If recall = False Then ReDim tbl(0)  ' si recall  on redim un tableau  de zero item (pour la creation du tableau)
    On Error Resume Next    'gestion des fichiers dossiers system et interdit ou generant une erreur(PerLog,recycle,caractères particuliers,nom trop long ,etc..)
    ItemVu = Dir(Dossier, vbDirectory)
    If Error.Number = 0 Then    ' si pas d'erreur on examine le contenu
        Do Until ItemVu = vbNullString    'examen  du dossier courrant
            If Left(ItemVu, 1) <> "." Then
                If (GetAttr(Dossier & ItemVu) And vbDirectory) = vbDirectory Then
                    SubFolderCollection.Add ItemVu
                Else
                    A = UBound(tbl) + 1: ReDim Preserve tbl(1 To A): tbl(A) = Dossier & ItemVu
                End If
            End If
            ItemVu = Dir()
        Loop
    Else
        Err.Clear
    End If
    For Each subdossier In SubFolderCollection    'examen des sub dossier
        'A = UBound(tbl) + 1: ReDim Preserve tbl(1 To A): tbl(A) = Dossier & subdossier' si on veut lister les dossier aussi
        DirList Dossier & subdossier & "\", True, tbl
    Next subdossier
    ReDim t(1 To UBound(tbl), 1 To 3)
    For I = 1 To UBound(t)
        t(I, 1) = Dir(tbl(I))
        t(I, 2) = FileDateTime(tbl(I))
        t(I, 3) = FileLen(tbl(I)) / 1000
        t(I, 3) = t(I, 3) & IIf(t(I, 3) < 1000, " Ko", " Mo")
    Next
    DirList = t
End Function
mais depuis avec @Dudu2 nous en avons mis une au point avec FSO qui est aussi rapide et gère d'autres éventuelles erreur dues aux noms spéciaux ,dossiers spéciaux, noms trop longs ,etc....
tu a un moteur de recherche dans XLD sert toi en ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 203
Membres
103 157
dernier inscrit
youma