VBA Access: sélection d'un répertoire

Signaler
Messages postés
22
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
16 juin 2005
-
Messages postés
63
Date d'inscription
mercredi 28 février 2001
Statut
Membre
Dernière intervention
25 novembre 2010
-
Je travaille sur une base de données Access 97, qui génère automatiquement des documents Word et Excel à partir des données de la base. J'ai un formulaire de paramétrage qui me permet de définir le répertoire dans lequel ces documents sont automatiquement enregistrés lors de leur création, ce répertoire étant mémorisé dans la table liée à ce formulaire. Actuellement, faute de DirListBox dans VBA, l'utilisateur doit taper intégralement le chemin complet du répertoire de stockage dans un champ texte, ce qui n'est guère élégant. J'ai vu dans la FAQ l'usage des API GetOpenFileName et GetSaveFileName, mais celles-ci obligent à sélectionner un fichier alors que je voudrais ne sélectionner qu'un répertoire. Je peux bien sûr sélectionner n'importe quel fichier puis extraire le répertoire parent de celui-ci mais ce n'est pas non plus très professsionnel. Y a-t-il une méthode équivalente pour afficher une fenêtre type explorateur pour sélectionner uniquement un répertoire ou y a-t-il moyen de jouer sur les constantes de structures de OPENFILENAME pour obtenir ce résultat ?
Merci.

12 réponses

Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Lut,

Dim MyDialog As FileDialog, MyFolder As Variant
Set MyDialog = Application.FileDialog(msoFileDialogFolderPicker)
With MyDialog
.AllowMultiSelect = False If .Show -1 Then MyFolder .SelectedItems(1)
End With
Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Messages postés
22
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
16 juin 2005
3
J'ai essayé mais Access ne connait pas FileDialog ("type défini par l'utilisateur non défini" + mot-clé inconnu dans l'Aide). Je vais chercher du côté de SHBrowseForFolder
Merci quand même!
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Re,
Vérifie que tu ai bien Microsoft Office XX.X Object Librairie de coché dans tes références
Menu Outils/Références .......

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Messages postés
22
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
16 juin 2005
3
J'ai bien Microsoft forms 2.0 Object Library coché...
J'ai trouvé la solution en utilisant l'API SHBrowseFolder, ça marche nickel. Merci.
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Ca marche comme ca c'est bien !!!
Pour l'histoire c'est Microsoft Office XX.X Object Librairie

et non pas Microsoft forms 2.0 Object Library

Qu'il faut coché

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Messages postés
22
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
16 juin 2005
3
oui,oui, c'est ma souris qui a fourché (MS Office 8.0 Object Library), mais je n'ai néanmoins pas FileDialog comme type d'objet.
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Alors déclares le en Object Dim MyDialog As Object

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Messages postés
1
Date d'inscription
jeudi 11 décembre 2003
Statut
Membre
Dernière intervention
24 mai 2006

Masterx Point Fr
Filedialog n'est disponible qu'à partir de la version 10 de office. (Office XP). Il est donc normal que  la variable ne soit pas reconnue avant. Dans cette conversation  dsomped mentionne l'utilisation de l'API
SHBrowseFolder.
Peux - tu m'en décrire un peu plus ? D'avance Merci.
Messages postés
22
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
16 juin 2005
3
Messages postés
63
Date d'inscription
mercredi 28 février 2001
Statut
Membre
Dernière intervention
25 novembre 2010

hWnd est bien un ActiveX CommonDialog ???
Si oui, chez moi ca fait une erreur d'execution '-2147352567 (80020009)'
Property is write-only

Que faire ?

Isa911
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Lut, voiçi un bout de code qui proveint de la toile



'Pour les essais
'Private Sub CommandButton1_Click()
'Dim FName As String
'    FName = BrowseFolder("Sélectionnez un dossier")
'    If FName = "" Then
'        MsgBox "Vous n'avez pas sélectionné de dossier !"
'    Else
'        MsgBox "Vous avez sélectionné: " & FName
'    End If



'End Sub





Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
Private Const BIF_RETURNFSANCESTORS As Long = &H8
Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000
Private Const BIF_BROWSEFORPRINTER As Long = &H2000
Private Const BIF_BROWSEINCLUDEFILES As Long = &H4000
Private Const MAX_PATH As Long = 260



Type BrowseInfo
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszINSTRUCTIONS As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type



Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Boolean
    hNameMappings As Long
    lpszProgressTitle As String
End Type
'********************************************************
'ce code est à mettre dans un module
'********************************************************
Declare Function SHGetPathFromIDListA Lib "shell32.dll" ( _
    ByVal pidl As Long, _
    ByVal pszBuffer As String) As Long



Declare Function SHBrowseForFolderA Lib "shell32.dll" ( _
    lpBrowseInfo As BrowseInfo) As Long





Function BrowseFolder(Optional Caption As String = "") As String



    Dim BrowseInfo As BrowseInfo
    Dim FolderName As String
    Dim ID As Long
    Dim Res As Long



    With BrowseInfo
        .hOwner = 0
        .pidlRoot = 0
        .pszDisplayName = String$(MAX_PATH, vbNullChar)
        .lpszINSTRUCTIONS = Caption
        .ulFlags = BIF_RETURNONLYFSDIRS
        .lpfn = 0
    End With



    FolderName = String$(MAX_PATH, vbNullChar)



    ID = SHBrowseForFolderA(BrowseInfo)



    If ID Then
        Res = SHGetPathFromIDListA(ID, FolderName)
        If Res Then
            BrowseFolder = Left$(FolderName, InStr(FolderName, _
                vbNullChar) - 1)
        End If
        End If



End Function





Cordialement, Jean-Paul  

______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Messages postés
63
Date d'inscription
mercredi 28 février 2001
Statut
Membre
Dernière intervention
25 novembre 2010

Ca marche !!!!
Heu, par contre, y a pas moyen de créer un dossier comme ca depuis cette fenetre ....????

Isa911