Liste fichier sous Excel - Problème dans le code

Fermé
diijii - 27 août 2014 à 11:23
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 31 août 2014 à 11:00
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
A voir également:

10 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
27 août 2014 à 18:22
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
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
28 août 2014 à 08:33
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
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
diijii > diijii
28 août 2014 à 10:55
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
28 août 2014 à 10:52
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
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
diijii > diijii
28 août 2014 à 11:07
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
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
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
28 août 2014 à 17:55
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020 14
29 août 2014 à 09:37
bonjour diijii

Que je tu dire par nf = Dir

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


cordialement
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
Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020 14
29 août 2014 à 10:22
Donc Dir doit être un chemin que tu compare à nf?

Pour moi Dir est une fonction qui attend des arguments
0
diijii > Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020
29 août 2014 à 14:18
Je vais réessayer autres choses.

Je clos ce topic.

Merci de votre aide :) excellente journée à vous
0
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
29 août 2014 à 14:03
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
29 août 2014 à 15:28
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
Licorne rose Messages postés 997 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 18 janvier 2024 227
30 août 2014 à 23:12
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 août 2014 à 11:00
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