Récupérer les noms de fichiers d'un dossier

lepigoennier

XLDnaute Junior
Bonjour,

J'ai le code suivant qui fonctionne très bien si je met le chemin complet dans Tbl = EnumFichiers(""). Par contre je voudrais que la macro boucle sur la liste de chemins que j'ai sur la feuille Localisation. Écrit comme tel, il y a le message d'erreur suivant qui m'apparaît : Erreur de compilation, Type d'argument ByRef incompatible. Est-ce que quelqu'un a une idée? Je voudrais aussi que dans la colonne C apparaisse le nom du chemin.

Merci


Code:
Sub Test()

    Dim Tbl() As String
    Dim I As Integer
   
    
    Application.ScreenUpdating = False
    Set ShD = Sheets("Localisation")
    Set List = ShD.Range("D2:D" & ShD.Range("B65536").End(xlUp).Row)
    
    Tbl = EnumFichiers("List")
    
    'en colonne "A" et "B" de la feuille active si pas vide
   If Not (Not Tbl) Then
    
        For I = 1 To UBound(Tbl)
        
            Cells(I, 1) = Tbl(I)
            Cells(I, 2) = Right(Tbl(I), Len(Tbl(I)) - InStrRev(Tbl(I), "\"))
            
        Next I
    
    End If
    
End Sub

Function EnumFichiers(Chemin As String) As String()

    Dim TableauFichiers() As String
    Dim Fichier As String
    Dim I As Integer
    
    Application.ScreenUpdating = False
    Set ShD = Sheets("Localisation")
    Set List = ShD.Range("D2:D" & ShD.Range("B65536").End(xlUp).Row)
    
    'complète le chemin le cas échéant
   If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
    
    'récupère les fichiers
   Fichier = Dir(Chemin)
    
    'boucle sur les fichiers du dossier
   Do While (Len(Fichier) > 0)
    
        I = I + 1
        
        ReDim Preserve TableauFichiers(1 To I)
        
        TableauFichiers(I) = Fichier
        
        Fichier = Dir()
        
    Loop
    
    'retourne le tableau des noms de fichiers
   EnumFichiers = TableauFichiers()

End Function
 

Paf

XLDnaute Barbatruc
Re : Récupérer les noms de fichiers d'un dossier

Bonjour,

dans Sub Test() vous déterminez une variable List en Range : Set List = ShD.Range("D2:D" & ShD.Range("B65536").End(xlUp).Row)

puis vous appelez la fonction EnumFichiers() avec comme paramètre la chaine de caractères "List", qui n'est pas la même chose que la variable List !

dans Function EnumFichiers(Chemin As String) As String() vous re-déterminez une variable List ( identique à la variable List de la sub test()), dont vous ne vous servez pas!

a priori (Non testé faute de jeux d'essai fourni) modifierSub Test() comme ceci:
On fait le même traitement qu'avant, mais pour chaque ligne de la colonne D (contenu dans le tableau List)
Code:
Sub Test()

    Dim Tbl() As String
    Dim I As Integer
     
    Application.ScreenUpdating = False
    Set ShD = Sheets("Localisation")
    List = ShD.Range("D2:D" & ShD.Range("B65536").End(xlUp).Row)
   For j = LBound(List) to UBound(List)
    Tbl = EnumFichiers(List(j,1)")   
        'en colonne "A" et "B" de la feuille active si pas vide
       If Not (Not Tbl) Then   
            For I = 1 To UBound(Tbl)      
                Cells(I, 1) = Tbl(I)
                Cells(I, 2) = Right(Tbl(I), Len(Tbl(I)) - InStrRev(Tbl(I), "\"))           
           Next I   
       End If  
  Next j 
End Sub
Revoir la gestion de ligne ( un indice I ),sinon à chaque itération de la boucle j, on écrasera les valeurs écrites précédemment

A+
 
Dernière édition:

lepigoennier

XLDnaute Junior
Re : Récupérer les noms de fichiers d'un dossier

Allo,

Même en otant List dans Function EnumFichiers(Chemin As String) As String() , ça bloque toujours à la même place, à savoir :

Tbl = EnumFichiers(List(j,1)")

avec le message suivant : Erreur de compilation, Type d'argument ByRef incompatible

Merci pour l'aide
 

lepigoennier

XLDnaute Junior
Re : Récupérer les noms de fichiers d'un dossier

J'avais déjà enlevé le " et il n'y rien qui se passe. Pour ce qui est du classeur Excel, non pertinent à envoyer. J'ai une feuille nommée localisation avec tous les chemins des dossiers et une feuille nommée certificats qui est vide. C'est dans cette page que je veux mettre tous les noms des fichiers contenus dans les différents classeurs et mettre le nom du chemin à côté.
 

Paf

XLDnaute Barbatruc
Re : Récupérer les noms de fichiers d'un dossier

re

List = ShD.Range("C2:C" & ShC.Range("B65536").End(xlUp).Row)
fait référence à deux feuilles différentes

en supprimant le typage de l'argument de la fonction, ça passe:
Function EnumFichiers(Chemin) As String()

Pas testé le reste.

Bonne suite
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 838
dernier inscrit
Christelle.B86