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
Bonsoir,
Ça ne te renvoie rien parce que tu n'utilises pas Dir() avec les paramètres corrects.
VB:
tp = Dir(Nom_chemin)
Dir [(pathname, [ attributs ] ) ]

Les paramètres d’argumentd’attributs sont les suivants :
vbNormal0(Valeur par défaut) Spécifie des fichiers sans attributs.
Donc si tu cherches le Dir() d'un répertoire, vbNormal ça n'ira pas !
 

Dudu2

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

patricktoulon

XLDnaute Barbatruc
re
bonsoir juste en passant
à ne pas confondre
x=dir(dossier,vbdirectory)
liste tout fichier et dossier enfant direct du dossier(y compris les interdits et system(peut générer une erreur))
et
x=dir (dossier &"\*." & extension)
liste tout les fichiers enfant direct du dossier
 

Dudu2

XLDnaute Barbatruc
A noter que la méthode Dir() supporte mal les noms de fichiers contenant de l'Unicode.
Il vaut mieux y aller avec FileSystemObject.
Ça avait fait l'objet d'une longue discussion et de nombreux tests avec @patricktoulon.

Par contre je ne comprends pas ce que @patricktoulon a voulu dire par:
x=dir(dossier,vbdirectory)
liste tout fichier et dossier enfant direct du dossier(y compris les interdits et system(peut générer une erreur))
En faisant ça on récupère juste le nom du dossier en question s'il existe.
Manque le code à suivre pour récupérer les fichiers et sous-répertoires directs
 

tbft

XLDnaute Accro
Bonjour
L'instruction tp = Dir(Nom_chemin & int_Séparateur_Répertoire, vbDirectory) me renvoi les sous dossier et les fichiers avec int_Séparateur_Répertoire = "\"

Pouvez-vous me donner votre avis, s'il vous plait ?
 

Dudu2

XLDnaute Barbatruc
Le code adapté serait donc:
VB:
Sub a()
    Dim t() As String
    Const Répertoire = "F:\Téléchargements"
  
    'Liste des fichiers seulement
    t = ListeFichiers(Répertoire)
  
    'Liste des fichiers et des sous-répertoires directs
    't = ListeFichiers(Répertoire, "")
  
    If Not (Not t) Then
        [A1].Resize(UBound(t, 1), 1).Value = WorksheetFunction.Transpose(t)
    Else
        MsgBox "Aucun fichier dans le répertoire <" & Répertoire & ">"
    End If
End Sub

'------------------------
'Fichiers d'un répertoire
'------------------------
Private Function ListeFichiers(ByVal Répertoire As String, Optional ByVal Extension As String = "*") As String()
    Dim Fichier As String
    Dim TabFichiers() As String
    Dim NbFichiers As Long
 
    'Retire le "\" final si présent
    If Right(Répertoire, 1) = "\" Then
        Répertoire = Left(Répertoire, Len(Répertoire) - 1)
    End If
 
    '---liste les fichiers et dossiers directs du répertoire ---
    If Len(Extension) > 0 Then
        'Seulement les fichiers
        Fichier = Dir(Répertoire & "\*." & Extension)
    Else
        'Tous les fichiers et les sous-répertoires directs
        Fichier = Dir(Répertoire & "\", vbDirectory)
    End If
 
    '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
 
Dernière édition:

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 345
Membres
111 110
dernier inscrit
chergui