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

VBA Discussion :

Liste dossiers par VBA


Sujet :

VBA

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Liste dossiers par VBA
    Je cherche à récuperer la liste des dossiers d'une arborescence de l'explorateur Windows.
    J'ai pas mal cherché sur l'aide VBA d'Access et Excel, mais je n'ai pas réussi.
    Merci de votre aide.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    S'agit-il de dossiers présent dans une seule branche de ton arborescence ou s'agit-il de dossiers répartis entre différentes branches ?

    S'ils sont tous dans la même branche, c'est ultra facile et peu cher...

    Tu dis ...

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Re: liste dossier par VBA
    Les dossiers recherchés sont tous dans le même dossier source.
    Merci

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Voilà donc :

    Exemple :

    Un bouton de commande Command1 et une listbox List1

    Code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Command1_Click()
      monrepprinc = "d:\monoutil\"  'mets ici TON répertoire contenant tes dossiers
      mesrepssub = Dir(monrepprinc, vbDirectory)
      Do While mesrepssub <> ""
        If mesrepssub <> "." And mesrepssub <> ".." Then
           If (GetAttr(monrepprinc & mesrepssub) And vbDirectory) = vbDirectory Then
             List1.AddItem mesrepssub
           End If
        End If
        mesrepssub = Dir
      Loop
    End Sub

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Re: liste dossier par VBA
    C'est super.
    Dernière question, pour les sous-dossiers, que dois-je rajouter?

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Bonjour,

    S'agit-il de dossiers présent dans une seule branche de ton arborescence ou s'agit-il de dossiers répartis entre différentes branches ?

    S'ils sont tous dans la même branche, c'est ultra facile et peu cher...

    Tu dis ...
    ce à quoi tu as répondu :

    Les dossiers recherchés sont tous dans le même dossier source.
    Merci
    Alors ?

    L'aspect est maintenant totalement différent et il te faut jouer avec la récursivité.
    Mais moi, je m'arrête maintenant ici dans cette discussion-ci, telle qu'elle a été "définie" par toi.

  7. #7
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    voici une version sans utiliser la référence "scripting runtime" mais seulement VBA.

    Fonction principale :
    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
     
    Public Function GetSubDirs(ByVal sRacine As String, ByRef asDirs() As String) As Integer
       Dim i As Integer
       sRacine = Trim$(sRacine)
       If Len(sRacine) > 0 Then
          ReDim asDirs(0 To 0)
          If Right$(sRacine, 1) = "\" Then sRacine = Left$(sRacine, Len(sRacine) - 1)
          asDirs(0) = "\"
          Do While i <= UBound(asDirs)
             AddSubDirs sRacine, asDirs(i), asDirs
             i = i + 1
          Loop
          If i > 1 Then
             TriTableau asDirs
             GetSubDirs = i - 1
          End If
       End If
    End Function
    Fonctions secondaires appelées par la fonction principale
    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
     
    Private Sub AddSubDirs(ByVal sRacine As String, ByVal sSubDir As String, _
                                ByRef asDirs() As String)
       On Error GoTo errtag
       Dim sCurFileDir As String
       Dim iDims As Integer
       sRacine = sRacine & sSubDir
       iDims = UBound(asDirs) + 1
       sCurFileDir = Dir(sRacine, vbDirectory)
       Do While sCurFileDir <> vbNullString
          If sCurFileDir <> "." And sCurFileDir <> ".." Then
             If (GetAttr(sRacine & sCurFileDir) And vbDirectory) = vbDirectory Then
                ReDim Preserve asDirs(0 To iDims)
                sCurFileDir = sSubDir & sCurFileDir
                asDirs(iDims) = sCurFileDir & "\"
                iDims = iDims + 1
             End If
          End If
          sCurFileDir = Dir
       Loop
       Exit Sub
    errtag:
       Resume Next
    End Sub
    Private Sub TriTableau(ByRef asTab() As String)
       Dim i As Long, j As Long, lInc As Long, n As Long, lMin As Long
       Dim lLowerBound As Long, lUpperBound As Long
       Dim sRef As String
       lLowerBound = LBound(asTab)
       lUpperBound = UBound(asTab)
       n = lUpperBound - lLowerBound + 1
       lInc = 1
       While lInc < n
          lInc = lInc * 3 + 1
       Wend
       While lInc > 1
          lInc = lInc / 3
          lMin = lInc + lLowerBound
          For i = lMin To lUpperBound
             j = i
             sRef = asTab(i)
             Do While sRef < asTab(j - lInc)
                asTab(j) = asTab(j - lInc)
                j = j - lInc
                If j < lMin Then Exit Do
             Loop
             asTab(j) = sRef
          Next i
       Wend
    End Sub
    Utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       Dim asDirs() As String
       Dim i As Integer, iNbSubDirs As Integer
       iNbSubDirs = GetSubDirs("C:\Documents and Settings\", asDirs)
       For i = 1 To UBound(asDirs) '1 pour ne pas afficher le premier élément inutile
    Debug.Print asDirs(i)
       Next i
    Debug.Print iNbSubDirs
    On obtient donc un tableau trié par ordre alphabétique des sous-répertoires qui peut servir pour alimenter un listbox par exemple.

    Philippe

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

Discussions similaires

  1. Fermer un dossier par VBA
    Par GuyDuLac dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/07/2014, 10h02
  2. [XL-2003] Création dossier par VBA
    Par Djromé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/12/2010, 23h10
  3. [XL-2003] Créer une liste déroulante par VBA
    Par lil404 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/05/2009, 17h17
  4. Réponses: 1
    Dernier message: 20/04/2007, 15h35
  5. [Source][VBA-E] Remplir une zone de liste Excel par une requête Access
    Par cafeine dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/01/2007, 13h26

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