IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Listing fichier contenu dans un répertoire


Sujet :

Contribuez

  1. #1
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut Listing fichier contenu dans un répertoire
    Salut
    Suite a une demande d'aide sur le fofo, j'ai fait quelque recherche sur le listing de fichier contenu dans un repertoir.
    J'ai trouvé cette contribution d'AlainTech.
    Je l'ai reprise et modifié pour créer un fonction qui retourne un tableau contenant la liste des fichiers contenus dans un répertoire (+ sous répertoire si option activé). Il est également possible de choisir les extensions qui seront prises en compte)

    Voila ce que ca donne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    Option Explicit
    Sub test()
    Dim tabRetour As Variant
    tabRetour = ListFilesInFolder("c:\essai\", True)
    End Sub
    Function ListFilesInFolder(strFolderName As String, Optional bIncludeSubfolders As Boolean = False, Optional strTypeFichier As String) As Variant
      ' adapté de Ole P Erlandsen
      ' necessite d'activer la reference Microsoft Scripting RunTime
     
      ' Code modifié par Qwazerty le 14/03/2010
      ' Code initial http://www.developpez.net/forums/d200523/logiciels/microsoft-office/excel/contribuez/lister-fichiers-repertoire-feuille-excel/
      ' En reponse a la demande de ce post http://www.developpez.net/forums/d891321/logiciels/microsoft-office/excel/macros-vba-excel/boucle-fichiers-repertoire/
      ' tabTypeFichier represente une liste des differents extensions a prendre en compte lors du dressage de la liste des fichiers, celle ci seront séparé par ; ex: "xls;doc"
      ' ListFilesInFolder renvoi un tableau contenant le chemin de chaque fichiers
     
      Static FSO As FileSystemObject
      Static bNotFirstTime As Boolean
      Static tabType As Variant, vType As Variant
      Static dicoType As Object
      Static strResult As String
      Dim bTheFirst As Boolean
      Dim oSourceFolder As Scripting.Folder
      Dim oSubFolder As Scripting.Folder
      Dim oFile As Scripting.File
      'Static wksDest As Worksheet
      'Static iRow As Long
     
      'initialisation
      bTheFirst = False
     
      If Not bNotFirstTime Then
        'On identifi le tout premiere appel de la fonction recursive
        bTheFirst = True
     
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set dicoType = CreateObject("Scripting.Dictionary")
        If strTypeFichier <> "" Then
            'On cré un tableau contenant toutes les extensions / * si rien de precisé
            tabType = Split(strTypeFichier, ";")
            ' a l'aide de ce tableau on renseigne notre dictionnaire
            For Each vType In tabType
                dicoType.Add vType, "Ext"
            Next
        End If
        bNotFirstTime = True
     
        On Error Resume Next
        Set oSourceFolder = FSO.GetFolder(strFolderName)
        On Error GoTo 0
     
        'On regarde si le rep existe bien
        If oSourceFolder Is Nothing Then
          MsgBox "Le répertoir '" & strFolderName & "' n'existe pas." & vbCrLf & "L'execution va prendre fin.", vbExclamation, "Répertoir inconnu"
          GoTo finApp
        End If
     
      End If
     
      Set oSourceFolder = FSO.GetFolder(strFolderName)
     
      'On boucle sur tous les fichier present
      For Each oFile In oSourceFolder.Files
        'On verifie que l'extension du fichier correspond a ce qui est demandé
        If dicoType.Exists(ExtractFileExt(oFile.Name)) Or (strTypeFichier = "") Then
            'On le rajoute dans la chaine result
            strResult = strResult & oFile.Path & ";"
        End If
      Next oFile
     
      'Si on a l'option Sous dossier on boucle sur les sous dossiers
      If bIncludeSubfolders Then
        For Each oSubFolder In oSourceFolder.SubFolders
        'On ajoute les fichiers contenu dans ce rep dans la liste precedente
          strResult = Join(ListFilesInFolder(oSubFolder.Path, True), ";") & ";"
        Next oSubFolder
      End If
     
      'On supprime le dernier ";" s'il il exist
      If Right(strResult, 1) = ";" Then strResult = Left(strResult, Len(strResult) - 1)
     
      'On renvoi le resulta sous forme de tabelau
      ListFilesInFolder = Split(strResult, ";")
     
    finApp:
      'Si on se trouve dans le 1er appel on reinitialise les vaiables Static
      'pour ne pas conserver des valeurs static lors d'une prochaine utilisation de la fonction
      If bTheFirst Then
        Set FSO = Nothing
        Set dicoType = Nothing
        bNotFirstTime = False
        tabType = ""
        vType = ""
        strResult = ""
      End If
    End Function
     
    Function ExtractFileExt(strName As String) As String
        If InStr(strName, ".") = 0 Then
            ExtractFileExt = ""
        Else
            ExtractFileExt = Mid(strName, InStrRev(strName, ".") + 1)
        End If
    End Function
    Testé avec Excel 2003 et 2007
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  2. #2
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour
    le listing de fichier contenu dans un repertoir m'interesse beaucoup, mais quand je lance ta macro rien ne se produit, j'ai créé un dossier sous C:\ essai, j'ai mis "Microsft Scripting RunTime" et maintenant la macro s'exécute sans aucun message, je n'ai pas le message pour cibler le répertoire à lister, que n'ai-je pas su faire ?
    Merci
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  3. #3
    Membre éclairé Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Points : 879
    Points
    879
    Par défaut
    bonjour Vadorblanc,

    as-tu modifié le repertoite dans cette macro,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
    Dim tabRetour As Variant
    tabRetour = ListFilesInFolder("c:\essai\", True) '<------------ici
    End Sub
    isabelle

    Merci de m'aider à votre tour en indiquant si le problème est résolu.
    faite un clic sur le bouton en bas à gauche de la page.
    http://club.developpez.com/regles/#L4.12

  4. #4
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour sabzzz,
    Quand j'enlève le répertoire 'essai' j'ai bien le message 'le répertoire n'existe pas' donc j'en conclue que j'ai bien mis le répertoire et que la macro fonctionne, mais rien ne se produit, faut-il dans VBA, Outils paramétrer autre chose ?

    Ma seule solution pour lister un répertoire aujourd'hui c'est de Démarrer / Excécuter / cmd et entrée
    Ecrire : C:>tree/C:/>liste.xls et entrée
    Ensuite récupérer le fichier crée sous C: et prendre le fichier Liste.xls
    Mais le fichier n'a pas les caractères accentuées et encore des manips à faire pour avoir un fichier propre, d'ou l'interêt de cette macro.

    Pour le moment je ne vois pas ce qu'il manque.
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  5. #5
    Membre éclairé Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Points : 879
    Points
    879
    Par défaut
    bonjour Vadorblanc,

    tu travaille sur quel version ?
    isabelle

    Merci de m'aider à votre tour en indiquant si le problème est résolu.
    faite un clic sur le bouton en bas à gauche de la page.
    http://club.developpez.com/regles/#L4.12

  6. #6
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    J'ai la version Excel 2003
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  7. #7
    Membre éclairé Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Points : 879
    Points
    879
    Par défaut
    bonjour Vadorblanc,

    je travaille avec xl2002, je ne peut essayer la macro de Qwazerty, dommage,
    mais j'ai celle-ci qui fonctionne bien sous xl2002.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
    LeDossier = "c:\zz\" '<-----------------------à adapter
    TousLesFichiers LeDossier, 0
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub TousLesFichiers(LeDossier, Idx As Long)
    Dim FSO As Object, Dossier As Object
    Dim sousRep As Object, Fich As Object
    f = Array("BMP", "GIF", "JPG", "JPEG", "PCX", "PNG", "TIFF", "XPM")'<---à adapter
      Set FSO = CreateObject("Scripting.FileSystemObject")
      Set Dossier = FSO.GetFolder(LeDossier)
      For Each Fich In Dossier.Files
      x = Right(Fich.Name, Len(Fich.Name) - Application.Find(".", Fich.Name))
      If Not IsError(Application.Match(x, f, 0)) Then
          Idx = Idx + 1
          Cells(Idx + 1, 1).Value = Fich.ParentFolder
          Cells(Idx + 1, 2).Value = Fich.Name
          End If
      Next
      For Each sousRep In Dossier.SubFolders
        TousLesFichiers sousRep.Path, Idx
      Next sousRep
    End Sub
    isabelle

    Merci de m'aider à votre tour en indiquant si le problème est résolu.
    faite un clic sur le bouton en bas à gauche de la page.
    http://club.developpez.com/regles/#L4.12

  8. #8
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour sabzzz
    Joli .... ça marche
    Un grand Merci
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Je profite de cette mise à jour pour remercier à Sabzzz d'avoir assuré le suivi

    J'ai fait quelques corrections et modifications du code suite à une autre question du fofo, qui au final n'avait rien a voir ^^'.

    Le code est certainement perfectible étant donné que j'avais déjà 2-3 boulettes dedans :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
     
    Option Explicit
     
    Public Enum InclueSubF
        ISF_No = 0
        ISF_Yes = 1
        ISF_AutoOne = 2
        ISF_AutoAll = 3
    End Enum
     
    Sub test()
    Dim tabRetour As Variant
    tabRetour = ListFilesInFolder("c:\essai\", True)
    End Sub
     
    Function ListFilesInFolder(strFolderName As String, Optional IncludeSubfolders As InclueSubF = ISF_No, Optional strTypeFichier As String) As Variant
      ' adapté de Ole P Erlandsen
      ' necessite d'activer la reference Microsoft Scripting RunTime
     
      ' Code modifié par Qwazerty le 14/03/2010
      ' Code initial http://www.developpez.net/forums/d200523/logiciels/microsoft-office/excel/contribuez/lister-fichiers-repertoire-feuille-excel/
      ' En reponse a la demande de ce post http://www.developpez.net/forums/d891321/logiciels/microsoft-office/excel/macros-vba-excel/boucle-fichiers-repertoire/
      ' tabTypeFichier represente une liste des differents extensions a prendre en compte lors du dressage de la liste des fichiers, celle ci seront séparé par ; ex: "xls;doc"
      ' ListFilesInFolder renvoi un tableau contenant le chemin de chaque fichiers
      ' Code modifié par Qwazerty le 04/12/2011
      ' Suite à une réponse sur le forum http://www.developpez.net/forums/d1160038/logiciels/microsoft-office/excel/macros-vba-excel/probleme-renvoi-fonction/#post6379727
      ' hallscar faisait une recherche dans tous les répertoirs si pas de résultat dans le repertoire d'origine
      ' J'ai trouvé la démarche interessante, voila ce que ça donne
      ' ISF_Yes, ISF_No : recherche standard systémique ou uniquement dans le répertoir d'origine
      ' ISF_AutoOne : Recherche systémique jusqu'au 1er résultat trouvé
      ' ISF_AutoAll : Recherche uniquement dans le répertoir d'origine, puis passe en recherche systémique si aucun résultat
      ' Corrections : Lors de la recherche dans les sous répertoire, passage de strTypeFichier
      '               Au même endroit suppression du & ";" systématique qui faussé les résultats...
      '             : Gestion d'erreur sur l'impossibilité de lire un répertoire
      Static FSO As FileSystemObject
      Static bNotFirstTime As Boolean
      Static tabType As Variant, vType As Variant
      Static dicoType As Object
      Static strResult As String
      Dim bTheFirst As Boolean
      Dim oSourceFolder As Scripting.Folder
      Dim oSubFolder As Scripting.Folder
      Dim oFile As Scripting.File
      Dim NeedSubFolder As InclueSubF
     
      'initialisation
      bTheFirst = False
     
      If Not bNotFirstTime Then
        'On identifi le tout premiere appel de la fonction recursive
        bTheFirst = True
     
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set dicoType = CreateObject("Scripting.Dictionary")
        If strTypeFichier <> "" Then
            'On cré un tableau contenant toutes les extensions / * si rien de precisé
            tabType = Split(strTypeFichier, ";")
            ' a l'aide de ce tableau on renseigne notre dictionnaire
            For Each vType In tabType
                dicoType.Add vType, "Ext"
            Next
        End If
        bNotFirstTime = True
     
        On Error Resume Next
        Set oSourceFolder = FSO.GetFolder(strFolderName)
        On Error GoTo 0
     
        'On regarde si le rep existe bien
        If oSourceFolder Is Nothing Then
          MsgBox "Le répertoir '" & strFolderName & "' n'existe pas." & vbCrLf & "L'execution va prendre fin.", vbExclamation, "Répertoir inconnu"
          GoTo finApp
        End If
     
      End If
     
      Set oSourceFolder = FSO.GetFolder(strFolderName)
     
      'On assure un suivi d'erreur car les repertoires systemes sont souvent inaccessible
      On Error GoTo GestionErr
      'On boucle sur tous les fichier present
      For Each oFile In oSourceFolder.Files
        'On verifie que l'extension du fichier correspond a ce qui est demandé
        If dicoType.Exists(ExtractFileExt(oFile.Name)) Or (strTypeFichier = "") Then
            'On le rajoute dans la chaine result
            strResult = strResult & oFile.Path & ";"
        End If
      Next oFile
    NextRep:
      On Error GoTo 0
     
      If strResult = "" Then
        'Si pas de résultat trouvé
        Select Case IncludeSubfolders
            Case ISF_AutoOne, ISF_No
                'On conserve les choix d'origine
                NeedSubFolder = IncludeSubfolders
            Case Else
                'On passe en recherche systémique
                NeedSubFolder = ISF_Yes
        End Select
      Else
        'Si au poins un résultat
        Select Case IncludeSubfolders
            Case ISF_Yes
                'On conserve le choix d'origine
                NeedSubFolder = IncludeSubfolders
            Case Else
                'On termine la recherche
                NeedSubFolder = ISF_No
        End Select
      End If
     
      'Si on a l'option Sous dossier on boucle sur les sous dossiers
      If NeedSubFolder = ISF_Yes Then
        For Each oSubFolder In oSourceFolder.SubFolders
        'On ajoute les fichiers contenu dans ce rep dans la liste precedente
          strResult = Join(ListFilesInFolder(oSubFolder.Path, NeedSubFolder, strTypeFichier), ";")
          If strResult <> "" Then strResult = strResult & ";"
        Next oSubFolder
      End If
     
    finApp:
     
      'On supprime le dernier ";" s'il il exist
      If Right(strResult, 1) = ";" Then strResult = Left(strResult, Len(strResult) - 1)
     
      'On renvoi le resulta sous forme de tabelau
      ListFilesInFolder = Split(strResult, ";")
     
      'Si on se trouve dans le 1er appel on reinitialise les vaiables Static
      'pour ne pas conserver des valeurs static lors d'une prochaine utilisation de la fonction
      If bTheFirst Then
        Set FSO = Nothing
        Set dicoType = Nothing
        bNotFirstTime = False
        tabType = ""
        vType = ""
        strResult = ""
      End If
     
    GestionErr:
      If Err.Number <> 0 Then
        Select Case Err.Number
            Case 70  'Impossible de lire le répertoire
                'On reset l'erreur
                Err.Clear
                GoTo finApp
            Case Else
                'On affiche l'erreur et on quitte la procédure
                MsgBox Err.Description
                'On reset l'erreur
                Err.Clear
                Resume Next
        End Select
      End If
    End Function
     
    Function ExtractFileExt(strName As String) As String
        If InStr(strName, ".") = 0 Then
            ExtractFileExt = ""
        Else
            ExtractFileExt = Mid(strName, InStrRev(strName, ".") + 1)
        End If
    End Function
    La prochaine modif sera la prise en compte de nom de fichier à la place des seules extensions "*.xls;Essai.doc;*.ppt"... à suivre donc
    Enjoy
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour Qwazerty, le forum

    Suite à cette recherche et avec un code de liens hypertextes, Mercatog m'avait finalisé un code sublime qui liste tous les fichiers d'un répertoire et des sous répertoires que j'utilise encore. Je profite de cette occasion pour le remercier encore.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub ListeFichiers(Repertoire As String)
    'Nécessite d'activer la référence "Microsoft Scripting RunTime"
            'Dans l'éditeur de macros (Alt+F11):
            'Menu Outils
            'Références
            'Cochez la ligne "Microsoft Scripting RunTime".
            Dim Fso As Scripting.FileSystemObject
    Dim SourceFolder As Scripting.Folder, SubFolder As Scripting.Folder
    Dim FileItem As Scripting.File
    Dim i As Long
     
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = Fso.GetFolder(Repertoire)
    'Récupère le numéro de la dernière ligne vide dans la colonne A.
    i = Range("A65536").End(xlUp).Row + 1
    'Boucle sur tous les fichiers du répertoire
    For Each FileItem In SourceFolder.Files
        'Inscrit le nom du fichier dans la cellule
        Cells(i, 1) = FileItem.Name
        'Ajoute un lien hypertexte vers le fichier
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), Address:=FileItem.ParentFolder & "\" & FileItem.Name
        'Indique la date de création
        Cells(i, 2) = FileItem.DateCreated
        'Indique la date de dernier acces
        Cells(i, 3) = FileItem.DateLastAccessed
        'Indique la date de dernière modification
        Cells(i, 4) = FileItem.DateLastModified
        'Nom du répertoire
        Cells(i, 5) = FileItem.ParentFolder
        i = i + 1
    Next FileItem
    Columns("A:D").AutoFit
    '--- Appel récursif pour lister les fichier dans les sous-répertoires ---.
    For Each SubFolder In SourceFolder.subfolders
        ListeFichiers SubFolder.Path
    Next SubFolder
    Set Fso = Nothing
    Set SourceFolder = Nothing
    End Sub
    Cordialement
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  11. #11
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Le code est intéressant en effet mais le but est légèrement différent, mon code ne stock pas les données dans un feuille du classeur, tu peux donc utiliser son résultat dans la suite de ta macro puis détruire le tableau sans avoir inscrit les résultats nulle part .
    Tout dépend donc ce que tu souhaites faire exactement.
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #12
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour Qwazerty
    Je viens de faire un test:

    tu peux donc utiliser son résultat dans la suite de ta macro puis détruire le tableau sans avoir inscrit les résultats nulle part
    Je lance ma macro, ma feuille affiche tous les fichiers du répertoire, je lance ensuite ton code, mais rien ne se passe, j'ai bien mis le répertoire sous Je ne vois pas ce que fait ton code... ou bien je fais une erreur ?

    Que veux-tu dire par
    détruire le tableau sans avoir inscrit les résultats nulle part
    Merci
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  13. #13
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Voila un petit exemple d'application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub teste()
    Dim tabRetour As Variant
    Dim TheFile As Variant
    'On recherche tous les fichiers ayant pour extension xls
    tabRetour = ListFilesInFolder("c:\essai\", ISF_Yes, "xls")
     
    'On verifie que tabRetour contient quelquechose
    If UBound(tabRetour) > 0 Then
        'A partir de maintenant le résultat de la recherche se trouve dans tabRetour
        'Tu peux par exemple afficher ce qu'il contient dans une feuille
        ThisWorkbook.Sheets("Feuil1").Range("A1").Resize(UBound(tabRetour) + 1, 1).Value = tabRetour
     
    'Mais ça n'est pas utile pour poouvoir utiliser son contenu
        'Tu peux également parcourir ce que contient le tableau pour, par exemple, ouvrir les fichiers trouvés
        For Each TheFile In tabRetour
            'On ouvre le fichier
            Workbooks.Open TheFile
        Next
    End If
     
    End Sub
    Le teste placé en entête de code supposé de placer un espion pour voir le contenu de tabRetour

    Quand je parle de détruire le tableau sans avoir inscrit les résultats nulle part, je veux dire que le contenu de tabRetour n'a besoin d'être inscrit nulle part pour être utilisé, comme tu peux le voir dans l'exemple de code présent, j'utilise son contenu pour ouvrir les fichiers excel présents dans les répertoires c:\essai\. Une fois le code exécuté, tabRetour est détruit lorsque la procédure prend fin.
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Salut

    J'essaie, mais...
    Erreur de code > Variable non définie = ISF_Yes
    J'ai ajouté aussi > "Option Explicit" en début de ton code

    Désolé.
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  15. #15
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Tu as bien placé le code que je fournis dans le message #9 dans un module?
    Ou au pire au même endroit que le code de teste?

    [Edit]
    Je te rajoute un fichier exemple
    [/Edit]

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  16. #16
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Salut
    Ton code fonctionne bien avec Excel 2007 ou 2010, mais j'avais pris ton code 13#.
    Ouvre tous les fichiers du répertoire les uns après les autres, c'est bien, je n'avais jamais vu cette prouesse, mais je ne vois pas la plus value...il faut sans cesse cliquer sur "ne pas afficher les liaisons" pour ceux qui en ont, puis il faut bien refermer tous ses fichiers, et ça peut en faire énormément, non, mis à part l'ouverture en cascade des fichiers du répertoire, je ne vois pas...
    Désolé, je ne suis pas un pro du forum...
    Bonne continuation.
    Cordialement.
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  17. #17
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Ca n'est qu'un exemple, mais imagine, comme c'est souvent le cas dans des questions posé sur le forum, que tu veilles obtenir le contenu d'une feuille en particulier de tous les classeur Excel contenu dans un répertoire. Il te faut bien dresser la liste des fichiers.
    Pour ce qui est de l'ouverture, on peut améliorer la chose en plaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.DisplayAlerts = false/true
    de part et d'autre de la ligne qui provoque l'ouverture, sans oublier de passer en paramètre à workbooks.open les réponse par défaut qui devront être donné aux massage qui ne s'afficheront pas (par exemple la lecture seule, l'activation des liens..., voir l'aide sur Open).
    De plus il existe également des méthode pour récupérer les données contenu dans un fichier excel sans pour autant avoir besoin de l'ouvrir.
    Mais dans tous les cas, la première étapes sera de lister les fichiers.

    Quel était le but de la liste de fichier dans le code que tu as placé en cours de discussion (#10)? était-ce juste de faire créer la liste dans une des feuille? ou après avoir dressé la liste, tu utiliser cette liste pour faire une action particulière sur tes fichiers ainsi listés?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  18. #18
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour Qwaz
    Le but initial était de lister tous les fichiers d'un répertoire et de ses sous répertoires pour faciliter la recherche des fichiers. A savoir quand tu ne sais plus ou se situe un fichier, il est fort pénible de devoir ouvrir toute l'arborescence du répertoire. Ainsi, la totalité de tous les fichiers mis sur une feuille Excel rend la recherche beaucoup plus facile surtout si en plus il existe le lien hypertexte qui l'ouvre instantanément. C'est utile surtout dans des arborescences avec un grand nombre de sous, sous, sous répertoires. Mais je reconnais qu'avec Windows seven, maintenant la recherche d'un fichier est spectaculaire de rapidité, mais bon, au boulot on a encore Windows XP d'ou l'utilité de ce listing.
    Bien cordialement.
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  19. #19
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Je ne remet absolument pas en doute l'utilité du code que tu as mis, les 2 codes n'ont simplement pas du tout la même utilisation.

    Pour ce qui est de la rapidité de recherche d'un fichier avec Seven (et Vista) c'est dut à l'indexation des fichiers, c'est le truc qui fait tourner ton pc a fond alors que tu ne fait rien et que tu te demande ... pourquoi il bosses mon PC? sur quoi il bûche?? Ben il index

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  20. #20
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Petite mise à jour, afin de répondre a un besoin exprimé sur le forum, j'ai revu le code pour pouvoir lister uniquement les répertoires si besoin.

    J'ai également corrigé les procédures de teste, le rendu sur la feuille était complètement faux...

    ++
    Qwaz
    Fichiers attachés Fichiers attachés

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Lister nombre de fichier contenu dans un répertoire
    Par bsuge dans le forum VBScript
    Réponses: 3
    Dernier message: 12/04/2012, 19h27
  2. Fichiers contenu dans un répertoire
    Par DonKnacki dans le forum Développement Sharepoint
    Réponses: 0
    Dernier message: 12/04/2010, 14h43
  3. Réponses: 4
    Dernier message: 12/10/2009, 17h55
  4. Réponses: 1
    Dernier message: 01/09/2008, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo