Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

boite de dialogue dossier

10 réponses
Avatar
phb56
Bonjour =E0 tous,

Je cherche sans succ=E8s depuis 2 jours, une fonction ouvrant une bo=EEte
de dialogue permettant de:
a) s=E9lectionner un dossier
b) en choisissant le dossier par d=E9faut (s=E9lectionn=E9 =E0 l'ouverture d=
e
la bo=EEte)
c) mais autorisant aussi de parcourir l'arborescence en amont du
dossier par d=E9faut.

J'ai trouv=E9 des fonctions permettant de r=E9aliser 2 conditions sur 3 (a
+ b ou a + c) mais jamais a + b + c

Merci

10 réponses

Avatar
Jacques ALARDET
Bonjour,

Après avoir pautagé comme toi, j'ai fini par utiliser GetSaveAsFilename
Attention, j'ai des surprises en utilisant le filtre des extensions

J a c q u e s

a écrit dans le message de
news:
Bonjour à tous,

Je cherche sans succès depuis 2 jours, une fonction ouvrant une boîte
de dialogue permettant de:
a) sélectionner un dossier
b) en choisissant le dossier par défaut (sélectionné à l'ouverture de
la boîte)
c) mais autorisant aussi de parcourir l'arborescence en amont du
dossier par défaut.

J'ai trouvé des fonctions permettant de réaliser 2 conditions sur 3 (a
+ b ou a + c) mais jamais a + b + c

Merci
Avatar
phb56
Ça ne me convient pas, GetSaveAsFilename renvoie un nom de fichier,
pas de dossier

On 3 mai, 07:50, "Jacques ALARDET" wrote:
Bonjour,

Après avoir pautagé comme toi, j'ai fini par utiliser GetSaveAsFilenam e
Attention, j'ai des surprises en utilisant le filtre des extensions

J a c q u e s

a écrit dans le message denews:05e70a8d-edf7-4c31
Bonjour à tous,

Je cherche sans succès depuis 2 jours, une fonction ouvrant une boîte
de dialogue permettant de:
a) sélectionner un dossier
b) en choisissant le dossier par défaut (sélectionné à l'ouverture de
la boîte)
c) mais autorisant aussi de parcourir l'arborescence en amont du
dossier par défaut.

J'ai trouvé des fonctions permettant de réaliser 2 conditions sur 3 (a
+ b ou a + c) mais jamais a + b + c

Merci


Avatar
Frédéric Sigonneau
Si tu utilises au moins Excel 2002, peut-être cette fonction peut-elle te convenir :

'===================== Sub test()
MsgBox SelDossier("J:fsCanal")
End Sub

Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog

Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.InitialFileName = "J:fsCanal*.*"
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
SelDossier = vrtSelectedItem
Next vrtSelectedItem
End If
End With
Set fd = Nothing

End Function
'=====================
FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour à tous,

Je cherche sans succès depuis 2 jours, une fonction ouvrant une boîte
de dialogue permettant de:
a) sélectionner un dossier
b) en choisissant le dossier par défaut (sélectionné à l'ouverture de
la boîte)
c) mais autorisant aussi de parcourir l'arborescence en amont du
dossier par défaut.

J'ai trouvé des fonctions permettant de réaliser 2 conditions sur 3 (a
+ b ou a + c) mais jamais a + b + c

Merci



Avatar
Frédéric Sigonneau
Désolé, à la relecture, il y a pas mal d'améliorations à apporter.
Essaye plutôt :

'===================== Sub test()
MsgBox SelDossier("J:fsCanal")
End Sub

Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog

Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.InitialFileName = Defaut & "*.*"
.AllowMultiSelect = False
If .Show = -1 Then SelDossier = .SelectedItems(1)
End With
Set fd = Nothing

End Function
'=====================
FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Si tu utilises au moins Excel 2002, peut-être cette fonction peut-elle
te convenir :

'===================== > Sub test()
MsgBox SelDossier("J:fsCanal")
End Sub

Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog

Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.InitialFileName = "J:fsCanal*.*"
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
SelDossier = vrtSelectedItem
Next vrtSelectedItem
End If
End With
Set fd = Nothing

End Function
'===================== >
FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour à tous,

Je cherche sans succès depuis 2 jours, une fonction ouvrant une boîte
de dialogue permettant de:
a) sélectionner un dossier
b) en choisissant le dossier par défaut (sélectionné à l'ouverture de
la boîte)
c) mais autorisant aussi de parcourir l'arborescence en amont du
dossier par défaut.

J'ai trouvé des fonctions permettant de réaliser 2 conditions sur 3 (a
+ b ou a + c) mais jamais a + b + c

Merci





Avatar
MichDenis
Un peu d'ergotage ...

quelques retouches à la fonction de Nicolas pour sélectionner un dossier

'---------------------------
Sub test()
' Attention le "" à la fin de la ligne de commande est essentielle.
MsgBox SelDossier("C:ATravail")
End Sub
'---------------------------
Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.InitialFileName = Defaut
If .Show = -1 Then
SelDossier = fd.SelectedItems(1)
End If
End With
Set fd = Nothing
End Function
'---------------------------



"Frédéric Sigonneau" a écrit dans le message de news:

Si tu utilises au moins Excel 2002, peut-être cette fonction peut-elle te convenir :

'===================== Sub test()
MsgBox SelDossier("J:fsCanal")
End Sub

Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog

Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.InitialFileName = "J:fsCanal*.*"
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
SelDossier = vrtSelectedItem
Next vrtSelectedItem
End If
End With
Set fd = Nothing

End Function
'=====================
FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour à tous,

Je cherche sans succès depuis 2 jours, une fonction ouvrant une boîte
de dialogue permettant de:
a) sélectionner un dossier
b) en choisissant le dossier par défaut (sélectionné à l'ouverture de
la boîte)
c) mais autorisant aussi de parcourir l'arborescence en amont du
dossier par défaut.

J'ai trouvé des fonctions permettant de réaliser 2 conditions sur 3 (a
+ b ou a + c) mais jamais a + b + c

Merci



Avatar
Frédéric Sigonneau
Un peu d'ergotage ...


Pas de problème, tu as vu que j'ai ergoté tout seul comme un grand :)

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Un peu d'ergotage ...

quelques retouches à la fonction de Nicolas pour sélectionner un dossier

'---------------------------
Sub test()
' Attention le "" à la fin de la ligne de commande est essentielle.
MsgBox SelDossier("C:ATravail")
End Sub
'---------------------------
Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.InitialFileName = Defaut
If .Show = -1 Then
SelDossier = fd.SelectedItems(1)
End If
End With
Set fd = Nothing
End Function
'---------------------------



"Frédéric Sigonneau" a écrit dans le message de news:

Si tu utilises au moins Excel 2002, peut-être cette fonction peut-elle te convenir :

'===================== > Sub test()
MsgBox SelDossier("J:fsCanal")
End Sub

Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog

Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.InitialFileName = "J:fsCanal*.*"
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
SelDossier = vrtSelectedItem
Next vrtSelectedItem
End If
End With
Set fd = Nothing

End Function
'===================== >
FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour à tous,

Je cherche sans succès depuis 2 jours, une fonction ouvrant une boîte
de dialogue permettant de:
a) sélectionner un dossier
b) en choisissant le dossier par défaut (sélectionné à l'ouverture de
la boîte)
c) mais autorisant aussi de parcourir l'arborescence en amont du
dossier par défaut.

J'ai trouvé des fonctions permettant de réaliser 2 conditions sur 3 (a
+ b ou a + c) mais jamais a + b + c

Merci







Avatar
phb56
Ça a l'air sympathique mais mon Excel97 bloque sur le type FileDialog
qu'il ne connaît pas.


On 3 mai, 16:37, Frédéric Sigonneau wrote:
 > Un peu d'ergotage ...

Pas de problème, tu as vu que j'ai ergoté tout seul comme un grand :)

FS
---
Frédéric Sigonneauhttp://frederic.sigonneau.free.fr




Un peu d'ergotage ...

quelques retouches à la fonction de Nicolas pour sélectionner un dos sier

'---------------------------
Sub test()
 ' Attention le "" à la fin de la ligne de commande est essentielle .
   MsgBox SelDossier("C:ATravail")
End Sub
'---------------------------
Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
    .InitialFileName = Defaut
    If .Show = -1 Then
        SelDossier = fd.SelectedItems(1)
    End If
End With
Set fd = Nothing
End Function
'---------------------------

"Frédéric Sigonneau" a écrit dans le message de ne ws:

Si tu utilises au moins Excel 2002, peut-être cette fonction peut-elle te convenir :

'======================
Sub test()
   MsgBox SelDossier("J:fsCanal")
End Sub

Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog

   Set fd = Application.FileDialog(msoFileDialogFolderPicker)
   With fd
     .InitialFileName = "J:fsCanal*.*"
     If .Show = -1 Then
       For Each vrtSelectedItem In .SelectedItems
         SelDossier = vrtSelectedItem
       Next vrtSelectedItem
     End If
   End With
   Set fd = Nothing

End Function
'======================

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour à tous,

Je cherche sans succès depuis 2 jours, une fonction ouvrant une boî te
de dialogue permettant de:
a) sélectionner un dossier
b) en choisissant le dossier par défaut (sélectionné à l'ouvert ure de
la boîte)
c) mais autorisant aussi de parcourir l'arborescence en amont du
dossier par défaut.

J'ai trouvé des fonctions permettant de réaliser 2 conditions sur 3 (a
+ b ou a + c) mais jamais a + b + c

Merci- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -




Avatar
Frédéric Sigonneau
En effet, j'ai précisé dans mon premier envoi qu'il fallait Excel 2002 au moins.
Désolé !

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Ça a l'air sympathique mais mon Excel97 bloque sur le type FileDialog
qu'il ne connaît pas.


On 3 mai, 16:37, Frédéric Sigonneau wrote:
Un peu d'ergotage ...


Pas de problème, tu as vu que j'ai ergoté tout seul comme un grand :)

FS
---
Frédéric Sigonneauhttp://frederic.sigonneau.free.fr




Un peu d'ergotage ...
quelques retouches à la fonction de Nicolas pour sélectionner un dossier
'---------------------------
Sub test()
' Attention le "" à la fin de la ligne de commande est essentielle..
MsgBox SelDossier("C:ATravail")
End Sub
'---------------------------
Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.InitialFileName = Defaut
If .Show = -1 Then
SelDossier = fd.SelectedItems(1)
End If
End With
Set fd = Nothing
End Function
'---------------------------
"Frédéric Sigonneau" a écrit dans le message de news:

Si tu utilises au moins Excel 2002, peut-être cette fonction peut-elle te convenir :
'===================== >>> Sub test()
MsgBox SelDossier("J:fsCanal")
End Sub
Function SelDossier(Defaut As String)
'd'après "Nicolas", mpfe
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.InitialFileName = "J:fsCanal*.*"
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
SelDossier = vrtSelectedItem
Next vrtSelectedItem
End If
End With
Set fd = Nothing
End Function
'===================== >>> FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr
Bonjour à tous,
Je cherche sans succès depuis 2 jours, une fonction ouvrant une boîte
de dialogue permettant de:
a) sélectionner un dossier
b) en choisissant le dossier par défaut (sélectionné à l'ouverture de
la boîte)
c) mais autorisant aussi de parcourir l'arborescence en amont du
dossier par défaut.
J'ai trouvé des fonctions permettant de réaliser 2 conditions sur 3 (a
+ b ou a + c) mais jamais a + b + c
Merci- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -









Avatar
Jacques ALARDET
Bonjour,

Oui c'est exact, il renvoit un chemin complet, il suffit ensuite de
récupérer le dossier avec GetParentFolderName

Je n'ai pas trouvé mieux jusqu'à présent

a écrit dans le message de
news:
Ça ne me convient pas, GetSaveAsFilename renvoie un nom de fichier,
pas de dossier

On 3 mai, 07:50, "Jacques ALARDET" wrote:
Bonjour,

Après avoir pautagé comme toi, j'ai fini par utiliser GetSaveAsFilename
Attention, j'ai des surprises en utilisant le filtre des extensions

J a c q u e s

a écrit dans le message
denews:
Bonjour à tous,

Je cherche sans succès depuis 2 jours, une fonction ouvrant une boîte
de dialogue permettant de:
a) sélectionner un dossier
b) en choisissant le dossier par défaut (sélectionné à l'ouverture de
la boîte)
c) mais autorisant aussi de parcourir l'arborescence en amont du
dossier par défaut.

J'ai trouvé des fonctions permettant de réaliser 2 conditions sur 3 (a
+ b ou a + c) mais jamais a + b + c

Merci


Avatar
phb56
Voilà une solution qui fonctionne avec Excel97, un peu trop usine à
gaz à mon goût et très certainement améliorable mais qui répond à mon
besoin.
Rien n'est de moi, je n'ai fait que piquer à droite à gauche, merci à
tous et surtout à Frédéric Sigonneau.
J'ai tout placé dans un module, et j'ai appelé la fonction appelante
"ChoixDossier"

Option Explicit

Private Const BIF_STATUSTEXT = &H4&
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260

Private Const WM_USER = &H400
Private Const BFFM_INITIALIZED = 1
Private Const BFFM_SELCHANGED = 2
Private Const BFFM_SETSTATUSTEXT = (WM_USER + 100)
Private Const BFFM_SETSELECTION = (WM_USER + 102)

Private Declare Function SendMessage Lib "user32" Alias
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam
As Long, ByVal lParam As String) As Long
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 GetCurrentVbaProject Lib "vba332.dll" Alias
"EbGetExecutingProj" (hProject As Long) As Long
Private Declare Function GetFuncID Lib "vba332.dll" Alias
"TipGetFunctionId" _
(ByVal hProject As Long, ByVal strFunctionName As String, _
ByRef strFunctionID As String) As Long
Private Declare Function GetAddr Lib "vba332.dll" Alias
"TipGetLpfnOfFunctionId" _
(ByVal hProject As Long, ByVal strFunctionID As String, _
ByRef lpfnAddressOf As Long) 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

Private m_CurrentDirectory As String 'The current directory
'

Public Sub ChoixDossier()
' exemple d'utilisation
Dim sDossier As String
sDossier = BrowseForFolder("Sélectionner un dossier",
ThisWorkbook.path)
MsgBox sDossier
End Sub


Public Function BrowseForFolder(Title As String, StartDir As String)
As String
'Opens a Treeview control that displays the directories in a
computer

Dim lpIDList As Long
Dim szTitle As String
Dim sBuffer As String
Dim tBrowseInfo As BrowseInfo
m_CurrentDirectory = StartDir & vbNullChar

BrowseForFolder = ""
szTitle = Title
With tBrowseInfo
.lpszTitle = lstrcat(szTitle, "")
.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN +
BIF_STATUSTEXT
.lpfnCallback =
GetAddressofFunction(AddrOf("BrowseCallbackProc")) 'get address of
function.
End With

lpIDList = SHBrowseForFolder(tBrowseInfo)
If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
BrowseForFolder = sBuffer
' Else
' BrowseForFolder = ""
End If

End Function


Private Function AddrOf(CallbackFunctionName As String) As Long
'AddressOf operator replacement for Office97 VBA
'Authors: Ken Getz and Michael Kaplan
'
'declaration of local variables
Dim aResult As Long
Dim CurrentVBProject As Long
Dim strFunctionID As String
Dim AddressOfFunction As Long
Dim UnicodeFunctionName As String
'
'convert the name of the function to Unicode system
UnicodeFunctionName = StrConv(CallbackFunctionName, vbUnicode)
'
'if the current VBProjects exists...
If Not GetCurrentVbaProject(CurrentVBProject) = 0 Then
'...get the function ID of the callback function, based on its
'unicode-converted name, in order to ensure that it exists
aResult = GetFuncID _
( _
hProject:=CurrentVBProject, _
strFunctionName:=UnicodeFunctionName, _
strFunctionID:=strFunctionID _
)
'if the function exists indeed ...
If aResult = 0 Then
'...get a pointer to the callback function based on
'the strFunctionID argument of the GetFuncID function
aResult = GetAddr _
( _
hProject:=CurrentVBProject, _
strFunctionID:=strFunctionID, _
lpfnAddressOf:­dressOfFunction _
)
'if we've got the pointer pass it to the result
'of the function
If aResult = 0 Then
AddrOf = AddressOfFunction
End If
End If
End If
End Function


Private Function BrowseCallbackProc(ByVal hwnd As Long, ByVal uMsg As
Long, ByVal lp As Long, ByVal pData As Long) As Long

Dim lpIDList As Long
Dim ret As Long
Dim sBuffer As String

On Error Resume Next 'Sugested by MS to prevent an error from
'propagating back into the calling process.

Select Case uMsg

Case BFFM_INITIALIZED
Call SendMessage(hwnd, BFFM_SETSELECTION, 1, m_CurrentDirectory)

Case BFFM_SELCHANGED
sBuffer = Space(MAX_PATH)

ret = SHGetPathFromIDList(lp, sBuffer)
If ret = 1 Then
Call SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, sBuffer)
End If

End Select

BrowseCallbackProc = 0

End Function

' This function allows you to assign a function pointer to a vaiable.
Private Function GetAddressofFunction(add As Long) As Long
GetAddressofFunction = add
End Function