Microsoft 365 VBA dir()

tbft

XLDnaute Accro
Bonjour à tous

Je me replonge dans la programmation VBA.
Je butte sur l'utilisation de la fonction DIR.
Je vous joint mon embryon de fichier.
Je ne sais pas ce qui ne fonctionne pas.
Mais, je peux vous dire que la fonction "tp = Dir(Nom_chemin)" du module "Principale" en ligne 30 me renvoi "" (rien vide nada)
Pouvez-vous me dire quelle(s) connerie(s) j'ai fait, s'il vous plait ?
D'avance merci pour votre aide.
Cordialement.
 

Pièces jointes

  • Listing.xlsm
    18.3 KB · Affichages: 9
Solution
Il y a plusieurs manière de faire.
VB:
'------------------------
'Fichiers d'un répertoire
'------------------------
Private Function ListeFichiers(Répertoire As String, Optional Extension As String = "*") As String()
    Dim Fichier As String
    Dim TabFichiers() As String
    Dim NbFichiers As Long
    
    '---liste les fichiers du répertoire ---
    Fichier = Dir(Répertoire & "\*." & Extension)
    
    'Boucle sur les fichiers
    Do While Len(Fichier) > 0
        NbFichiers = NbFichiers + 1
        ReDim Preserve TabFichiers(1 To NbFichiers)
        TabFichiers(NbFichiers) = Fichier
        Fichier = Dir
    Loop
    
    'Return value
    ListeFichiers = TabFichiers
End Function

Dudu2

XLDnaute Barbatruc
Pour info retrouvé mon fichier qui avait servi pour les tests à propos du sujet de discussion mentionné précédemment.
Il y a 1 module par méthode (DIR, FSO, DOS). Ça comprend l'exploration des sous-répertoires et la gestion des erreurs.
 

Pièces jointes

  • ListesFichiersRépertoire - Test comparatif.xlsm
    199.2 KB · Affichages: 5

patricktoulon

XLDnaute Barbatruc
re
Bonjour à tous
pour répondre à @Dudu2
j'ai voulu dire qu'avec vbdirectory en fonction récursive on achoppe tout les éléments dossier et fichier
on ressort les vieux trucs
à chaque tour recursif c'est un dir(dossier,vbdirectory) qui est fait et non un dire fichier
démonstration
j'attire ton attention sur "critère" qui est sur vbdirectory (mais il peut etre autre ou plusieurs en addition logique
VB:
Sub avec_Vbdirectory()
    Cells.Clear
    Dim liste As Variant
    liste = DirList(ThisWorkbook.Path & "\MON DOSSIER\")
    Cells(1, 1).Resize(UBound(liste), 1).Value = Application.Transpose(liste)
End Sub

Function DirList(Dossier As String, Optional recall As Boolean = False, Optional tbl As Variant) As Variant
    Dim ItemVu As String, directory As Variant, SubFolderCollection As Collection, I As Long, A As Long, E As Long
    Set SubFolderCollection = New Collection
    If Right(Dossier, 1) <> "\" Then Dossier = Dossier & "\"
    If recall = False Then ReDim tbl(0)    ' si recall  on redim un tableau  de zero item (pour la creation du tableau)
    critère = vbDirectory Or vbHidden Or vbNormal Or vbArchive Or vbReadOnly Or vbSystem Or vbVolume
    critère = vbDirectory
    On Error Resume Next    'gestion des fichiers dossiers system et interdit ou generant une erreur(PerLog,recycle,etc..)
    ItemVu = Dir(Dossier, critère)
    If Error.Number = 0 Then    ' si pas d'erreur on examine le contenu
        'examen  du dossier courrant
        Do Until ItemVu = vbNullString
            If Left(ItemVu, 1) <> "." Then
                Debug.Print "|" & Dossier & ItemVu & "|"
                               If (GetAttr(Dossier & ItemVu) And vbDirectory) = vbDirectory Then
                    SubFolderCollection.Add ItemVu
                    Else
                    A = UBound(tbl) + 1: ReDim Preserve tbl(1 To A): tbl(A) = Dossier & ItemVu
                End If

            End If
            ItemVu = Dir()
        Loop
    Else
        Err.Clear
    End If
    'examen des sub dossier
    For Each subdossier In SubFolderCollection
        A = UBound(tbl) + 1: ReDim Preserve tbl(1 To A): tbl(A) = Dossier & subdossier
        DirList Dossier & subdossier & "\", True, tbl
    Next subdossier
    DirList = tbl
End Function
 

Pièces jointes

  • test XLD.xlsm
    26.1 KB · Affichages: 2
Dernière édition:

tbft

XLDnaute Accro
Bonjour @patricktoulon

Un grand merci pour l'exemple.
Je n'arrive à comprendre les deux lignes suivantes:
VB:
    critère = vbDirectory Or vbHidden Or vbNormal Or vbArchive Or vbReadOnly Or vbSystem Or vbVolume
    critère = vbDirectory
pourquoi affecter deux fois l'une derrière l'autre la variable critère?
 

Discussions similaires

Réponses
9
Affichages
200
Réponses
20
Affichages
561
Réponses
32
Affichages
863
Réponses
14
Affichages
312

Statistiques des forums

Discussions
314 629
Messages
2 111 349
Membres
111 110
dernier inscrit
chergui