Comment créer des dossiers et sous dossiers en VBA
Modèles prêt à l'emploi, Projets Excel-VBA complets
Accueil » Tutoriels VBA » Comment créer des dossiers et sous dossiers en VBA
Gagner du temps en laissant votre code VBA créer des dossiers et sous dossiers pour vous. Un classement standard et respecté pourra faire économiser un grand nombre d’aller-retours à votre équipe et vous au quotidien. Aujourd’hui Numamax vous propose 3 méthodes pour composer un système de création de dossiers selon vos besoins.
Pourquoi préférer laisser votre code créer des dossiers et sous dossiers ?
Nous sommes amené à stocker notre travail quotidiennement pour consultation par nos collègues ou sauvegarde. Lorsque la fréquence de création de vos dossiers est régulière il devient intéressant d’utiliser une des trois méthodes ci-dessous afin de “graver” une bonne fois pour toute votre classification et la confier à votre code VBA. De cette façon, les chemins de dossiers ne dépendent plus des méthodes de chaque utilisateur, cette standardisation vous fera gagner temps et qualité de travail.
La standardisation pourra même vous permettre d’automatiser d’autres tâches comme vous saurez exactement comme s’appelleront vos dossiers !
Les Méthodes pour créer des dossiers et sous dossiers en VBA fonctionnant sur Excel Access Word Outlook avec Exemples
Méthode #1 : Fonction VBA MkDir
Méthode #2 : CreateFolder de l’objet Scripting.FileSystemObject
Méthode #3 : Fonction personnalisée "CreerMesDossierSousDossiers"
Difficulté
1/5
1.5/5
3/5
POINTS FORTS
- Ultra simple, fonction déjà implémentée dans VBA
- Pas de nouvelle référence de bibliothèque à rajouter
- Simplicité pour créer en plusieurs lignes des chemins de dossiers et sous dossiers
- Utilisation de l'objet objet "Scripting.FileSystemObject"
- Permet de créer directement des sous-dossiers dans des dossiers qui n'existent pas encore
- Permet une gestion des erreurs personalisées
- Fonctionne dans des emplacements réseaux
POINTS FAIBLES
- Impossibilité de créer en une seule fois un sous dossier dans un dossier qui n'existe pas
- Nécessite de définir la référence à la bibliothèque "Microsoft Scripting Runtime"
- Nécessite de paramétrer une fonction public avant d'appeler la fonction dans votre code
Sub Exemple1()
MkDir ("C:\Users\Numamax_User\Desktop\Numamax")
End Sub
Sub Exemple2()
'Si vous voulez créer un sous-dossier (ici Numamax) dans un dossier qui n'existe pas (ici DossierQuiExistePas)
'Alors il faut s'y reprendre en plusieurs ligne
MkDir ("C:\Users\Numamax_User\Desktop\DossierQuiExistePas")
MkDir ("C:\Users\Numamax_User\Desktop\DossierQuiExistePas\Numamax")
End Sub
Sub Exemple1() Dim fs As New Scripting.FileSystemObject 'Ne pas oublier la référence à la bibliothèque "Microsoft Scripting Runtime"? fs.CreateFolder "C:\Users\Numamax_User\Desktop\Numamax" Set fs = Nothing 'On vide la mémoire End Sub
Sub Exemple2() 'Si vous voulez créer un sous-dossier (ici Numamax) dans un dossier qui n'existe pas (ici DossierQuiExistePas) 'Alors il faut s'y reprendre en plusieurs ligne Dim fs As New Scripting.FileSystemObject 'Ne pas oublier la référence à la bibliothèque "Microsoft Scripting Runtime"? fs.CreateFolder "C:\Users\Numamax_User\Desktop\DossierQuiExistePas" fs.CreateFolder "C:\Users\Numamax_User\Desktop\DossierQuiExistePas\Numamax" Set fs = Nothing 'On vide la mémoire End Sub
Sub ExempleFonctionCreerMesDossierSousDossiers()
' Grace à cette fonction vous pouvez même créer des sous dossiers même si le dossier n'existe pas
CreerMesDossierSousDossiers ("C:\Users\Numamax_User\Desktop\DossierQuiExistePas\Numamax") 'avec ou sans l'antislash à la fin
End Sub
Public Function CreerMesDossierSousDossiers(Chemin As String) 'Fonction qui prend comme input le chemin de dossier(s) à créer
On Error GoTo CreerMesDossierSousDossiersErreur
Dim MonSeparateurSysteme As String
MonSeparateurSysteme = "\" 'l'antislash, on évite l'appel à "Application.PathSeparator" qui ne fonctionne qu'avec l'application Excel
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FolderExists(Chemin) = False Then 'On teste si le chemin n'existe pas déjà, sinon il n'y a pas besoin de le créer et on s'évite une erreur
'MsgBox "le chemin n'existe pas"
If Right(Chemin, 1) = "\" Then Chemin = Left(Chemin, Len(Chemin) - 1) 'Pour s'éviter une autre erreur, on retire le backslash final si présent
If Left(Chemin, 2) = "\\" Then 'vérificacion si chemin local ou réseau
CheminReseau = True
Else
CheminReseau = False
End If
If CheminReseau = False Then 'On décompose le chemin
PartiesDeChemin = Split(Chemin, "\")
CheminPartielOK = ""
PremierDossier = LBound(PartiesDeChemin)
Else
PartiesDeChemin = Split(Replace(Chemin, "\\", ""), "\")
CheminPartielOK = ""
PremierDossier = LBound(PartiesDeChemin) + 1
End If
For PartieDeChemin = PremierDossier To UBound(PartiesDeChemin) 'tests et créations de (sous)dossiers
For CheminPartiel = LBound(PartiesDeChemin) To PartieDeChemin
If CheminReseau = False Then
CheminPartielOK = CheminPartielOK & PartiesDeChemin(CheminPartiel) & "\"
Else
CheminPartielOK = CheminPartielOK & PartiesDeChemin(CheminPartiel) & "\"
End If
If CheminPartiel = PartieDeChemin Then
If CheminReseau = False Then
If fs.FolderExists(CheminPartielOK) = False Then
fs.CreateFolder CheminPartielOK
End If
Else
If Right(CheminPartielOK, 1) = "\" Then _
CheminPartielOK = Left(CheminPartielOK, Len(CheminPartielOK) - 1)
If Left(CheminPartielOK, 2) <> "\\" Then _
CheminPartielOK = "\\" & CheminPartielOK
If fs.FolderExists(CheminPartielOK) = False Then
fs.CreateFolder CheminPartielOK
End If
End If
End If
Next CheminPartiel
CheminPartielOK = ""
Next PartieDeChemin
Else
MsgBox "Le chemin rentré existe déjà : rien n'a été fait"
CreerMesDossierSousDossiers = True
Set fs = Nothing 'On vide la mémoire
Exit Function
End If
CreerMesDossierSousDossiers = True 'Réussite de la fonction
MsgBox "Le chemin rentré a bien été créé : " & Chemin
Set fs = Nothing 'On vide la mémoire
Exit Function 'Fin de la fonction
CreerMesDossierSousDossiersErreur:
CreerMesDossierSousDossiers = False 'Echec de la fonction
End Function
Après ce comparatif vous pourrez trouver un éventail de solutions de la plus rapide à mettre en place à la plus robuste. Cependant il est important de soulever certains points :
- Premièrement une fonction personnalisée (comme celle de cette article) par vos soins et adapter à votre activité sera toujours plus robuste. En effet vous pourrez progressivement adapter la gestion des erreurs à votre équipe.
- Enfin, dans le cas où vous partirez sur la fonction personnalisée il est à noter qu’il peut être un peu répétitif de déclarer la fonction dans chaque applicatif où vous l’utilisez (Excel Access Word Outlook).
[kkratings]