Sélecteur de dossier

Dans un article précédent, il a été question d’afficher une boîte Fichier/Ouvrir pour permettre à l’utilisateur de sélectionner un ou plusieurs fichiers. Dans cette suite, on va voir comment affcher le sélecteur de dossier (une boîte qui permet de sélectionner un dossier/répertoire).

Le code

  1. Le code ci-dessous nécessite la bibliothèque Microsoft Office Object Library. Reportez-vous à l’article sur la boîte Fichier/Ouvrir pour voir comment l’activer dans votre projet.
  2. Recopiez le code qui suit dans un module standard de votre base de données.

Tester !

Pour tester tout ça, cliquez à l’intérieur du bloc de code (n’importe où), puis cliquez sur l’icône Exécuter Sub/UserForm, en haut de votre écran de VBE (l’icône qui représente triangle vert).

Il n’y a quasiment pas de nouveauté par rapport à l’article sur la boîte Fichier/Ouvrir. Juste ça :

  • Le sélecteur de dossier est créé par Application.FileDialog(), en transmettant cette fois le paramètre msoFileDialogFolderPicker.
  • Le paramètre AllowMultiSelect (qui permet de sélectionner plusieurs fichiers) ne s’applique pas à la sélection de dossiers. En résumé : on ne peut sélectionner qu’un seul dossier à la fois.

Vous aimerez aussi...

16 réponses

  1. Hervé Inisan dit :

    dumdum > Il doit manquer la référence « Microsoft Office Object Library » citée dans l’article.

  2. dumdum dit :

    bonjour grand maître Herve

    sous access2007, le compilateur bloque déjà sur:

    Dim fd As Office.FileDialog

    dans l’aide access2007:

    Dim fd As FileDialog

    mais même chose:

    erreur de compilation « type défini par utilisateur non défini »

    il me manque une référence ? une définition ?
    merci de vos lumières

    dumdum

  3. lukaslunt dit :

    J’ai pris le code de la banque d’image qui est a télécharger, mais le problème c’est qu’elle aussi n’arrive pas a afficher les images. Même avec l’article je comprend pas grand chose car j’avais essayer de changer le code et ça a plus marcher.

  4. Hervé Inisan dit :

    lukaslunt > Est-ce que le dossier affiché est le bon ?

    Sinon, si ça ne marche pas, quel est ton code ? Tu peux aussi consulter cet article qui donne des pistes complémentaires.

  5. lukaslunt dit :

    Salut à tous. J’ai créer le système pour importer des images depuis un dossier et après plusieurs galère j’ai réussi à ouvrir la boite de dialogue de mon dossier d’image. Mais il n’y a pas d’image comment faire pour les trouver ? Aidez moi

  6. Hervé Inisan dit :

    Djeli > A vue de nez, tout ça m’a l’air impeccable. 🙂

  7. Djeli dit :

    Bonjour,

    Au final je convertie toujours mes bases de données en fichier .exe pour la distribution.

    Avec un peu de bricolage j’ai résolu mon problème de la manière suivante:

    j’ai créer une tblChemin et son formulaire frmChemin avec un champ cheminbase et 2 boutons cmdchemin et cmdBackup

    j’ai ensuite copier le code de la fonction « boite de dialogue sélectionner un fichier » dans l’événement sur click du bouton de cmdChemin (j’ai modifier pour que le chemin soit sauvegarder dans le champ cheminBase de la table). j’ai ensuite copier dans l’événement click du bouton de cmdBackup le code de la fonction « backupDB » et j’ai remplacer le CurrentProjet.fullname par Me.cheminBase, et cela fonction.

    Puis-je avoir votre avis?

    Merci

  8. Hervé Inisan dit :

    Djeli > J’imagine que la base frontale est un .mde ou un .accde, plutôt qu’un .exe ?

    Sinon, si la base dorsale a été liée (d’une manière ou d’une autre à la frontale), il est possible d’obtenir son chemin automatiquement. Voir l’article Chemin de la base dorsale. Ça évitera à l’utilisateur d’aller la pointer manuellement.

  9. Djeli dit :

    Bonjour,

    Remplacer dans le code les CurrentProjet.fullName par le chemin de ma base dorsale pose le problème suivant:

    Lorsque je termine une application je la transforme en fichier exécutable(.exe) ce qui rend le code inaccessible pour renseigner le chemin de la base dorsale.

    alors je me demandais si il n’y aurait pas une autre manière de renseigner le chemin de la base dorsale sans accéder au code? par exemple utiliser le code de votre article « boîte de dialogue sélectionner un fichier » pour pointer vers la base dorsale, sauvegarder le chemin dans une table pour qu’il soit ensuite utilisé par le code sauvegarde datée.

    Cela permettrait à chaque utilisateur final de spécifier lui même le chemin qui point à sa base dorsale via un formulaire.

    Merci

  10. Hervé Inisan dit :

    Djeli > Oui, on peut sauvegarder la base scindée avec le même code. Il faut remplacer les CurrentProject.Fullname (qui donnent le chemin complet de la base contenant le code VBA, donc la frontale) par le chemin de la base dorsale (la partie tables + relations).

  11. Djeli dit :

    Bonjour,
    J’ai finalement réussie à mettre en place la sauvegardes datées, il me manquait seulement le module de la fonction stringformat(), Merci Mr Inisan

    Je souhaiterais maintenant savoir si cela fonction avec une base scindée si l’on considère que c’est seulement la base dorsale qui doit être sauvegarder ?

  12. Hervé Inisan dit :

    Djeli > Pour la fonction StringFormat() : il s’agit d’une fonction à recopier dans un module standard (elle figure ici).

    Pour ce qui est du verrouillage, cela peut effectivement se produire lorsqu’une base est en cours d’utilisation. Mais si l’application est scindée en deux (base frontale / base dorsale), la base dorsale peut être sauvegardée par la base frontale, puisqu’elle est indépendante (sauf bien sûr si d’autres utilisateurs travaillent dessus en simultané).

  13. Djeli dit :

    Bonjour,
    J’ai effectué la correction que vous m’aviez proposer, hélas même résultat :

    Erreur d’exécution 75
    Erreur d’accès chemin/fichier

    Quand je débogue,VBA met en surbrillance cet ligne de mon code :
    FileCopy strCurrent, strDest.

    Un article d’aide de Microsoft m’a appris que la formule FileCopy ne fonctionne pas quand le fichier à copier est ouvert; c’est pour cette raison que je n’utilise pas CurrentProjet.FullName. peut être à tord.

    j’ai essayer votre article « Sauvegardes datées » mais j’ai eu un problème avec la fonction StringFormat le même qu’exposer par PGDZ le 10 août dernier.
    J’ai suivis votre suggestion à plusieurs reprises mais cela n’a rien donnée. Alors j’ai changer pour la méthode sus exposée que je pensais simple et directe.

    Merci

  14. Hervé Inisan dit :

    Djeli > Quelques éléments de réponse :

    1. Pour chipoter 🙂 dans le :

    … seul strSource est une chaîne. strCurrent est un variant par défaut. Ce n’est pas fondamental ici, mais ça peut servir dans d’autres cas. Il vaut mieux écrire :

    2. Si la source est la base en cours, il n’est peut-être pas utile de la pointer par une boîte de dialogue. CurrentProject.FullName peut peut-être faire l’affaire.

    3. Le formulaire n’a sans doute pas besoin d’être basé sur une table (la table n’est pas utile, de fait). Il suffit d’avoir des champs indépendants, qui ne sont pas stockés ultérieurement.

    4. Quand tu dis « ça ne marche pas », qu’est-ce qui se produit : message d’erreur ? résultat incorrect ?

    5. L’article Sauvegardes datées peut aussi être utile. Il propose une solution longue, mais automatisée et avec messages de diagnostic.

  15. Djeli dit :

    Bonjour,
    j’ai un projet je souhaite automatiser la sauvegarde de mon fichier (dorsale)
    j’ai créer une table Sauvgarde avec 2 champs, Source et Destination. un formulaire basé sur cet table.
    sur mon formulaire j’ai :
    – bouton cmdBase pour sélection le fichier a copier (j’ai utilisé votre code) et cela fonctionne parfaitement
    – bouton cmdDestination pour sélectionner le dossier ou copier le fichier sélectionné (j’ai encore utiliser votre code)et cea fonctionne aussi.
    enfin une dernier bouton cmdbackup ou j’ai écris le code suivant:

    dim strCurrent, strDest as String
    strCurrent = Me.source
    strDest = Me.destination
    filecopy strCurrent, strDest

    Cela ne fonction pas comme.

    Auparavant j’avais utiliser le code ouvrir un fichier pour le 2 premier bouton (cmdBase et cmdDestination)mais je devais changer manuellement le nom du fichier de destination dans la tblSauvegarde pour que cela fonction.
    j’ai finalement opté pour le code sélection d’un dossier pour choisir le dossier ou effectuer ma sauvegarde, mais helas cela ne fonction pas, pouvez vous me dire ce qui manque a ce code.
    merci

Laisser un commentaire

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