par , 24/04/2021 à 09h45 (3920 Affichages)
Pour créer un nouveau dossier avec VBA, nous pouvons utiliser l'instruction MkDir
Ainsi, si nous souhaitons créer un sous-dossier nommé "Archive" depuis le dossier où se trouve le classeur contenant le code VBA, nous écrirons
MkDir ThisWorkbook.path & "\" & "Archive"
Si le sous-dossier existe déjà, le VBA renverra une erreur. Il y a donc lieu de vérifier au préalable son existence et pour cela nous utiliserons la fonction Dir
Le code ci-dessous, créera le sous-répertoire Archive si celui n'existe pas
1 2 3 4
| Const SubFolder As String = "Archive"
Dim FullPath As String
FullPath = ThisWorkbook.Path & "\" & SubFolder
If Dir(FullPath, vbDirectory) = "" Then MkDir FullPath |
Si nous souhaitons créer plusieurs sous-répertoires à partir du répertoire racine (ThisWorkbook.Path) comme par exemple Archive\Compta\2021 et que les deux premiers sous-répertoires (Archive et Compta) ne sont pas déjà créé, l'instruction ci-dessous renverra une erreur
MkDir ThisWorkbook.path & "\Archive\Compta\2021"
L'instruction MkDir permet donc de créer un répertoire mais pas plusieurs en une seule instruction
Pour cela, nous devrons passer par une procédure VBA qui se chargera de créer l'ensemble des sous-répertoires
Code de la procédure CreateSubFolder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Sub CreateSubFolder(FullPath As String, RootFolder As String, Optional Delimiter As String = "\")
' Création de sous-répertoire d'un réperoire racine (maximum 255)
' Philippe Tulliez www.magicoffice.be
' Arguments
' FullPath Nom du ou des répertoires à créer. Il y a lieu de séparés par un délimiteur s'il y a plus d'un répertoire
' RootFolder Chemin complet du répertoire racine
' [Delimiter] caractère qui délimite les noms (\ par défaut)
' Déclaration
Dim PathName As String
Dim Tbl As Variant
Dim Elem As Byte
Tbl = Split(FullPath, Delimiter)
PathName = RootFolder
For Elem = 0 To UBound(Tbl)
PathName = PathName & Delimiter & Tbl(Elem)
If Dir(PathName, vbDirectory) = vbNullString Then MkDir PathName
Next
End Sub |
Exemple de son utilisation
1 2 3 4 5
| Sub TestCreateSubFolder()
Dim SubFolder As String
SubFolder = "\Archive\Compta\2020"
CreateSubFolder SubFolder, ThisWorkbook.path
End Sub |