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

Macros et VBA Excel Discussion :

Lister Dossiers et Fichiers d'un répertoire


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Lister Dossiers et Fichiers d'un répertoire
    Bonjour,

    Etant novice dans le domaine je me permet de me joindre à vous pour un service.
    Actuellement via une macro, je peut lister tous les fichiers et sous-répertoires présent dans le répertoire ou se trouve le fichier excel.
    Cependant, je souhaiterai Via une MsgBox pouvoir choisir le répertoire.

    En vous remerciant d'avance.

    Cordialement

    --------------------------------------------------------------------------------------------------
    Ci-dessous la macrro:
    --------------------------------------------------------------------------------------------------
    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
    Sub Arborescence() 
     Application.ScreenUpdating = False 
     Racine = CurDir 
     If Racine = "" Then Exit Sub 
     Range("A:E").Clear 
     Range("A3").Select 
     Set fs = CreateObject("Scripting.FileSystemObject") 
     Set dossier_racine = fs.getfolder(Racine) 
     Lit_dossier dossier_racine, 1 
     Range("A1").Select 
    End Sub 
    Sub Lit_dossier(ByRef dossier, ByVal niveau) 
     With ActiveCell.Font 
     .Size = 11 
     .Underline = True 
     .Bold = True 
     ActiveCell.Value = decal(niveau - 1) & "--------> " & dossier.Name & " <-------- " 
    ActiveCell.Interior.ColorIndex = 33 
     ActiveCell.Offset(1, 0).Select 
     For Each d In dossier.SubFolders 
     Lit_dossier d, niveau + 1 
     Next 
     For Each f In dossier.Files 
     nom_fich = f.Name 
     ActiveSheet.Hyperlinks.Add Anchor:=Selection, _ 
     Address:=dossier.Path & "\" & nom_fich, TextToDisplay:="" & nom_fich 
     ActiveCell.Offset(0, 1) = f.Size 
     ActiveCell.Offset(0, 2) = f.DateLastModified 
     ActiveCell.Offset(0, 3) = f.Attributes 
     If f.Attributes And vbHidden Then ActiveCell.Offset(0, 4) = "Caché" 
     ActiveCell.Interior.ColorIndex = 2 
     ActiveCell.Offset(1, 0).Select 
     Next 
    End With 
    End Sub 
    Function decal(niv) 
     decal = String(3 * niv, " ") 
    End Function 
    Function ChoixDossier() 
     If Val(Application.Version) >= 10 Then 
     With Application.FileDialog(msoFileDialogFolderPicker) 
     .InitialFileName = ActiveWorkbook.Path & "\" 
     .Show 
     If .SelectedItems.Count > 0 Then 
     ChoixDossier = .SelectedItems(1) 
     Else 
     ChoixDossier = "" 
     End If 
     End With 
     Else 
     ChoixDossier = InputBox("Répertoire?") 
     End If 
    End Function

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    ci-dessous, un exemple dans lequel tu pourras puiser des infos
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Bonjour, un de plus pour la route, via les API
    Fichiers attachés Fichiers attachés

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    A ce stade, la fenêtre pour choisir le répertoire s'ouvre bien . Mais la macros persiste à relever les dossiers à l'endroit de l'enregistrement du fichier Excel et non au répertoire choisit .
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    je n'ai pas regardé ton fichier, quel exemple as-tu pris ? si c'est le mien, il ne devrait pas y avoir de problème, la seule chose c'est que les sous-répertoires sont pris en compte, modifies le code en fonction, je dis bien "si tu as pris mon exemple"
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Oui, j'ai bien utilisé ton exemple. Mais rien à faire, je n'arrive pas à récupérer autres choses que les dossiers à la source du fichier excel.

  7. #7
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Pourtant, à partir de mon fichier, si j'enlève cette partie de code, dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       If fld.SubFolders.Count > 0 Then
          For Each tFld In fld.SubFolders
             DoEvents
             FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs, nFiles)
          Next
       End If
    tu ne retrouves que les fichiers avec l'extension ou les extensions désirées dans le répertoire spécifié dans la MsgBox, j'ai, bien sur, controlé avant
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Oui en effet à partir de ton fichier, cela fonctionne bien. Mais j'essaye de l'adapter à mon fichier qui me permet d'avoir plus de renseignements sur les fichiers (Date modification, taille et Hyperlien). Et qui permet également de pas se limiter à une extension.

    Encore merci de votre aide et votre patience pour un novice comme moi .

    Cordialement

  9. #9
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    autre exemple, qui peut créer les liens hypertext, l'extension est choisie dans le TextBox => "OK" =>le répertoire dans la boite de dialogue.
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Encore merci de ta réponse.
    Si je prend ton fichier, a quel endroit je doit rajouter cette partie de code (Ci-dessous), pour pouvoir conserver la mise en forme, l'affichage de la taille ainsi que la date de modification ?

    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
    Sub Lit_dossier(ByRef dossier, ByVal niveau)
       With ActiveCell.Font
            .Size = 11
            .Underline = True
            .Bold = True
       ActiveCell.Value = decal(niveau - 1) & "--------> " & dossier.Name & " <-------- "
       ActiveCell.Interior.ColorIndex = 33
       ActiveCell.Offset(1, 0).Select
       For Each d In dossier.SubFolders
         Lit_dossier d, niveau + 1
       Next
       For Each f In dossier.Files
         nom_fich = f.Name
         ActiveSheet.Hyperlinks.Add Anchor:=Selection, _
         Address:=dossier.Path & "\" & nom_fich, TextToDisplay:="" & nom_fich
         ActiveCell.Offset(0, 1) = f.Size
         ActiveCell.Offset(0, 2) = f.DateLastModified
         ActiveCell.Offset(0, 3) = f.Attributes
         If f.Attributes And vbHidden Then ActiveCell.Offset(0, 4) = "Caché"
         ActiveCell.Interior.ColorIndex = 2
         ActiveCell.Offset(1, 0).Select
       Next
    End With
    End Sub
    Function decal(niv)
       decal = String(3 * niv, " ")
    End Function

  11. #11
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Je ne t'oublie pas mais je suis très occupé (métier oblige), patientes, je regarderai de plus près
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  12. #12
    Membre confirmé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Points : 520
    Points
    520
    Par défaut
    bonsoir slopFC, casefayere et le forum

    si tu rajouter un dans le code ou tu veux que cela apparaisse, je ne sais si cela va fonctionner mais!!!!

    Pascal

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Ca avance petit à petit... A présent , j'arrive bien à récupérer les fichiers d'un répertoire choisit. Cependant à l'ouverture de la fenêtre, si je choisit bien un répertoire, tout se passe sans erreur. Si j'annule sans choisir de répertoire une erreur apparait: " Erreur d'exécution 5 , Argument ou appel de procédure incorrect"

    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
     
    Sub Arborescence()
     Application.ScreenUpdating = False
    Dim fd As FileDialog
      Dim Racine As String
           Racine = ThisWorkbook.Path
        With Application.FileDialog(msoFileDialogFolderPicker)
            .InitialFileName = Racine & "\"
            .Title = "Sélectionner le Dossier Racine"
            .AllowMultiSelect = False
            .InitialView = msoFileDialogViewDetails
            .ButtonName = "Sélection Dossier"
            .Show
              MsgBox "Vous avez sélectionné le répertoire : " & .SelectedItems(1), vbInformation
            If .SelectedItems.Count > 0 Then
            Chemin = .SelectedItems(1)
            End If
     
            End With
     
     If Racine = "" Then Exit Sub
     Range("A:E").Clear
     Range("A3").Select
     Set fs = CreateObject("Scripting.FileSystemObject")
    Set dossier_racine = fs.getfolder(Chemin)
    Lit_dossier dossier_racine, 1
      Range("A1").Select
     
    End Sub
    Sub Lit_dossier(ByRef dossier, ByVal niveau)
       With ActiveCell.Font
            .Size = 11
            .Underline = True
            .Bold = True
       ActiveCell.Value = decal(niveau - 1) & "--------> " & dossier.Name & " <-------- "
       ActiveCell.Interior.ColorIndex = 33
       ActiveCell.Offset(1, 0).Select
       For Each d In dossier.SubFolders
         Lit_dossier d, niveau + 1
       Next
       For Each f In dossier.Files
         nom_fich = f.Name
         ActiveSheet.Hyperlinks.Add Anchor:=Selection, _
         Address:=dossier.Path & "\" & nom_fich, TextToDisplay:="" & nom_fich
         ActiveCell.Offset(0, 1) = f.Size
         ActiveCell.Offset(0, 2) = f.DateLastModified
         ActiveCell.Offset(0, 3) = f.Attributes
         If f.Attributes And vbHidden Then ActiveCell.Offset(0, 4) = "Caché"
         ActiveCell.Interior.ColorIndex = 2
         ActiveCell.Offset(1, 0).Select
       Next
    End With
    End Sub
    Function decal(niv)
       decal = String(3 * niv, " ")
    End Function

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par casefayere Voir le message
    Je ne t'oublie pas mais je suis très occupé (métier oblige), patientes, je regarderai de plus près
    Pas de problème, je comprend
    Merci à toi et à ceux qui prennent du temps pour me répondre.

  15. #15
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour grisan29, SlopFC, le forum,

    A SlopFC :
    j'ai refait ce fichier (en reprenant certains de tes bouts de code) à ma façon sans savoir si ça peut correspondre à tes besoins, il faudra certainement une adaptation.

    Bonne journée

    PS : il sera certainement utile d'épurer toutes les variables qui semblent inutiles, exemple bidon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub toto()
    Dim x As Long, y As Long
    For x = 1 To 50
      Range("A" & x) = "toto" & x
    Next x
    For y = 3 To 200
      Range("B" & y) = "titi" & y
    Next y
    End Sub
    en nettoyant y, ça devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub toto()
    Dim x As Long
    For x = 1 To 50
      Range("A" & x) = "toto" & x
    Next x
    For x = 3 To 200
      Range("B" & x) = "titi" & x
    Next x
    End Sub
    Fichiers attachés Fichiers attachés
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Merci à vous, j'ai enfin eu ce dont je voulais. Une dernière petit chose.... actuellement mes fichiers sont triés par ordre croissant dans le tableau excel. Est'il possible de les classer par date de modification ? ???

    Ci-joint le fichier .

    Cordialement
    Fichiers attachés Fichiers attachés

  17. #17
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    et simplement en ajoutant un tri, ça n'irait pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ActiveSheet
      Set x = .Range("a" & .Rows.Count).End(xlUp)
      .Range("A4", x(1, 5)).Sort key1:=.Range("C4"), order1:=xlAscending, Header:=xlNo
    End With
    à toi de bien le placer
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

Discussions similaires

  1. Lister récursivement les fichiers d'un répertoire
    Par petdelascar dans le forum Shell et commandes GNU
    Réponses: 22
    Dernier message: 31/07/2020, 13h50
  2. [XL-2010] Lister dossiers sousdossiers fichiers / liens hypertextes sous forme de tableau
    Par GADENSEB dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/11/2014, 12h17
  3. Réponses: 2
    Dernier message: 24/07/2009, 13h34
  4. Script Shell : lister tous les fichiers d'un répertoire et sous rép
    Par raton_laveur dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 22/01/2009, 16h43
  5. Lister les dossiers et fichiers d'un répertoire
    Par scorpia dans le forum ASP
    Réponses: 2
    Dernier message: 11/04/2006, 18h50

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