Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Général VBA

Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.

Réponse
 
Outils de la discussion
Vieux 15/04/2008, 17h23   #1 (permalink)
Invité de passage
 
Date d'inscription: février 2008
Messages: 5
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.
orambaud est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 15/04/2008, 18h35   #2 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 072
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 ...
__________________
Deux points essentiels à mes yeux :
1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère).
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/04/2008, 14h23   #3 (permalink)
Invité de passage
 
Date d'inscription: février 2008
Messages: 5
Par défaut Re: liste dossier par VBA

Les dossiers recherchés sont tous dans le même dossier source.
Merci
orambaud est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/04/2008, 14h32   #4 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 072
Par défaut

Voilà donc :

Exemple :

Un bouton de commande Command1 et une listbox List1

Code

Code :
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
__________________
Deux points essentiels à mes yeux :
1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère).
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/04/2008, 16h43   #5 (permalink)
Invité de passage
 
Date d'inscription: février 2008
Messages: 5
Par défaut Re: liste dossier par VBA

C'est super.
Dernière question, pour les sous-dossiers, que dois-je rajouter?
orambaud est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/04/2008, 19h16   #6 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 072
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 :

Citation:
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.
__________________
Deux points essentiels à mes yeux :
1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère).
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 17/04/2008, 12h55   #7 (permalink)
Responsable MSOffice
 
Avatar de Lou Pitchoun
 
Date d'inscription: février 2005
Localisation: Au soleil, Made In Marseille
Âge: 30
Messages: 5 133
Envoyer un message via MSN à Lou Pitchoun
Par défaut

Salut,

Ceci devrait t'aider.
http://vb.developpez.com/faq/?page=Fichiers#rep_sousrep
__________________
Responsable Office
Futurs Modérateurs, Rédacteurs : We need you

Access : Les Cours, Les Sources et Les FAQs Office
Avant de poster : les choses importantes à lire pour la bonne tenue du forum.
sinon

Ma boite à MPs n'est pas l'annexe du forum Le complément BouleDeCristal n'existe pas encore !!!
Lou Pitchoun est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 17/04/2008, 20h47   #8 (permalink)
Membre Expert
 
Date d'inscription: avril 2006
Messages: 1 015
Par défaut

bonjour,

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

Fonction principale :
Code :
 
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 :
 
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 :
 
   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

Dernière modification par philben ; 17/04/2008 à 21h03 Motif: ptite optimisation
philben est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Général VBA

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide