OVH Cloud OVH Cloud

fonction GetDirectory

7 réponses
Avatar
Sylvain
Bonjour,

J'utilise la fonction GetDirectory() ci dessous r=E9cuper=E9e=20
sur excelabo pour afficher un fenetre de choix d'un=20
r=E9pertoire.

Comment faire pour pr=E9positionner la s=E9lection sur un sous=20
r=E9pertoire au lieu de la position par d=E9fault qui est=20
le "poste de travail"

Merci par avance
Sylvain

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
'declarations API 32-bit
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal=20
pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As=20
Long

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 =3D 0&
If IsMissing(MSG) Then
bInfo.lpszTitle =3D "Choisissez le dossier de stockage=20
du document :"
Else
bInfo.lpszTitle =3D MSG
End If
bInfo.ulFlags =3D &H1
X =3D SHBrowseForFolder(bInfo)
path =3D Space$(512)
r =3D SHGetPathFromIDList(ByVal X, ByVal path)
If r Then
pos =3D InStr(path, Chr$(0))
GetDirectory =3D Left(path, pos - 1)
Dossier =3D GetDirectory
Else
GetDirectory =3D ""
Dossier =3D ""
End If
End Function

7 réponses

Avatar
Michel HOLDERITH
Salut,
A mon avis t'as plus simple :
essai ca dans un module :

Sub ouvr()
Dim FichOuv As Variant
'ici tu indiques le chemin a suivre (il peut y en avoir plusieurs avec des
conditions if....then...else...end if)
ChDir "C:WINDOWSDESKTOP"
ChDrive "C"
' ****************************************************************
' Set up list of file filters
'ici tu peux mettre les extensions des fichiers a trouver
Filt = "Fichier Mic (*.mic),*.mic,"
' ****************************************************************

' Set the dialog box caption
Title = "Selectionnez un Fichier (Explan) a Importer : "
' Get the file name
Filename = Application.GetOpenFilename(FileFilter:=Filt, Title:=Title)
' Exit if dialog box canceled
If Filename = False Then
'si tu clicks sur cancel/annule tu peux egalement un message du style pas de
fichier selectionne
Exit Sub
End If
End Sub

@+
Michel.

"Sylvain" wrote in message
news:124c01c3e010$8aaa6ff0$
Bonjour,

J'utilise la fonction GetDirectory() ci dessous récuperée
sur excelabo pour afficher un fenetre de choix d'un
répertoire.

Comment faire pour prépositionner la sélection sur un sous
répertoire au lieu de la position par défault qui est
le "poste de travail"

Merci par avance
Sylvain

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
'declarations API 32-bit
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

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 le dossier de stockage
du document :"
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)
Dossier = GetDirectory
Else
GetDirectory = ""
Dossier = ""
End If
End Function
Avatar
michdenis
Bonjour Sylvain,

Tu peux essayer ceci :


'affiche une fenêtre type explorateur à partir de laquelle il est possible d'afficher seulement soit le répertoire désiré et
ses sous-répertoires sans les fichiers ou soit un répertoire désiré, ses sous-répertoires et leurs fichiers. Cela dépend de
la ligne de code que l'on active dans la fonction ChoixDossier(chemin). Pour ce faire, il s'agit de placer une apostrophe
devant la ligne de code pour la désactiver ou d'enlever l'apostrophe pour l'activer.

'----------------------------------------
Function ChoixDossier(Chemin)
Dim objShell, objFolder
MSG = "Voici votre répertoire:"
Set objShell = CreateObject("Shell.Application")

'Cette ligne affiche répertoire et fichiers du répertoire.
'Set objFolder = objShell.BrowseForFolder(&H0&, MSG, &H4000, Chemin)

'Cette Ligne = pour afficher seulement les répertoires
Set objFolder = objShell.BrowseForFolder(&H0&, MSG, &H1&, Chemin)
On Error Resume Next
Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).path & ""
ChoixDossier = Chemin

End Function
'-----------------------------------------


'Et pour ouvrir le Browser ayant comme répertoire racine "Mes documents"
'on peut utiliser la procédure suivante .

'------------------------------------------
Sub OuvrirRépertoire()

Dim CheminEtFichier As String
CheminEtFichier = ChoixDossier("c:Mes documents")

End Sub
'------------------------------------------


Salutations!







"Sylvain" a écrit dans le message de news:124c01c3e010$8aaa6ff0$
Bonjour,

J'utilise la fonction GetDirectory() ci dessous récuperée
sur excelabo pour afficher un fenetre de choix d'un
répertoire.

Comment faire pour prépositionner la sélection sur un sous
répertoire au lieu de la position par défault qui est
le "poste de travail"

Merci par avance
Sylvain

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
'declarations API 32-bit
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

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 le dossier de stockage
du document :"
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)
Dossier = GetDirectory
Else
GetDirectory = ""
Dossier = ""
End If
End Function
Avatar
Sylvain
Merci pour cette macro.

Le problème est que je cherche à récupérer un nom de
dossier, même si celui-ci est vide (donc pas de fichier à
sélectionner)

Amicalement,
Sylvain
-----Message d'origine-----
Salut,
A mon avis t'as plus simple :
essai ca dans un module :

Sub ouvr()
Dim FichOuv As Variant
'ici tu indiques le chemin a suivre (il peut y en avoir
plusieurs avec des

conditions if....then...else...end if)
ChDir "C:WINDOWSDESKTOP"
ChDrive "C"
'
***********************************************************

*****
' Set up list of file filters
'ici tu peux mettre les extensions des fichiers a trouver
Filt = "Fichier Mic (*.mic),*.mic,"
'
***********************************************************

*****

' Set the dialog box caption
Title = "Selectionnez un Fichier (Explan) a
Importer : "

' Get the file name
Filename = Application.GetOpenFilename
(FileFilter:=Filt, Title:=Title)

' Exit if dialog box canceled
If Filename = False Then
'si tu clicks sur cancel/annule tu peux egalement un
message du style pas de

fichier selectionne
Exit Sub
End If
End Sub

@+
Michel.

"Sylvain" wrote in
message

news:124c01c3e010$8aaa6ff0$
Bonjour,

J'utilise la fonction GetDirectory() ci dessous récuperée
sur excelabo pour afficher un fenetre de choix d'un
répertoire.

Comment faire pour prépositionner la sélection sur un sous
répertoire au lieu de la position par défault qui est
le "poste de travail"

Merci par avance
Sylvain

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
'declarations API 32-bit
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

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 le dossier de stockage
du document :"
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)
Dossier = GetDirectory
Else
GetDirectory = ""
Dossier = ""
End If
End Function


.



Avatar
Sylvain
Merci beaucoup pour cette fonction.

Peut-on changer un paramétre pour pouvoir remonter plus
dans l'arborescence que le chemin spécifié ?

Merci
Sylvain
-----Message d'origine-----
Bonjour Sylvain,

Tu peux essayer ceci :


'affiche une fenêtre type explorateur à partir de
laquelle il est possible d'afficher seulement soit le

répertoire désiré et
ses sous-répertoires sans les fichiers ou soit un
répertoire désiré, ses sous-répertoires et leurs fichiers.

Cela dépend de
la ligne de code que l'on active dans la fonction
ChoixDossier(chemin). Pour ce faire, il s'agit de placer

une apostrophe
devant la ligne de code pour la désactiver ou d'enlever
l'apostrophe pour l'activer.


'----------------------------------------
Function ChoixDossier(Chemin)
Dim objShell, objFolder
MSG = "Voici votre répertoire:"
Set objShell = CreateObject("Shell.Application")

'Cette ligne affiche répertoire et fichiers du
répertoire.

'Set objFolder = objShell.BrowseForFolder(&H0&, MSG,
&H4000, Chemin)


'Cette Ligne = pour afficher seulement les répertoires
Set objFolder = objShell.BrowseForFolder(&H0&, MSG,
&H1&, Chemin)

On Error Resume Next
Chemin = objFolder.ParentFolder.ParseName
(objFolder.Title).path & ""

ChoixDossier = Chemin

End Function
'-----------------------------------------


'Et pour ouvrir le Browser ayant comme répertoire
racine "Mes documents"

'on peut utiliser la procédure suivante .

'------------------------------------------
Sub OuvrirRépertoire()

Dim CheminEtFichier As String
CheminEtFichier = ChoixDossier("c:Mes documents")

End Sub
'------------------------------------------


Salutations!







"Sylvain" a écrit
dans le message de news:124c01c3e010$8aaa6ff0

$
Bonjour,

J'utilise la fonction GetDirectory() ci dessous récuperée
sur excelabo pour afficher un fenetre de choix d'un
répertoire.

Comment faire pour prépositionner la sélection sur un sous
répertoire au lieu de la position par défault qui est
le "poste de travail"

Merci par avance
Sylvain

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
'declarations API 32-bit
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

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 le dossier de stockage
du document :"
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)
Dossier = GetDirectory
Else
GetDirectory = ""
Dossier = ""
End If
End Function


.



Avatar
michdenis
Bonjour Sylvain,


Voici une façon de faire en provenance de Microsoft, modifié par Denis Pasquier et que j'ai moi-même modifier un tantinet
pour obtenir ce que tu désires....

Dans la procédure Test() , tu retrouves cette ligne de code : Tu dois définir ces 2 paramètres :

A ) Le répertoire sur lequel tu désires ouvrir "L'explorateur" : "C:excel"

B ) Tu peux choisir un type de fichier que tu veux voir s'afficher : ".xls" , pour pouvoir les visionner tous : "*.*"

Fichier_a_ouvrir = SelectAFile("C:excel", "*.xls")



à copier dans un module Standard, La section API doit se retrouver dans le haut du module !
************************************
Option Explicit
'Microsoft Developer Support.
'adaptation Denis Pasquier
'Code Example

'Ouverture d'un type de fichier
'--------------------------------
Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

'---------------------------------
Private Function SelectAFile(Rep As String, Optional filtre As String = "*.*") As String
Dim OpenFile As OPENFILENAME, lReturn As Long, sFilter As String
OpenFile.lStructSize = Len(OpenFile)
sFilter = "Tous les fichiers (" & filtre & ")" & Chr(0) & filtre & Chr(0)
With OpenFile
.lpstrFilter = sFilter
.nFilterIndex = 1
.lpstrFile = String(257, 0)
.nMaxFile = Len(OpenFile.lpstrFile) - 1
.lpstrFileTitle = OpenFile.lpstrFile
.nMaxFileTitle = OpenFile.nMaxFile
.lpstrInitialDir = Rep
.lpstrTitle = "Ouvrir"
.flags = 0
End With
lReturn = GetOpenFileName(OpenFile)
If lReturn = 0 Then
SelectAFile = "erann"
Else
SelectAFile = Trim(Left(OpenFile.lpstrFile, _
InStr(1, OpenFile.lpstrFile, Chr(0)) - 1))
End If
End Function

'---------------------------------
Sub test()
'Denis pasquier

Dim Fichier_a_ouvrir As Variant
Fichier_a_ouvrir = SelectAFile("C:excel", "*.xls")
If Fichier_a_ouvrir <> "erann" Then
MsgBox Fichier_a_ouvrir

End If
End Sub
'---------------------------------
************************************


Salutations!





"Sylvain" a écrit dans le message de news:1b4101c3e01f$317ab840$
Merci beaucoup pour cette fonction.

Peut-on changer un paramétre pour pouvoir remonter plus
dans l'arborescence que le chemin spécifié ?

Merci
Sylvain
-----Message d'origine-----
Bonjour Sylvain,

Tu peux essayer ceci :


'affiche une fenêtre type explorateur à partir de
laquelle il est possible d'afficher seulement soit le

répertoire désiré et
ses sous-répertoires sans les fichiers ou soit un
répertoire désiré, ses sous-répertoires et leurs fichiers.

Cela dépend de
la ligne de code que l'on active dans la fonction
ChoixDossier(chemin). Pour ce faire, il s'agit de placer

une apostrophe
devant la ligne de code pour la désactiver ou d'enlever
l'apostrophe pour l'activer.


'----------------------------------------
Function ChoixDossier(Chemin)
Dim objShell, objFolder
MSG = "Voici votre répertoire:"
Set objShell = CreateObject("Shell.Application")

'Cette ligne affiche répertoire et fichiers du
répertoire.

'Set objFolder = objShell.BrowseForFolder(&H0&, MSG,
&H4000, Chemin)


'Cette Ligne = pour afficher seulement les répertoires
Set objFolder = objShell.BrowseForFolder(&H0&, MSG,
&H1&, Chemin)

On Error Resume Next
Chemin = objFolder.ParentFolder.ParseName
(objFolder.Title).path & ""

ChoixDossier = Chemin

End Function
'-----------------------------------------


'Et pour ouvrir le Browser ayant comme répertoire
racine "Mes documents"

'on peut utiliser la procédure suivante .

'------------------------------------------
Sub OuvrirRépertoire()

Dim CheminEtFichier As String
CheminEtFichier = ChoixDossier("c:Mes documents")

End Sub
'------------------------------------------


Salutations!







"Sylvain" a écrit
dans le message de news:124c01c3e010$8aaa6ff0

$
Bonjour,

J'utilise la fonction GetDirectory() ci dessous récuperée
sur excelabo pour afficher un fenetre de choix d'un
répertoire.

Comment faire pour prépositionner la sélection sur un sous
répertoire au lieu de la position par défault qui est
le "poste de travail"

Merci par avance
Sylvain

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
'declarations API 32-bit
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

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 le dossier de stockage
du document :"
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)
Dossier = GetDirectory
Else
GetDirectory = ""
Dossier = ""
End If
End Function


.



Avatar
Sylvain
Merci pour cette fonction.
Y-a t-il un paramétre à changer pour pouvoir selectionner
un repertoire au lieu du nom de fichier ?

Merci
Sylvian
-----Message d'origine-----
Bonjour Sylvain,


Voici une façon de faire en provenance de Microsoft,
modifié par Denis Pasquier et que j'ai moi-même modifier

un tantinet
pour obtenir ce que tu désires....

Dans la procédure Test() , tu retrouves cette ligne de
code : Tu dois définir ces 2 paramètres :


A ) Le répertoire sur lequel tu désires
ouvrir "L'explorateur" : "C:excel"


B ) Tu peux choisir un type de fichier que tu veux voir
s'afficher : ".xls" , pour pouvoir les visionner

tous : "*.*"

Fichier_a_ouvrir = SelectAFile("C:excel", "*.xls")



à copier dans un module Standard, La section API doit se
retrouver dans le haut du module !

************************************
Option Explicit
'Microsoft Developer Support.
'adaptation Denis Pasquier
'Code Example

'Ouverture d'un type de fichier
'--------------------------------
Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As
OPENFILENAME) As Long


Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

'---------------------------------
Private Function SelectAFile(Rep As String, Optional
filtre As String = "*.*") As String

Dim OpenFile As OPENFILENAME, lReturn As Long, sFilter As
String

OpenFile.lStructSize = Len(OpenFile)
sFilter = "Tous les fichiers (" & filtre & ")" & Chr(0)
& filtre & Chr(0)

With OpenFile
.lpstrFilter = sFilter
.nFilterIndex = 1
.lpstrFile = String(257, 0)
.nMaxFile = Len(OpenFile.lpstrFile) - 1
.lpstrFileTitle = OpenFile.lpstrFile
.nMaxFileTitle = OpenFile.nMaxFile
.lpstrInitialDir = Rep
.lpstrTitle = "Ouvrir"
.flags = 0
End With
lReturn = GetOpenFileName(OpenFile)
If lReturn = 0 Then
SelectAFile = "erann"
Else
SelectAFile = Trim(Left(OpenFile.lpstrFile, _
InStr(1, OpenFile.lpstrFile, Chr(0)) - 1))
End If
End Function

'---------------------------------
Sub test()
'Denis pasquier

Dim Fichier_a_ouvrir As Variant
Fichier_a_ouvrir = SelectAFile("C:excel", "*.xls")
If Fichier_a_ouvrir <> "erann" Then
MsgBox Fichier_a_ouvrir

End If
End Sub
'---------------------------------
************************************


Salutations!





"Sylvain" a écrit
dans le message de news:1b4101c3e01f$317ab840

$
Merci beaucoup pour cette fonction.

Peut-on changer un paramétre pour pouvoir remonter plus
dans l'arborescence que le chemin spécifié ?

Merci
Sylvain
-----Message d'origine-----
Bonjour Sylvain,

Tu peux essayer ceci :


'affiche une fenêtre type explorateur à partir de
laquelle il est possible d'afficher seulement soit le

répertoire désiré et
ses sous-répertoires sans les fichiers ou soit un
répertoire désiré, ses sous-répertoires et leurs fichiers.

Cela dépend de
la ligne de code que l'on active dans la fonction
ChoixDossier(chemin). Pour ce faire, il s'agit de placer

une apostrophe
devant la ligne de code pour la désactiver ou d'enlever
l'apostrophe pour l'activer.


'----------------------------------------
Function ChoixDossier(Chemin)
Dim objShell, objFolder
MSG = "Voici votre répertoire:"
Set objShell = CreateObject("Shell.Application")

'Cette ligne affiche répertoire et fichiers du
répertoire.

'Set objFolder = objShell.BrowseForFolder(&H0&, MSG,
&H4000, Chemin)


'Cette Ligne = pour afficher seulement les
répertoires


Set objFolder = objShell.BrowseForFolder(&H0&, MSG,
&H1&, Chemin)

On Error Resume Next
Chemin = objFolder.ParentFolder.ParseName
(objFolder.Title).path & ""

ChoixDossier = Chemin

End Function
'-----------------------------------------


'Et pour ouvrir le Browser ayant comme répertoire
racine "Mes documents"

'on peut utiliser la procédure suivante .

'------------------------------------------
Sub OuvrirRépertoire()

Dim CheminEtFichier As String
CheminEtFichier = ChoixDossier("c:Mes documents")

End Sub
'------------------------------------------


Salutations!







"Sylvain" a écrit
dans le message de news:124c01c3e010$8aaa6ff0

$
Bonjour,

J'utilise la fonction GetDirectory() ci dessous récuperée
sur excelabo pour afficher un fenetre de choix d'un
répertoire.

Comment faire pour prépositionner la sélection sur un
sous


répertoire au lieu de la position par défault qui est
le "poste de travail"

Merci par avance
Sylvain

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
'declarations API 32-bit
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

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 le dossier de stockage
du document :"
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)
Dossier = GetDirectory
Else
GetDirectory = ""
Dossier = ""
End If
End Function


.




.




Avatar
michdenis
Bonjour Sylvain,

La réponse que je t'ai transmise est complète. Je suis d'accord, ce n'est peut pas facile comme fonction... mais ce n'est pas
moi qui a formulé la demande ! Il faut prendre le temps d'y regarder de plus près.


Salutations!


"Sylvain" a écrit dans le message de news:1c7901c3e02e$ea5bad60$
Merci pour cette fonction.
Y-a t-il un paramétre à changer pour pouvoir selectionner
un repertoire au lieu du nom de fichier ?

Merci
Sylvian
-----Message d'origine-----
Bonjour Sylvain,


Voici une façon de faire en provenance de Microsoft,
modifié par Denis Pasquier et que j'ai moi-même modifier

un tantinet
pour obtenir ce que tu désires....

Dans la procédure Test() , tu retrouves cette ligne de
code : Tu dois définir ces 2 paramètres :


A ) Le répertoire sur lequel tu désires
ouvrir "L'explorateur" : "C:excel"


B ) Tu peux choisir un type de fichier que tu veux voir
s'afficher : ".xls" , pour pouvoir les visionner

tous : "*.*"

Fichier_a_ouvrir = SelectAFile("C:excel", "*.xls")



à copier dans un module Standard, La section API doit se
retrouver dans le haut du module !

************************************
Option Explicit
'Microsoft Developer Support.
'adaptation Denis Pasquier
'Code Example

'Ouverture d'un type de fichier
'--------------------------------
Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As
OPENFILENAME) As Long


Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

'---------------------------------
Private Function SelectAFile(Rep As String, Optional
filtre As String = "*.*") As String

Dim OpenFile As OPENFILENAME, lReturn As Long, sFilter As
String

OpenFile.lStructSize = Len(OpenFile)
sFilter = "Tous les fichiers (" & filtre & ")" & Chr(0)
& filtre & Chr(0)

With OpenFile
.lpstrFilter = sFilter
.nFilterIndex = 1
.lpstrFile = String(257, 0)
.nMaxFile = Len(OpenFile.lpstrFile) - 1
.lpstrFileTitle = OpenFile.lpstrFile
.nMaxFileTitle = OpenFile.nMaxFile
.lpstrInitialDir = Rep
.lpstrTitle = "Ouvrir"
.flags = 0
End With
lReturn = GetOpenFileName(OpenFile)
If lReturn = 0 Then
SelectAFile = "erann"
Else
SelectAFile = Trim(Left(OpenFile.lpstrFile, _
InStr(1, OpenFile.lpstrFile, Chr(0)) - 1))
End If
End Function

'---------------------------------
Sub test()
'Denis pasquier

Dim Fichier_a_ouvrir As Variant
Fichier_a_ouvrir = SelectAFile("C:excel", "*.xls")
If Fichier_a_ouvrir <> "erann" Then
MsgBox Fichier_a_ouvrir

End If
End Sub
'---------------------------------
************************************


Salutations!





"Sylvain" a écrit
dans le message de news:1b4101c3e01f$317ab840

$
Merci beaucoup pour cette fonction.

Peut-on changer un paramétre pour pouvoir remonter plus
dans l'arborescence que le chemin spécifié ?

Merci
Sylvain
-----Message d'origine-----
Bonjour Sylvain,

Tu peux essayer ceci :


'affiche une fenêtre type explorateur à partir de
laquelle il est possible d'afficher seulement soit le

répertoire désiré et
ses sous-répertoires sans les fichiers ou soit un
répertoire désiré, ses sous-répertoires et leurs fichiers.

Cela dépend de
la ligne de code que l'on active dans la fonction
ChoixDossier(chemin). Pour ce faire, il s'agit de placer

une apostrophe
devant la ligne de code pour la désactiver ou d'enlever
l'apostrophe pour l'activer.


'----------------------------------------
Function ChoixDossier(Chemin)
Dim objShell, objFolder
MSG = "Voici votre répertoire:"
Set objShell = CreateObject("Shell.Application")

'Cette ligne affiche répertoire et fichiers du
répertoire.

'Set objFolder = objShell.BrowseForFolder(&H0&, MSG,
&H4000, Chemin)


'Cette Ligne = pour afficher seulement les
répertoires


Set objFolder = objShell.BrowseForFolder(&H0&, MSG,
&H1&, Chemin)

On Error Resume Next
Chemin = objFolder.ParentFolder.ParseName
(objFolder.Title).path & ""

ChoixDossier = Chemin

End Function
'-----------------------------------------


'Et pour ouvrir le Browser ayant comme répertoire
racine "Mes documents"

'on peut utiliser la procédure suivante .

'------------------------------------------
Sub OuvrirRépertoire()

Dim CheminEtFichier As String
CheminEtFichier = ChoixDossier("c:Mes documents")

End Sub
'------------------------------------------


Salutations!







"Sylvain" a écrit
dans le message de news:124c01c3e010$8aaa6ff0

$
Bonjour,

J'utilise la fonction GetDirectory() ci dessous récuperée
sur excelabo pour afficher un fenetre de choix d'un
répertoire.

Comment faire pour prépositionner la sélection sur un
sous


répertoire au lieu de la position par défault qui est
le "poste de travail"

Merci par avance
Sylvain

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
'declarations API 32-bit
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

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 le dossier de stockage
du document :"
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)
Dossier = GetDirectory
Else
GetDirectory = ""
Dossier = ""
End If
End Function


.




.