![]() |
| 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é. | |||||||
|
|||||||
| Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: février 2008
Messages: 5
|
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 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 072
|
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). |
|
|
|
|
|
#4 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 072
|
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). |
|
|
|
|
|
#6 (permalink) | ||
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 072
|
Citation:
Citation:
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). |
||
|
|
|
|
|
#7 (permalink) |
![]() |
__________________
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 |
|
|
|
|
|
#8 (permalink) |
|
Membre Expert
![]() Date d'inscription: avril 2006
Messages: 1 015
|
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 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 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 Philippe Dernière modification par philben ; 17/04/2008 à 21h03 Motif: ptite optimisation |
|
|
|
![]() |
![]() |
||
Liste dossiers par VBA
|
||
Offres d'
emploi informatique
sur Lesjeudis.com
|
| Outils de la discussion | |
|
|