[Excel] GetOpenFilename FileFilter=répertoire
Résolu
Raph04
Messages postés
182
Statut
Membre
-
Raph04 Messages postés 182 Statut Membre -
Raph04 Messages postés 182 Statut Membre -
Bonjour,
Bonjour,
Je cherche a récupérer le chemin d'accès à un répertoire grâce à la fonction :
chemin = Application.GetOpenFilename
Seulement comme je cherche à avoir le chemin d'un répertoire (dossier), quand je le selectionne dans ma fenêtre "parcourir" et que je click sur le bouton ouvrir, il m'ouvre le dossier dans ma fenêtre parcourir au lieu de renvoyer le chemin dans ma variable.
Comment puis-je palier a ce problème ?
J'utiliserai bien l'argument "FileFilter", mais je sais pas quel type "d'extension" mettre :
chemin = Application.GetOpenFilename("Répertoire (*.???), *.???")
Merci d'avance ;-)
Raph
Bonjour,
Je cherche a récupérer le chemin d'accès à un répertoire grâce à la fonction :
chemin = Application.GetOpenFilename
Seulement comme je cherche à avoir le chemin d'un répertoire (dossier), quand je le selectionne dans ma fenêtre "parcourir" et que je click sur le bouton ouvrir, il m'ouvre le dossier dans ma fenêtre parcourir au lieu de renvoyer le chemin dans ma variable.
Comment puis-je palier a ce problème ?
J'utiliserai bien l'argument "FileFilter", mais je sais pas quel type "d'extension" mettre :
chemin = Application.GetOpenFilename("Répertoire (*.???), *.???")
Merci d'avance ;-)
Raph
2 réponses
Bonsoir,
perso j'utilisais Getdirectory() :
en déclaration :
en function() :
En appel dans une procédure quelconque :
Il y a peut-être plus simple du côté du FileSystemObject mais Getdirectory() me suffisait.
Cordialement
perso j'utilisais Getdirectory() :
en déclaration :
Option Explicit
Public dossier
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
'32-bit API declarations
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
en function() :
Function GetDirectory(Optional Msg) As String
Dim bInfo As BROWSEINFO
Dim path As String
Dim r As Long, x As Long, pos As Integer
bInfo.pidlRoot = 0&
If IsMissing(Msg) Then
bInfo.lpszTitle = "Choisissez un dossier de destination pour les sauvegardes."
Else
bInfo.lpszTitle = Msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal path)
If r Then
pos = InStr(path, Chr$(0))
GetDirectory = Left(path, pos - 1)
Else
GetDirectory = ""
End If
End Function
En appel dans une procédure quelconque :
dossier = GetDirectory("choisissez le dossier à traiter en Post-Publication")
If dossier <> "" Then .......
Il y a peut-être plus simple du côté du FileSystemObject mais Getdirectory() me suffisait.
Cordialement
Merci.
J'avais finalement utilisé ceci :
Utilisant comme module :
J'avais finalement utilisé ceci :
Public Sub Parcourir_Dossier()
Dim chemin As String
Dim TempDrive As String
Dim ThePath As String
Dim UserDir As String
Dim UserDrive As String
UserDrive = Left(CurDir, 1) 'On Mémorise les Paramètres du User
UserDir = CurDir ' idem
chemin = ThisWorkbook.path
TempDrive = Left(chemin, 1) 'le lecteur mappé sur un serveur réseau
ThePath = chemin 'à ajuster au répertoire contenant tes classeurs
ChDrive TempDrive
ChDir ThePath
'Recupération du chemin et nom fichier d'extraction
chemin = Application.GetOpenFilename
Range("C17").Value = chemin
ChDrive UserDrive 'On remet les paramètres du User
ChDir UserDir 'idem
End Sub
Utilisant comme module :
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const BFFM_INITIALIZED = 1
Private Const WM_USER = &H400
Private Const BFFM_SETSELECTIONA = (WM_USER + 102)
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, _
ByVal lpBuffer As String) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _
ByVal lpString2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SHGetIDListFromPath Lib "SHELL32.DLL" Alias "#162" (ByVal szPath As String) As Long
Private Type BrowseInfo
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
Function adr(n As Long) As Long
adr = n
End Function
Public Function BrowseCallbackProc(ByVal hWnd As Long, _
ByVal uMsg As Long, _
ByVal lParam As Long, _
ByVal lpData As Long) As Long
If uMsg = BFFM_INITIALIZED Then
'Quand la boite est ouverte actualise le chemin présélectionné
Call SendMessage(hWnd, BFFM_SETSELECTIONA, False, ByVal lpData)
End If
End Function
Public Function SelectFolder(Titre As String, Handle As Long, Racine As String) As String
Dim lpIDList As Long
Dim strBuffer As String
Dim strTitre As String
Dim tBrowseInfo As BrowseInfo
strTitre = Titre
With tBrowseInfo
.hWndOwner = Handle
.lpszTitle = lstrcat(strTitre, "")
.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
.lpfnCallback = adr(AddressOf BrowseCallbackProc)
.lParam = SHGetIDListFromPath(StrConv(Racine, vbUnicode))
End With
lpIDList = SHBrowseForFolder(tBrowseInfo)
If (lpIDList) Then
strBuffer = String(260, vbNullChar)
SHGetPathFromIDList lpIDList, strBuffer
SelectFolder = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
End If
End Function
Public Sub Repertoire()
Range("C17").Value = SelectFolder("Choisir le répertoire par défaut", 0, ThisWorkbook.path)
End Sub