Faire référence à un répertoire
Pour obtenir des informations sur un répertoire et/ou déclencher des actions sur ce répertoire (le copier, le supprimer...), vous devez y faire référence grâce à un objet Folder. Ceci peut se faire de plusieurs manières :
- La propriété RootFolder de l'objet Drive (disque) donne le dossier racine d'un disque quelconque, donc le point de départ pour l'exploration de ce disque.
- Si un objet Folder pointe sur un dossier existant, sa collection SubFolders donne la liste de tous ses sous-répertoires, et permet donc de les parcourir également. En connaissant la racine d'un disque (cf. RootFolder ci-dessus), vous pouvez donc en explorer la totalité.
- Inversement, si vous disposez déjà d'un objet Folder, vous pouvez en obtenir le dossier parent via la propriété ParentFolder.
- La méthode GetFolder() de l'objet principal FileSystemObject crée directement un objet Folder à partir d'un chemin du style C:\Mes documents.
Le petit programme ci-dessous illustre ces variantes. Pour l'exécuter :
- Recopiez le code ci-dessous dans un module standard Access.
- Faites apparaître la fenêtre Exécution de Visual Basic Editor (Ctrl + G).
- Placez le curseur au milieu du listing. Cliquez sur l'icône Exécuter Sub/UserForm.
' --- ' ACCES AUX REPERTOIRES/DOSSIERS ' --- ' (c) 2003, Hervé Inisan - www.self-access.com ' ' La fonction FolderInstance() illustre plusieurs manières ' d'accéder à un répertoire via l'objet Folder. ' Les résultats sont affichés dans la fenêtre Exécution (Ctrl+G).Function FolderInstance()Dim fso As Scripting.FileSystemObject Dim fld As Scripting.Folder Dim fld2 As Scripting.Folder' Créer une instance du FSOSet fso=New Scripting.FileSystemObject' Obtenir le répertoire racine du disque C ' et afficher son cheminSet fld=fso.Drives("C").RootFolder Debug."DOSSIER RACINE DU DISQUE C: ",fld.Path' Créer directement une instance du répertoire C:\Mes documentsSet fld=fso.GetFolder("C:\Mes documents")Debug."TAILLE DU DOSSIER 'MES DOCUMENTS': ",fld.Size' Pointer sur un sous-dossier de 'Mes documents'If fso.FolderExists("C:\Mes documents\Access")Then Set fld2=fld.SubFolders("Access")Debug."TAILLE DU SOUS-DOSSIER ACCESS: ",fld2.Size End If' Inversement, pointer sur le parent du dossier 'Mes documents'If Not fld.IsRootFolder Then Set fld2=fld.ParentFolder Debug."DOSSIER PARENT DE 'MES DOCUMENTS': ",fld2.Path End If' Libérer les objetsSet fld2=Nothing Set fld=Nothing Set fso=Nothing End Function
Détail du listing
|
Cette ligne démarre toute utilisation du Scripting Runtime. Il s'agit de créer une instance de l'objet FileSystemObject, à
partir de laquelle toutes sortes d'opérations pourront être effectuées
sur le système de fichiers.
|
|
Cette première méthode montre comment obtenir le dossier
racine (RootFolder) du disque C. On affiche ensuite son chemin
(Path). |
|
A supposer qu'un dossier "Mes documents" existe
sur votre disque C (c'est le cas sur Windows 95/98, pas sur Windows
NT/2000/XP), ces 2 lignes montrent comment y faire référence,
directement à partir de l'objet FileSystemObject, puis comment afficher
sa taille.
Le dossier peut également se situer sur le réseau, avec un chemin du style \\serveur\dossier.
|
|
Si fld est une variable de type Folder,
fld.SubFolders est
une collection donnant tous ses sous-dossiers (donc fld.SubFolders.Count
donne le nombre de sous-dossiers). On peut accéder à l'un des
sous-dossiers directement par son nom, comme c'est le cas ici.
|
|
La propriété ParentFolder est en quelque sorte inverse de
SubFolders : elle donne le dossier parent d'un objet Folder.
Sauf si le dossier de départ est à la racine du disque (d'où le test
sur la propriété IsRootFolder).
|
Décrire un répertoire à l'aide de l'objet Folder
Comme il a été dit plus haut, l'objet Folder décrit un répertoire. Le programme qui suit illustre toutes les informations que vous pouvez obtenir sur le dossier "Mes documents" de votre disque C (modifiez le dossier si vous travaillez sous Windows NT/2000/XP).
La majorité de ces propriétés est accessible en lecture seule et ne peut donc pas être modifiée en Visual Basic.
' ---
' INFORMATIONS SUR UN REPERTOIRE
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
'
' La fonction FolderInfo() utilise l'objet Folder
' pour lister toutes les caractéristiques d'un répertoire.
' Les résultats sont affichés dans la fenêtre Exécution (Ctrl+G).
Function FolderInfo()
Dim fso As Scripting.FileSystemObject
Dim fld As Scripting.Folder
' Créer une instance du FSO
Set fso = New Scripting.FileSystemObject
' Créer une instance d'un répertoire/dossier
Set fld = fso.GetFolder("C:\Mes documents")
' Afficher les caractéristiques du répertoire
Debug.Print "---
INFOS REPERTOIRE"
With fld
Debug.Print "NOM: ", , .Name
Debug.Print "CHEMIN: ", , .Path
Debug.Print "NOM DOS: ", , .ShortName
Debug.Print "CHEMIN DOS: ", , .ShortPath
Debug.Print "DISQUE: ", , .Drive.DriveLetter
Debug.Print "REPERTOIRE RACINE: ", .IsRootFolder
Debug.Print "REPERTOIRE PARENT: ", .ParentFolder.Path
Debug.Print "NOMBRE DE FICHIERS: ", .Files.Count
Debug.Print "NOMBRE DE SOUS-DOSSIERS: ", .SubFolders.Count
Debug.Print "DATE DE CREATION: ", .DateCreated
Debug.Print "DATE DU DERNIER ACCES: ", .DateLastAccessed
Debug.Print "DERNIERE MODIFICATION: ", .DateLastModified
Debug.Print "TAILLE: ", , .Size
Debug.Print "TYPE: ", , .Type
Debug.Print "ATTRIBUTS: ", , .Attributes & " - " & FileAttrib(.Attributes)
End With
' Libérer les objets
Set fld = Nothing
Set fso = Nothing
End Function
Résultat
Le listing parle de lui-même. Consultez simplement la page Manipulation des répertoires/dossiers via la collection Folders si vous souhaitez quelques compléments sur la fonction FileAttrib() utilisée ici pour afficher en clair les attributs d'un répertoire.
Lister le contenu d'un répertoire
La fonction ci-dessous affiche la liste de tous les fichiers et répertoires du dossier "C:\Mes documents", ainsi que leur nombre. Ces informations sont données par les collections Files et SubFolders de l'objet Folder.
' ---
' LISTER LE CONTENU D'UN REPERTOIRE
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
'
' La fonction FolderDetail() utilise l'objet Folder
' pour lister le contenu (répertoires et fichiers) d'un dossier.
' Les résultats sont affichés dans la fenêtre Exécution (Ctrl+G).
Function FolderDetail()
Dim fso As Scripting.FileSystemObject
Dim fld As Scripting.Folder
Dim fld2 As Scripting.Folder
Dim fle As Scripting.File
' Créer une instance du FSO
Set fso = New Scripting.FileSystemObject
' Créer une instance d'un répertoire/dossier
Set fld = fso.GetFolder("C:\Mes documents")
' Afficher tous les fichiers du répertoire
Debug.Print "NOMBRE DE FICHIERS: " & fld.Files.Count
For Each fle In fld.Files
Debug.Print fle.Path
Next
Debug.Print
' Afficher tous les sous-répertoires
Debug.Print "NOMBRE DE SOUS-DOSSIERS: " & fld.SubFolders.Count
For Each fld2 In fld.SubFolders
Debug.Print fld2.Path
Next
' Libérer les objets
Set fle = Nothing
Set fld2 = Nothing
Set fld = Nothing
Set fso = Nothing
End Function
Manipuler les répertoires
Voici un ensemble de listings qui permettent différentes opérations sur les répertoires. Deux petites choses :
- Généralement, vous pouvez obtenir le même résultat à partir de l'objet Folder ou de l'objet FileSystemObject. Les listings indiquent ces variantes.
- Pensez à tester ce qui suit sur des dossiers sans importance, on n'est pas à l'abri d'une mauvaise-manipulation-de-la-mort-qui-tue...
Vous pouvez tester chaque fonction directement, en faisant apparaître la fenêtre Exécution (Ctrl + G) puis en y tapant par exemple : FolderRename "C:\Mes documents\dossier01", "dossier02" (puis Entrée).
Sinon, le dernier listing en bas de page fait un beau récapitulatif de tout ça !
Renommer un répertoire
Vous pouvez renommer un répertoire de 2 manières : en modifiant sa propriété Name (qui est accessible en lecture/écriture), ou en déplaçant le répertoire (voir la fonction FolderMove() plus loin).
' --- ' RENOMMER UN REPERTOIRE ' --- ' (c) 2003, Hervé Inisan - www.self-access.com ' ' La fonction FolderRename() renomme un répertoire. ' --- ' Entrée : strOldPath <- Chemin actuel du répertoire'(ex. : "C:\Mes documents\test") ' strNewName <- Nom à donner au répertoire ' (sans le chemin ; ex. : "test99") ' Sortie : Le chemin final du répertoire (modifié ou non).Function FolderRename(ByVal strOldPath As String, _ByVal strNewName As String)As String Dim fso As Scripting.FileSystemObject Dim fld As Scripting.Folder' Créer une instance du FSOSet fso=New Scripting.FileSystemObject' Renommer le répertoireOn Error Resume Next If fso.FolderExists(strOldPath)Then Set fld=fso.GetFolder(strOldPath)fld.Name=strNewName FolderRename=fld.Path Else FolderRename=strOldPath End If' Libérer les objetsSet fld=Nothing Set fso=Nothing End Function
Créer un répertoire
La collection Folders (ou sa variante SubFolders) comporte une méthode .Add qui permet... d'ajouter un répertoire à un dossier existant. Voyons voir...
' ---
' CREER UN REPERTOIRE
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
'
' La fonction FolderAdd() crée un répertoire dans un répertoire parent.
' ---
' Entrée : strPath <- Chemin du répertoire parent
' (ex. : "C:\Mes documents")
' strNewFolder <- Répertoire à créer
' (sans chemin ; ex. : "test")
Function FolderAdd(ByVal strPath As String, ByVal strNewFolder As String)
Dim fso As Scripting.FileSystemObject
Dim fld As Scripting.Folder
' Créer une instance du FSO
Set fso = New Scripting.FileSystemObject
' Créer le sous-répertoire
On Error Resume Next
If fso.FolderExists(strPath) Then
Set fld = fso.GetFolder(strPath)
fld.SubFolders.Add strNewFolder
End If
' Variante (dans ce cas : strPath et strNewFolder sont des chemins complets)
' If fso.FolderExists(strPath) And (Not fso.FolderExists(strNewFolder)) Then
' fso.CreateFolder strNewFolder
' End If
' Libérer les objets
Set fld = Nothing
Set fso = Nothing
End Function
Dupliquer un répertoire
' ---
' DUPLIQUER UN REPERTOIRE
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
'
' La fonction FolderCopy() duplique un répertoire et ses sous-répertoires.
' ---
' Entrée : strOldPath <- Chemin actuel du répertoire
' (ex. : "C:\Mes documents\test")
' strTargetPath <- Chemin complet du répertoire à créer
Function FolderCopy(ByVal strSourcePath As String, ByVal strTargetPath As String)
Dim fso As Scripting.FileSystemObject
Dim fld As Scripting.Folder
' Créer une instance du FSO
Set fso = New Scripting.FileSystemObject
' Dupliquer le répertoire
If fso.FolderExists(strSourcePath) And (Not fso.FolderExists(strTargetPath)) Then
fso.CopyFolder strSourcePath, strTargetPath, True
' Variante :
' Set fld = fso.GetFolder(strSourcePath)
' fld.Copy strTargetPath, True
End If
' Libérer les objets
Set fld = Nothing
Set fso = Nothing
End Function
Déplacer un répertoire
' ---
' DEPLACER UN REPERTOIRE
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
'
' La fonction FolderMove() déplace un répertoire et ses sous-répertoires.
' ---
' Entrée : strOldPath <- Chemin actuel du répertoire à déplacer
' (ex. : "C:\Mes documents\test")
' strNewPath <- Chemin futur du répertoire
Function FolderMove(ByVal strOldPath As String, ByVal strNewPath As String)
Dim fso As Scripting.FileSystemObject
Dim fld As Scripting.Folder
' Créer une instance du FSO
Set fso = New Scripting.FileSystemObject
' Supprimer le répertoire
If fso.FolderExists(strOldPath) And Not fso.FolderExists(strNewPath) Then
fso.MoveFolder strOldPath, strNewPath
' Variante :
' Set fld = fso.GetFolder(strOldPath)
' fld.Move strNewPath
End If
' Libérer les objets
Set fld = Nothing
Set fso = Nothing
End Function
Supprimer un répertoire
' ---
' SUPPRIMER UN REPERTOIRE
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
'
' La fonction FolderDelete() supprime un répertoire et ses sous-répertoires.
' ---
' Entrée : strPath <- Chemin du répertoire à supprimer
' (ex. : "C:\Mes documents\test")
Function FolderDelete(ByVal strPath As String)
Dim fso As Scripting.FileSystemObject
Dim fld As Scripting.Folder
' Créer une instance du FSO
Set fso = New Scripting.FileSystemObject
' Supprimer le répertoire
If fso.FolderExists(strPath) Then
fso.DeleteFolder strPath
' Variante :
' Set fld = fso.GetFolder(strPath)
' fld.Delete
End If
' Libérer les objets
Set fld = Nothing
Set fso = Nothing
End Function
Ze MegaDemo :o) !
Voici une compil' qui fait met en oeuvre les listings précédents.
Aucune variable n'est utilisée pour simplifier le code, mais vous pouvez améliorer tout ça !
Exécutez le programme, et, à chaque fois que le programme affiche un message, profitez-en pour vérifier ses effets dans l'Explorateur Windows...
' ---
' MANIPULATION DES REPERTOIRES
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
Function FolderMegaDemo()
' Créer un sous-dossier dans 'Mes documents'
FolderAdd "C:\Mes documents", "SelfAccess01"
MsgBox "Sous-dossier [SelfAccess01] créé..."
' Créer un sous-sous-dossier (!)
FolderAdd "C:\Mes documents\SelfAccess01", "SelfAccess02"
MsgBox "Sous-sous-dossier [SelfAccess02] créé..."
' Dupliquer le sous-dossier
FolderCopy "C:\Mes documents\SelfAccess01", _
"C:\Mes documents\SelfAccess03"
MsgBox "Dossier [SelfAccess01] dupliqué sous le nom [SelfAccess03]..."
' Renommer la copie
FolderRename "C:\Mes documents\SelfAccess03", "SelfAccess04"
MsgBox "Dossier [SelfAccess03] renommé en [SelfAccess04]..."
' Déplacer la copie dans le dossier de départ
FolderMove "C:\Mes documents\SelfAccess04", _
"C:\Mes documents\SelfAccess01\SelfAccess04"
MsgBox "Dossier [SelfAccess04] déplacé dans [SelfAccess01]"
' Supprimer les 2 dossiers de test
FolderDelete "C:\Mes documents\SelfAccess01"
MsgBox "Dossier [SelfAccess01] supprimé..."
End Function

Dans cet article...
Article mis à jour le 07/02/2009
