Création de dossiers imbriqués en VBA

Lors de votre utilisation d’Access (ou d’Excel d’ailleurs), vous aurez sans doute besoin de créer des dossiers sur votre disque dur. Vous connaissez la commande MkDir qui crée un dossier à partir d’un chemin. Par contre, cette commande ne va pas jusqu’à créer des sous-dossiers imbriqués. Dans cet article, nous allons régler ce problème…

Le principe

La commande MkDir crée un sous-dossier unique dans un dossier existant. Par exemple :

… crée un dossier Test sur mon bureau.

Mais l’instruction a deux inconvénients :

  1. Elle ne vérifie pas si le sous-dossier existe déjà. Si le dossier Test de l’exemple existe sur mon bureau, une erreur se produit.
  2. Elle ne crée pas de dossiers imbriqués à partir d’un chemin complet. Concrètement, si je n’ai pas de dossier Test 1 sur mon bureau, ceci échoue :

Deux petites procédures

Voici 2 petites procédures pour régler ces petits défauts (à recopier dans un module standard de votre base de données Access ou de votre classeur Excel) :

La procédure CreateFolder

Pas vraiment complexe, la procédure CreateFolder crée un dossier (unique) en appelant MkDir, mais elle vérifie en plus si le dossier existe déjà. Vous l’appelez comme MkDir, mais vous évitez le test, c’est déjà ça de pris ! 🙂

La procédure CreateFolders

La procédure CreateFolders (avec un « s ») est plus intéressante : vous lui passez un chemin complet, et elle crée l’ensemble des sous-dossiers nécessaires, lorsqu’ils n’existent pas. Vous pouvez l’utiliser de cette manière :

dossiers_imbriques.png

Un exemple concret : si vous avez besoin de créer des dossiers datés (année/mois), vous pouvez faire :

Vous aimerez aussi...

3 réponses

  1. Anacho dit :

    Merci beaucoup pour l’article. Très utile.
    Je m’en suis servi pour mon projet, sans oublié de citer mes sources 🙂

  2. lechenu dit :

    Bonjour,
    Super site, bravo et marci.

    Pour les joueurs, la même chose en récursif :

    Sub CreeRep(Chem)
    Dim Pos As Integer
    Pos = InStrRev(Chem, «  »)
    If (Pos > 3) Then CreeRep (Left(Chem, Pos – 1))
    If dir(Chem, vbDirectory) = «  » Then mkdir Chem
    End Sub

    CreeRep « C:\Users\Hervé\Desktop\Test 1\Test 2\Test 3 »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *