Liste fichier sous Excel - Problème dans le code

Bonjour,

Mon but est de lister les fichiers présents dans un dossier.

Tout d'abord, je vous mets ci-dessous le lien qui m'a été le plus utile pour l'idée de départ.

http://forum.telecharger.01net.com/forum/high-tech/LOGICIELS/Developpement/resolu-fichiers-excel-sujet_175112_1.htm

Par la suite, j'ai essayé tout ce que je connaissais en VBA pour résoudre le problème sans en trouver une qui fonctionne.

Voici mon code

Sub ListeTest()

repertoire = "T:\DossierTest"
' DossierTest comprenant 2 fichiers. un pdf et un word

i = 4
nf = Dir (repertoire & "\*")
Do While nf <> ""
Cells(i, 7) = nf
nf = Dir
i = i + 1
Loop
End Sub

Mon problème vient au "nf = Dir" qui est dans la boucle. Lors de l'exécution, il m'envoie une message box "Erreur d'exécution '5' : Argument ou appel de procédure incorrect".

Je ne suis certes pas un grand expert en VBA toutefois, j'ai quelques bases. Je ne comprends pas son bloquage.

Est-ce que quelqu'un arriverait à me dépanner ?

Un grand merci d'avance

10 réponses

  1. Contributeur
    Bonjour,

    Cela fonctionne très bien. Il suffit de déclarer les variables:

    Option Explicit
    Private Sub CommandButton1_Click()
    ListeTest
    End Sub
    Sub ListeTest()
    Dim repertoire, nf As String
    Dim i As Integer
    repertoire = "T:\DossierTest" 
    ' DossierTest comprenant 2 fichiers. un pdf et un word
    i = 4
    nf = Dir(repertoire & "\*")
    Do While nf <> ""
    Cells(i, 7) = nf
    nf = Dir
    i = i + 1
    Loop
    End Sub
    


    Toujours mettre Option Explicit. Cela permet de voir les variables qui ne sont pas déclarées et autres erreurs.

    1
    1. Bonjour,

      Avant tout merci de votre réponse.

      Après avoir ajouté les variables ainsi que la première partie de la méthode.

      Il me bloque toujours à "nf = dir"

      Je ne suis pas très calé en vba. Plus en java. Je me débrouille en général mais sur des codes plus simples.

      Dans ce cas, est il juste de mettre le tout dans un module ? Ou dois-je les mettre dans ailleurs ?
      0
  2. Contributeur
    Le code est correct. Il faudrait vérifier le chemin du dossier. Essayer dans un nouveau classeur vierge de macro. Insérer un UserForm avec un Bouton et mettre ce code après avoir cliqué sur le bouton.
    1
    1. Bonjour,

      J'ai essayé tout ce que vous m'avez dit. Il bloque toujours au même endroit.

      Le pire c'est que je ne comprends pas pourquoi.

      Le nf étant déclaré tout comme le répertoire. En String tous les deux.
      0
    2. @diijiiEn fait, si tu veux. J'ai créé un bouton sur lequel je compte affecter la macro.

      De façon à ce que chaque fois que j'appuie, il me liste tous les documents présents dans le dossiers.

      Peut être, je ne comprends pas le dir. Que veut il dire exactement en vba ?
      0
  3. Contributeur
    J'ai mis des fichiers xls, pdf et doc, cela fonctionne. Essayer cela à tout hasard!

    Sub ListeTest()
    Dim repertoire, nf As String
    Dim i As Integer
    repertoire = "chemin dossier"
    ' DossierTest comprenant 2 fichiers. un pdf et un word
    i = 4
    nf = Dir(repertoire & "\*.*")
    Do While nf <> ""
    Cells(i, 7) = nf
    nf = Dir
    i = i + 1
    Loop
    End Sub
    


    J'ai changé

    nf = Dir(repertoire & "\*.*")

    Sinon essayé avec un repertoire valide
    1
    1. J'avais déjà essayé le "\*.*".

      Le chemin d'accès est sur à 100% vu que j'ai fait copier en format texte quand j'étais dessus.

      J'ai essayé de le changer et rebelotte. Toujours la même erreur :(
      0
    2. @diijiiJ'ai du nouveau !

      J'avais déjà essayer ce matin de copier dans un nouveau fichier Excel. Sans résultat. J'avais juste pas vu que ça ne m'avait pas pris tout le code lors du copier coller ! (quel idiot je suis...)

      Donc sur un autre ça marche.

      Mtn comment faire en sorte que ça marche sur le bon ? D'ailleurs pourquoi ça marcherait sur l'un et pas sur l'autre ?
      0
    3. J'ai d'ailleurs continué à essayer la suite sur un fichier excel à part.

      Mon but final est de pouvoir lister mes fichiers grâce à la première méthode et par la suite à l'aide de checkbox, de pouvoir les déplacer dans un dossier différent.

      J'ai expérimenté ce code que j'ai crée de moi même ne trouvant aucun site ni explication concrète la dessus hormis pour la fonction name.

      Sub MoveFile(strSourcelong As String, ByVal strCiblelong As String)

      If Dir(strSourcelong) = "" Then
      MsgBox "Fichier source introuvable : " & strSourcelong, vbExclamation
      Exit Sub
      End If

      Name strSourcelong As strCiblelong

      End Sub

      Sub archivage()
      '
      ' Test Système archivage
      '

      Dim i As Integer
      Dim lien As String

      i = 4

      Do While Cells(i, 7) <> ""
      If Cells(i, 5) = VRAI Then
      lien = Cells(i, 7).Value
      MoveFile "T:\SYSTEME DE GESTION\Administration\Liquidites a saisir\" & "lien", "T:\SYSTEME DE GESTION\Archivage\Administration Archivage\" & "lien"
      End If
      i = i + 1
      Loop

      '
      End Sub

      Oserais-je te demander de jeter une coup d'oeil ? Il bloque lors du name :(
      Arriverais-tu également à me dire comment je pourrai les insérer dans le bon fichier excel sans que ça bloque ?

      Dans tous les cas, je te remercie beaucoup pour tes réponses. :)
      0
    4. J'ai trouvé le problème :) il suffisait de retirer les "" à lien !

      Mtn, mon problème reste de pouvoir effectuer ça dans le bon fichier.
      0
  4. Contributeur
    Mtn, mon problème reste de pouvoir effectuer ça dans le bon fichier

    C'est à toi de chercher sur ce classeur ce qui bloque la macro. Fait une recherche sur ta variable si elle n'est pas dans d'autres macros: nf

    Voir aussi Dir

    Change carrément de variable nf par une autre.

    Cela je ne peux pas t'aider, c'est un travail de recherche personnelle
    1
    1. bonjour diijii

      Que je tu dire par nf = Dir

      Quel doit être la valeur de Dir, ou quelle valeur peut prendre Dir?

      cordialement
      1
      1. Pour tout te dire, je ne connais pas bien la variable dir. Je suppose qu'il s'agit d'une variable système. nf représente mon chemin d'accès aux dossiers.

        Aurais-tu une idée ?

        Dans tous les cas, je vous remercie pour votre aide. J'ai bcp appris en VBA avec ce post. mtn, reste plus qu'à déboguer sur le bon fichier
        0
      2. Donc Dir doit être un chemin que tu compare à nf?

        Pour moi Dir est une fonction qui attend des arguments
        0
      3. @IamaJe vais réessayer autres choses.

        Je clos ce topic.

        Merci de votre aide :) excellente journée à vous
        0
    2. Recherche personnelle, j'en fait non stop depuis trois jours ;)

      Le truc s'est que hormis des macros de déplacements (Genre ouvrir un onglet, masquer l'ancien et me placer sur A1), je n'ai pas d'autre macro que celle qui cause se problème.

      Le nf est une variable inutilisé partout ailleurs. Le Dir est utilisé dans une fonction qui me ressort le nombre exact de documents existants dans tel fichier.

      Il s'agit du code erreur d'exécution 5. Je rage. Je ne vois pas pourquoi ça marche sur l'autres et pas par celui-là :(

      Y aurait-il moyen éventuellement de te le transmettre par mail ?
      0
      1. Contributeur
        J'ai trouvé cela pour remplacer

        http://boisgontierjacques.free.fr/pages_site/GestionRepertoire.htm

        Sub ListeFichiers()
        Dim racine As String
        Dim fs, dossier
        Dim ligne As Integer
        Dim f As Variant
        racine = "chemin dossier"
        Range("a4:F10000").ClearContents
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set dossier = fs.getfolder(racine) 'DossierRacine
        ligne = 2
        For Each f In dossier.Files
        Cells(ligne, 1) = f.Name 'a adapter A1
        'Cells(ligne, 2) = f.Size
        ' Cells(ligne, 3) = f.Datecreated
        ' Cells(ligne, 4) = f.DatelastModified
        'Cells(ligne, 5) = f.Datelastaccessed
        'If f.Attributes And vbHidden Then Cells(ligne, 6) = "Caché"
        ligne = ligne + 1
        Next
        End Sub

        '

        0
        1. Bonjour,

          Est-ce ça marche, si on finalise le truc, pour avoir les noms des fichiers dans tous les sous-dossiers, leurs tailles dates et autres ?
          0
          1. Contributeur
            Voici le code pour lister les fichiers des dossiers et sous-dossiers avec tous les renseignements:

            mettre dans un module

            ' Liste les fichiers d'un dossier et de ses sous dossiers
            ' dans une feuille de calcul avec certains renseignements
            ' d'après Ole P Erlandsen
            ' code original à cette adresse http://www.erlandsendata.no/)
            
            Sub TestListFilesInFolder()
            Dim RootFolder$
            
              ' dossier à scanner
              RootFolder = ChoisirDossier
              If RootFolder = "" Then Exit Sub
              
              ' create a new workbook for the file list
              Workbooks.Add
             ' add headers
              With Range("A1")
                .Formula = " Contenu du dossier : " & RootFolder
                .Font.Bold = True
                .Font.Size = 12
                .Font.Color = RGB(255, 0, 0)
              End With
            
              Range("A3").Formula = "Chemin : "
              Range("B3").Formula = "Nom : "
              Range("C3").Formula = "Date Création : "
              Range("D3").Formula = "Date Dernier Accès : "
              Range("E3").Formula = "Date Dernière Modif : "
              Range("F3").Formula = "Taille Fichier: "
              With Range("A3:F3")
                .Font.Bold = True
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .WrapText = True
                .Font.Color = RGB(0, 0, 255)
              End With
              
              ' list all files included subfolders
              ListFilesInFolder RootFolder, True
              
              Columns("A:H").AutoFit
            
            End Sub
            
            Sub ListFilesInFolder(SourceFolderName As String, IncludeSubfolders As Boolean)
            ' lists information about the files in SourceFolder
            ' example: ListFilesInFolder "C:\FolderName", True
            ' Ole P Erlandsen (modifié fs 11/8/01)
            
            Dim fso 'As Scripting.FileSystemObject
            Dim SourceFolder 'As Scripting.Folder
            Dim SubFolder 'As Scripting.Folder
            Dim FileItem 'As Scripting.File
            Dim R As Long
            
              Set fso = CreateObject("Scripting.FileSystemObject")
              Set SourceFolder = fso.GetFolder(SourceFolderName)
              R = Range("A65536").End(xlUp).Row + 1
            
              For Each FileItem In SourceFolder.Files
             
                ' display file properties
               Cells(R, 1).Formula = FileItem.ParentFolder
                Cells(R, 2).Formula = FileItem.Name
                Cells(R, 3).Formula = FileItem.DateCreated
                Cells(R, 3).NumberFormat = "ddd* yyyy-mm-dd hh:mm:ss"
                Cells(R, 4).Formula = FileItem.DateLastAccessed
                Cells(R, 5).Formula = FileItem.DateLastModified
                Cells(R, 5).NumberFormat = "ddd* yyyy-mm-dd hh:mm:ss"
                Cells(R, 6).Formula = FileLen(FileItem) & " octets"
                ' next row number
             R = R + 1
              Next FileItem
            
              If IncludeSubfolders Then
                For Each SubFolder In SourceFolder.subfolders
                  ListFilesInFolder SubFolder.path, True
                Next SubFolder
              End If
            
              Set FileItem = Nothing
              Set SourceFolder = Nothing
              Set fso = Nothing
            
              ActiveWorkbook.Saved = True
            
            End Sub
            
            Private Function ChoisirDossier()
            Dim objShell, objFolder, Chemin, SecuriteSlash
                                                        
                Set objShell = CreateObject("Shell.Application")
                Set objFolder = _
                    objShell.BrowseForFolder(&H0&, "Choisisser un répertoire", &H1&)
                On Error Resume Next
                Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).path & ""
                If objFolder.Title = "Bureau" Then
                    Chemin = "C:\Windows\Bureau"
                End If
                If objFolder.Title = "" Then
                    Chemin = ""
                End If
            
                SecuriteSlash = InStr(objFolder.Title, ":")
            
                If SecuriteSlash > 0 Then
                    Chemin = Mid(objFolder.Title, SecuriteSlash - 1, 2) & ""
                End If
                ChoisirDossier = Chemin
            End Function
            
            
            
            


            pour appeler:

            Private Sub CommandButton1_Click()
            TestListFilesInFolder
            End Sub
            

            0

            Discussions similaires

            question pix mot caché

            7 réponses