Obtenir les chemins des dossiers spéciaux Windows

Imaginez qu’en VBA vous ayez besoin de créer un fichier sur le bureau Windows de l’utilisateur. La première solution consiste à créer un fichier à cet emplacement : C:\Users\IDENTIFIANT\Desktop\monfichier.txt. Oui, mais :

  1. L’identifiant varie en fonction de l’utilisateur connecté.
  2. Les chemins ne sont pas les mêmes selon votre version de Windows. Par exemple, sur XP, le chemin serait plutôt : C:\Documents and Settings\IDENTIFIANT\Bureau\monfichier.txt.

Comment gérer tout ça proprement ?
(sujet proposé par Denis Scheidt, auteur de la bibliothèque libMAIL)

Le principe

Une chose est sûre : coder les chemins d’accès « en dur » est une mauvaise idée. Vous obtiendriez une application Access difficile à déplacer.

Par chance – à moins que ce soit fait exprès ? 😉 – les API Windows fournissent des fonctions pour obtenir le chemin d’un certain nombre de dossiers spéciaux comme « Documents » (ou « Mes documents » sur Windows XP), « Programmes » (ou « Program Files« ), « Bureau« , etc.

Le code

Voici un bout de code VBA à recopier dans un module standard de votre base Access.

Si vous avez Access 2000 ou plus

Le langage VBA d’Access permet de définir des énumérations à partir d’Access 2000. Ce qui peut simplifier votre saisie. Par conséquent, si vous avez Access 2000 ou plus, ajoutez ceci au code précédent (vous pouvez par exemple l’insérer après le dernier End Type) :

Tester sur Access 97

Vous pouvez la tester directement dans la fenêtre Exécution :

  1. Faites apparaître la fenêtre Exécution (CTRL + G).
  2. Tapez quelque chose comme :
    ? DossierSpecial(CSIDL_DESKTOP)
  3. Appuyez sur [Entrée] pour valider.
    Vous devriez obtenir le chemin de votre bureau Windows. Sur ma machine : C\:Users\Hervé\Desktop.

Bien sûr, vous pourriez aussi taper : ? DossierSpecial(16) pour obtenir le même résultat. Mais l’intérêt des constantes est d’éviter de mémoriser leurs équivalents numériques. 😉

Tester sur Access 2000 et plus

Si vous avez Access 2000 ou plus, et que vous avez recopié l’énumération Dossier dans votre base, vous pouvez aussi faire comme ceci :

  1. Faites apparaître la fenêtre Exécution (CTRL + G).
  2. Tapez quelque chose comme :
    ? DossierSpecial(Dossier.Bureau)
  3. Appuyez sur [Entrée] pour valider.

Vous profiterez de l’auto-complétion dès que vous aurez tapé « Dossier. »

Astuce
Gagnez encore 3 centièmes de secondes 🙂 en remplaçant  lngDossier As Long par lngDossier As Dossier dans le code plus haut. L’auto-complétion sera déclenchée dès la parenthèse ouvrante !
dossier_speciaux.jpg

En pratique

Maintenant, si en VBA vous devez créer un fichier dans le dossier « Documents » de l’utilisateur, il vous suffit de commencer par :

Vous aimerez aussi...

3 réponses

  1. Hervé Inisan dit :

    leporello > Dans ce cas, il ne s’agit plus d’un dossier spécial (au sens « Dossier standard défini par le système »). Donc il faut connaître son chemin, et écrire quelque chose comme :

    Si le chemin est susceptible de changer (et ça va être forcément le cas), une constante peut améliorer la maintenance :

  2. leporello dit :

    Bonjour,
    Remarquable aide pratique!
    Mais comment « adresser » un dossier sur un autre disque ex: D:Mes Documents?

  3. Tom Edgerry dit :

    Vous êtes génial … Comme toujours 😉

Laisser un commentaire

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