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 sous dossiers dans un array


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Par défaut lister dossiers et sous dossiers dans un array
    Bonjour,

    Après avoir cherché un bon moment, je jette l'éponge et me tourne vers vous : je cherche à lister tous les sous dossiers (avec leur arborescence absolue) dans un array et voici le code que j'ai trouvé et transformé pour y arriver.

    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
     
    Sub TousLesDossiers4(LeDossier$, Idx As Long)
        Dim MyArray() As String
        Dim strMessage As String
        Dim Boucle As Integer
        Dim fso As Object, Dossier As Object
        Dim sousRep As Object, Flder As Object
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set Dossier = fso.GetFolder(LeDossier)
        'examen du dossier courant
        For Each Flder In Dossier.SubFolders
            Idx = Idx + 1
            'Cells(Idx + 1, 1).Value = Flder.Path
            ReDim Preserve MyArray(1 To Idx)
            MyArray(Idx) = Flder.Path
        Next
        'traitement récursif des sous dossiers
        For Each sousRep In Dossier.SubFolders
     ' SI ON DECOMMENTE LA LIGNE SUIVANTE CELA NE FONCTIONNE PLUS
            'TousLesDossiers4 sousRep.Path, Idx
        Next sousRep
        Set fso = Nothing
     
     strMessage = MyArray(1)
     MsgBox strMessage
     
    End Sub
     
     
    Sub test_dossiers4()
      TousLesDossiers4 "C:\Temp\", 0
    End Sub
    J'ai l'impression que cela ne fonctionne que quand on ne fait pas le traitement récursif des sous dossiers (cela serait il dû à la définition de l'array "Dim MyArray()... qui écrase l'array existant à chaque fois que l'on après la procédure ? ) mais que quand on sort le traitement récursif sur une feuille (avec la ligne Cells(Idx + 1, 1).Value = Flder.Path au lieu de l'array) tout sort. Je ne vois pas trop comment faire pour envoyer les résultats de la procédure qui tourne plusieurs fois dans un même array...

    Merci d'avance pour vos lumières !

    Max

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Dans la source ci-dessous, une code pour faire la même chose dans des cellules.
    https://excel.developpez.com/sources...scenceDossiers
    Il n'est pas très compliqué ensuite de charger le contenu de ces cellules dans une tableau de variable.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Par défaut
    Merci Menhir,

    C'est vrai je me compliquais la vie, avec Excel on a des feuilles de calcul, autant s'en servir pour stocker temporairement les données, je n'ai pas eu ce réflexe

    J'ai réussi à générer une liste utilisable dans d'autres procédures sans utiliser d'Array mais en stockant dans une feuille bien déterminée "liste_rep"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Flder In dossier.SubFolders ' on va ajouter tous les sous dossiers du dossier sélectionné à la liste = liste_rep
            Idx = Idx + 1
            Worksheets("liste_rep").Cells(Idx + 1, 1).Value = Flder.Path
    C'est donc résolu ! (il n'y avait pas de problème en fait )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lister fichiers et sous répertoire dans un menu déroulant
    Par WeDgEMasTeR dans le forum Langage
    Réponses: 8
    Dernier message: 23/05/2008, 16h48
  2. Réponses: 21
    Dernier message: 07/05/2006, 17h27
  3. lister les noms de dossier dans un menu déroulant
    Par WeDgEMasTeR dans le forum Langage
    Réponses: 9
    Dernier message: 01/04/2006, 01h53
  4. Lister le contenu d'un dossier dans une ListBox
    Par zidenne dans le forum Langage
    Réponses: 2
    Dernier message: 25/10/2005, 12h51
  5. lister des dossiers dans un ComboBox
    Par taulmaril dans le forum Windows
    Réponses: 7
    Dernier message: 01/05/2004, 14h31

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