Liste fichier sous Excel - Problème dans le code

diijii -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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. diijii
       
      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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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. diijii
       
      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
      1. diijii > diijii
         
        En 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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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. diijii
       
      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
      1. diijii > diijii
         
        J'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
    2. diijii
       
      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
    3. diijii
       
      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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Iama Messages postés 324 Statut Membre 14
     
    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. diijii
       
      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. Iama Messages postés 324 Statut Membre 14
       
      Donc Dir doit être un chemin que tu compare à nf?

      Pour moi Dir est une fonction qui attend des arguments
      0
      1. diijii > Iama Messages postés 324 Statut Membre
         
        Je vais réessayer autres choses.

        Je clos ce topic.

        Merci de votre aide :) excellente journée à vous
        0
  7. diijii
     
    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
  8. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Dépose ton classeur sur ce site:

    https://www.cjoint.com/

    Tu n'auras qu'a mettre le lien pour le télécharger
    0
  9. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  10. Licorne rose Messages postés 1047 Statut Membre 226
     
    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
  11. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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