Liste fichier sous Excel - Problème dans le code
Fermé
diijii
-
27 août 2014 à 11:23
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 31 août 2014 à 11:00
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 31 août 2014 à 11:00
A voir également:
- Liste fichier sous Excel - Problème dans le code
- Liste déroulante excel - Guide
- Fichier rar - Guide
- Le code ascii - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
10 réponses
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
27 août 2014 à 18:22
27 août 2014 à 18:22
Bonjour,
Cela fonctionne très bien. Il suffit de déclarer les variables:
Toujours mettre Option Explicit. Cela permet de voir les variables qui ne sont pas déclarées et autres erreurs.
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.
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
28 août 2014 à 08:33
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.
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
28 août 2014 à 10:52
28 août 2014 à 10:52
J'ai mis des fichiers xls, pdf et doc, cela fonctionne. Essayer cela à tout hasard!
J'ai changé
nf = Dir(repertoire & "\*.*")
Sinon essayé avec un repertoire valide
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
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 ?
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 ?
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. :)
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. :)
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
28 août 2014 à 17:55
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
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
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
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
Que je tu dire par nf = Dir
Quel doit être la valeur de Dir, ou quelle valeur peut prendre Dir?
cordialement
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
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
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
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
Pour moi Dir est une fonction qui attend des arguments
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
29 août 2014 à 14:18
Je vais réessayer autres choses.
Je clos ce topic.
Merci de votre aide :) excellente journée à vous
Je clos ce topic.
Merci de votre aide :) excellente journée à vous
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 ?
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 ?
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
29 août 2014 à 14:03
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
https://www.cjoint.com/
Tu n'auras qu'a mettre le lien pour le télécharger
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
29 août 2014 à 15:28
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
'
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
'
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
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 ?
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 ?
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
31 août 2014 à 11:00
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
pour appeler:
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
28 août 2014 à 08:18
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 ?