Toute l'actualité de [self-access.com] en direct sur votre ordinateur !  Vous êtes ici : Accueil » Visual Basic » Scripting Runtime » Dossiers (Exemples)Connexion
 


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 :

  1. Recopiez le code ci-dessous dans un module standard Access.
  2. Faites apparaître la fenêtre Exécution de Visual Basic Editor (Ctrl + G).
  3. 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 FSO
Set fso = New Scripting.FileSystemObject

' Obtenir le répertoire racine du disque C
' et afficher son chemin
Set fld = fso.Drives("C").RootFolder
Debug.Print "DOSSIER RACINE DU DISQUE C: ", fld.Path

' Créer directement une instance du répertoire C:\Mes documents
Set fld = fso.GetFolder("C:\Mes documents")
Debug.Print "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.Print "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.Print "DOSSIER PARENT DE 'MES DOCUMENTS': ", fld2.Path
End If

' Libérer les objets
Set fld2 = Nothing
Set fld = Nothing
Set fso = Nothing End Function

Détail du listing

Set fso = New Scripting.FileSystemObject
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.
 
Set fld = fso.Drives("C").RootFolder
Debug
.Print "DOSSIER RACINE DU DISQUE C: ", fld.Path
Cette première méthode montre comment obtenir le dossier racine (RootFolder) du disque C. On affiche ensuite son chemin (Path).
 
Set fld = fso.GetFolder("C:\Mes documents")
Debug.Print "TAILLE DU DOSSIER 'MES DOCUMENTS': ", fld.Size
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.
 
Set fld2 = fld.SubFolders("Access")
Debug.Print "TAILLE DU SOUS-DOSSIER ACCESS: ", fld2.Size
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.
 
If Not fld.IsRootFolder Then
    Set fld2
= fld.ParentFolder
    Debug
.Print "DOSSIER PARENT DE 'MES DOCUMENTS': ", fld2.Path
End If
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).

Vers le haut

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.

Vers le haut

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

Vers le haut

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 FSO
Set fso = New Scripting.FileSystemObject

' Renommer le répertoire
On 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 objets
Set fld = Nothing
Set fso = Nothing
End Function

Vers le haut

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

Vers le haut

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

Vers le haut

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

Vers le haut

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

Vers le haut

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

Vers le haut


Mes livres sur Access...
[cliquez pour plus d'infos]





Hit-Parade 
 
[ Copyright 1997-2017 hervé inisan, self-access.com Reproduction interdite ]