VBA - Afficher boîte de dialogue de sélection de dossier avec chemin

Bonjour a tous,

Première fois pour moi que je post sur le forum (et je ne m'y connais pas trop en SD)

 

Malheureusement pour moi je n'arrive pas à trouver la solution pour ce que je recherche.

Je voudrais afficher une boîte de dialogue de sélection des dossiers genre : 

 

Dim SH as Shell32.Shell

Dim F as Shell32.Folder

Set SH = New Shell32.Shell

Set F = SH.BrowseForFolder(&H0&, "Message", &H1,"InitialFolder")

 

Cela fonctionne, mais si je remplis "InitialFolder" avec un chemin il me bloque ma sélection au dossier sous-jacent :/

Alors que je voudrais juste qu'il pointe ou qu'il dépile les répertoires jusqu'au répertoire que j'ai rentré.

En ayant la possibilité de revenir sur des dossiers parent.

 

J'espère que j'ai été claire

Merci d'avoir lu mon poste jusqu'ici

1 « J'aime »

Salut, c'est pour PDM ou pour SolidWorks ?

En tout cas, sur page d'aide de BrowseForFolder, c'est écrit que c'est obsolète et qu'il faut utiliser :

IEdmVault11::BrowseForFolder2.

Voir ici :

http://help.solidworks.com/2015/English/api/epdmapi/EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmVault11~BrowseForFolder2.html

1 « J'aime »

la question n'est pas très claire
il faudrais préciser d'avantage

Bonjour et merci de me répondre,

Oui désoler pour la question pas clair ^^

Alors, déjà c'est du code VBA pour Solidworks

Ensuite en gros je ne sais pas comment faire pour :

-Avec la boite de dialogue, pointer sur un répertoire que je lui indique en paramètre

-Avec la boite de dialogue, afficher tout les répertoires, et pas seulement ceux qui sont sous-jacent au paramètre que j'ai rentré)

 

J'espère que c'est plus clair

Comme je l'ai dit plus haut, essaye d'utiliser BrowseForFolder2 plutôt que BrowseForFolder qui est obsolète :

http://help.solidworks.com/2015/English/api/epdmapi/EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmVault11~BrowseForFolder2.html

Bonjour,

D'accord, merci pour l'information.

 

Mais je ne comprend pas trop comment faire fonctionner cette fonction enfaite 

Si vous pourriez m'aider svp !

Car je galere la :/

Voilà quelques exemples de codes fonctionnels :

http://www.ammara.com/access_image_faq/browse_for_folder_dialog.html

https://forum.solidworks.com/thread/25843

https://forum.solidworks.com/thread/89758

Ca sera plus simple de télécharger du code déjà fait que d'essayer d'écrire une macro complète si tu ne connais pas trop la programmation VBA.

Bonjour,

 

Merci de ton aide mais malheureusement ce n'est pas ce que je recherche.

Les codes que tu m'as fournis utilisent la fonction BrowseForFolder tout simple.

Ils ont juste mis un Userform en plus, mais ce n'est pas ce que je recherche.

 

Enfaite je voudrais exactement la même fonction : BrowseForFolder

Mais si on lui passe un paramètre : initialFolder, il ne nous interdit pas d'aller ou on veut quand même.

 

C’est à dire si initialFolder = "C:\Users\Public\Music\Sample Music"

Je veux pouvoir aller dans : "C:\Users\Public"

 

Désolé je n'ai pas solidworks pour tester, tu peux essayer de regarder ce tutoriel :

 http://www.cadsharp.com/videos/lesson-1-10-vba/

 

Bonjour,

 

J'ai regardé ton liens malheureusement je ne veux pas utiliser de références ou de composant qui ne sont pas gérer par tout les postes !

 

Merci quand même pour ton aide !! C’est très gentil

 

Je laisse le post ouvert jusqu'a que je trouve la solution

Bonjour 

c'est bon j'ai trouvé une solution !!!

Apres multiples tentative, je vous laisse le code 

les solutions sur ces deux postes :

http://codes-sources.commentcamarche.net/forum/affich-15102-selectionner-un-repertoire-avec-une-boite-de-dialogue-en-vba

http://www.cadsharp.com/blog/solidworks-macro-compatible-64-vba7/

 

à modifier selon votre bon vouloir :

Private Type BROWSEINFO ' used by the function GetFolderName

hOwner As LongPtr

pidlRoot As LongPtr

pszDisplayName As String

lpszTitle As String

ulFlags As LongPtr

lpfn As LongPtr

lParam As LongPtr

iImage As LongPtr

End Type

#If VBA7 Then

    Private Declare PtrSafe Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As LongPtr, ByVal pszPath As String) As LongPtr

    Private Declare PtrSafe Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As LongPtr

#Else

    'Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As LongPtr, ByVal pszPath As String) As Long

    'Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

#End If

 

Function GetFolderName(Msg As String) As String

' returns the name of the folder selected by the user

Dim bInfo As BROWSEINFO, path As String, r As LongPtr, x As LongPtr, pos As Integer

'bInfo.pidlRoot 0& ' Root folder Desktop

If IsMissing(Msg) Then

bInfo.lpszTitle = "Selectionner un répertoire de travail" ' the dialog title

Else

bInfo.lpszTitle = Msg ' the dialog title

End If

bInfo.ulFlags = &H1 ' Type of directory to return

x = SHBrowseForFolder(bInfo) ' display the dialog

' Parse the result

path = Space$(512)

r = SHGetPathFromIDList(ByVal x, ByVal path)

If r Then

pos = InStr(path, Chr$(0))

GetFolderName = Left(path, pos - 1)

Else

GetFolderName = ""

End If

End Function

 

Private Sub CommandButton2_Click()

Dim Rep0 As String

Rep0 = GetFolderName("Choisissez un répertoire de travail")

FrmE2S.TextBox1.Text = Rep0

End Sub

:)

Bonjour,

 

petit récapitulatif !!

Vous trouverez si joint la bonne réponse : 

http://www.lynkoa.com/forum/solidworks/bouton-parcourir-macro-vba

Désoler ^^

Bonne continuation a tous !

1 « J'aime »