Microsoft 365 VBA dir()

  • Initiateur de la discussion Initiateur de la discussion tbft
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
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

Dernière édition:
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?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 styles et formules
Réponses
9
Affichages
298
Réponses
20
Affichages
816
Retour