Lister tous les fichiers d’un répertoire
Comment obtenir la liste de tous les fichiers d’un répertoire (dossier) donné ?
Le code
Voici un bout de code qui devrait faire l’affaire (à recopier dans un module standard Access, comme d’habitude).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
' --- ' AFFICHAGE DU CONTENU D'UN DOSSIER ' --- ' Sub ContenuDuDossier(ByVal strDossier As String) Dim strFichier As String ' Vérifier que le dossier existe bien If Dir(strDossier, vbDirectory) = "" Then MsgBox "Dossier introuvable !", vbExclamation Exit Sub End If ' Lister tous les fichiers du dossier strFichier = Dir(strDossier, vbNormal) While strFichier <> "" ' Afficher le nom du fichier Debug.Print strFichier ' Lire le fichier suivant strFichier = Dir Wend End Sub |
Tester le programme
Pour tester le bout de code ci-dessus :
- Faites apparaître la fenêtre Exécution (
CTRL
+G
). - Tapez dedans quelque chose comme :
ContenuDuDossier "C:Document and Settingsvotre_nomMes documents"
puis[Entrée]
Aménagez le chemin selon votre version de Windows et selon votre nom de connexion.
Les noms des fichiers trouvés devraient s’afficher dans la fenêtre Exécution.
- Seuls les fichiers standard (
vbNormal
) s’affichent dans la liste. Vous pouvez également obtenir la liste des fichiers cachés (vbHidden
) ou système (vbSystem
) en aménageant le premierDir
du listing. Consultez l’aide de la commandeDir
pour plus d’informations. - La procédure ci-dessus n’affiche pas le contenu des sous-dossiers. Ça fera l’objet d’un autre article, pour sûr :o)
EDIT : Si vous souhaitez en plus stocker les noms des fichiers dans une table Access, consultez cet article.
Gabrieel > Le problème vient sans doute de la phrase SQL : il faudrait un
INSERT INTO [la table] ([Le champ]) VALUES (...)
au lieu d’unINSERT INTO [la table] SELECT...
D’autre part, la concaténation de la phrase SQL ne simplifie pas la maintenance. Je viens de poster un article qui utilise plutôt un Recordset. Voir ici.Bonjour
désolé, j’abuse certainement pouvez vous eventuellement voir ce qui ne va pas dans mon code
Private Sub Commande108_Click()
‘ —
‘ AFFICHAGE DU CONTENU D’UN DOSSIER
‘ —
‘
Dim strFichier As String
Dim strDossier As String
Dim MySQL As String
strDossier = « \Frlbmcfi01scan-avaries$Scan2AccentureBackupScan2013Scan12 »
‘ Vérifier que le dossier existe bien
If Dir(strDossier, vbDirectory) = « » Then
MsgBox « Dossier introuvable ! », vbExclamation
Exit Sub
End If
‘ Lister tous les fichiers du dossier
strFichier = Dir(strDossier, vbNormal)
While strFichier <> « »
‘ Afficher le nom du fichier
Debug.Print strFichier
MySQL = « INSERT INTO tblPvScanned(PV) SELECT « » » & strFichier & « » » AS Expr1; »
‘Debug.print mysql
DoCmd.RunSQL MySQL
‘ Lire le fichier suivant
strFichier = Dir
Wend
End Sub
la table a alimenter s’appele « tblPvScanned » et le champs a alimenter est le champs « PV »
Votre aide sera grandement apprécié
Merci d’avance
Bien cordialement,
G.
Merci pour la réponse rapide!
je ne l’ai pas vu, mais il va sans dire que strDossier devra être documenter par le codeur?
exemple
strDossier= »D:Applications »
n’est ce pas?
A.
christophe vdw et Gabrieel > C’est effectivement possible, il faut ouvrir un Recordset avant la boucle, et écrire le fichier dans la table à chaque à chaque tour de boucle.
Je ne crois pas avoir d’article détaillé là-dessus, par contre celui-ci est un peu sur le même principe.
Bonjour,
merci pour cet article. juste une question comment pourrais je en faire une table?
j’aimerai que le résultat alimente une table
encore merci
G.
bonjour
je voudrai lister en auto dans une table access le nom des
« classeur » exel, contenu dans un dossier
je m’explique:
sur mon disque:(c:utilisateur/…./document/christophe/model exel/demande de prix.)
dans le dossier « demande de prix » je stock des model »classeurs » exel(classeur utilisé dans access pour être transmis au fournisseurs)
je veut que access me propose la liste des model DISPONIBLE pour choix
pouvez vous me téléguider sur les articles qui traitent ce problème
merci
Daniel10 > Il s’agit d’afficher les noms des sous-répertoires, ou leur contenu ?
Bonsoir votre module fonctionne parfaitement bien avec insertion des fichiers dans une liste (formulaire access) mais je n’ai pas trouvé comment lister aussi les sous-répertoires
Pouvez vous m’aider
Mig28 >
AddItem
n’existe effectivement pas sous Access 97. Sous cette version, il faut donc modifierLaListe.RowSource
, en fournissant une chaîne dont les éléments sont délimités par un « ; ». Plus de détails dans cet autre article. Ouala !Bonjour,
je me suis remis à la tâche, et j’ai réussi à renvoyer les valeurs vers ma liste déroulante en utilisant la commande :
Forms(« NomFormulaire »).NomDeListe.RowSource = strFichier
en fin de code à la place de Debug.Print strFichier et de Additem qui n’existe apparement pas dans access 97.
Par contre, je n’ai que le nom du dernier fichier de mon dossier qui apparaît dans ma liste déroulante ?
As tu une piste ?
Mig28 > J’ai eu une question proche récemment, sur le principe d’une liste de tables. Consulte cet autre article récent, qui devrait te donner des pistes. C’est la même idée, sauf qu’on liste des tables au lieu de fichiers. Le résultat s’affiche dans une liste du formulaire.
Vu de loin, il faut surtout remplacer le
Debug.Print strFichier
que tu as actuellement par unNomDeListe.AddItem strFichier
. Reposte par ici si ça ne marche pas. 🙂Encore moi, désolé, maintenant que le code fonctionne j’essaie désespérément de l’intégrer pour qu’il alimente une liste déroulante et là mon niveau ne me permet pas de réussir, as tu une idée pour m’éclairer ?
Merci, ça marche très bien sur access 97
juste une petite remarque pour le test, il faut ajouté « » à la fin du chemin du dossier (ex : ContenuDuDossier « C:Document and Settingsvotre_nomMes documents »).
Encore merci
Mig28 > Oops. J’avais oublié de déclarer
strFichier
, du coup le code ne marchait que sansOption Explicit
en début de module. J’ai rajouté cette déclaration en début de code :Dim strFichier As String
Ça devrait mieux marcher maintenant. 🙂
Bonjour,
j’avais nommé le module standard du même nom que la procédure, c’est pourquoi j’avais le message précédent.
maintenant, il y a un autre problème lors de l’exécution dans la fenêtre d’exécution (CTRL + G => comme indiqué plus haut), j’ai le message : « erreur de compilation variable non définie » à propos de la variable « strfichier »
Est ce que tu peux encore m’aider un peu…?
Mig28 > Normalement, le code marche aussi sur Access 97.
Bonjour,
J’ai essayé de tester le code sous access 97.
J’ai un message « Erreur de compilation: variable ou procedure attendue, et non un module »
Est ce que vous pouvez m’aider ?
merci d’avance
Vaucluse Immo > Le « rien ne fonctionne » n’est pas pratique pour diagnostiquer… 😉 Le programme n’affiche rien ? Il ne s’exécute pas ? S’il y a une erreur, quel est le message ?
S’il s’agit d’ajouter des éléments à une liste plutôt que de les afficher dans la fenêtre Exécution, AddItem devrait faire l’affaire (version récente d’Access requise). En gros, il faudra remplacer la ligne
Debug.Print
du programme ci-dessus par leAddItem
qui va bien.Bonjour, je viens d’essayer le code ci dessous sous access 2002 mais rien ne fonctionne , pouvez-vous m’indiquez plus précisément , comment faire
J’aimerais pouvoir afficher le contenu trouvé dans une ListBox >Access sur formulaire
Merci
Cordialement
Sub ContenuDuDossier(ByVal strDossier As String)
‘ Vérifier que le dossier existe bien
If Dir(strDossier, vbDirectory) = « » Then
MsgBox « Dossier introuvable ! », vbExclamation
Exit Sub
End If
‘ Lister tous les fichiers du dossier
strFichier = Dir(strDossier, vbNormal)
While strFichier <> « »
‘ Afficher le nom du fichier
Debug.Print strFichier
‘ Lire le fichier suivant
strFichier = Dir
Wend
End Sub