cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
2 août 2006 à 20:03
elloco054
Messages postés4Date d'inscriptionlundi 14 novembre 2005StatutMembreDernière intervention31 janvier 2019
-
1 oct. 2006 à 01:42
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
elloco054
Messages postés4Date d'inscriptionlundi 14 novembre 2005StatutMembreDernière intervention31 janvier 2019 1 oct. 2006 à 01:42
Merci bien Sechaud, c'est tout pile ce qu'il me fallait!! En plus un simple copié/collé dans mon code est ca marche (j'ai juste viré les 2 text1.txt="" qui ne me semblent dailleur pas trés judicieux...si je peux me permettre ...)
Merci encore!
Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention 3 janvier 2017 4 sept. 2006 à 08:05
Merci beaucoup US_30 pour cette belle simplification.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 3 sept. 2006 à 15:59
Bonjour,
Petite remarque en passant pour VBA, pour que le code ci-dessus fonctionne, il ne faut pas la ligne :
'BROWSEINFO.hOwner = Me.Hwnd
donc la mettre en remarque.
Ensuite si on veut plus court, on peut faire pour les dernières lignes :
Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention 3 janvier 2017 8 août 2006 à 09:23
Voici la solution la plus courte que j'ai trouvée avec SHBrowseForFolder sans module.
(Un bouton et un TextBox, pour ceux qui veulent essayer.)
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
(ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long
Private 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
Private Const BIF_RETURNONLYFSDIRS = &H1
Private Sub Command1_Click()
Dim BROWSEINFO As BROWSEINFO
Dim Chemin As String
Dim pidl As Long
Dim RetVal As Long
Dim p As Integer
'
Text1.Text = ""
BROWSEINFO.hOwner = Me.hWnd
BROWSEINFO.pidlRoot = 0&
BROWSEINFO.lpszTitle = "Selectionnez un répertoire"
BROWSEINFO.ulFlags = BIF_RETURNONLYFSDIRS
pidl& = SHBrowseForFolder(BROWSEINFO)
'
Chemin = String(512, 0)
RetVal = SHGetPathFromIDList(pidl&, Chemin)
If RetVal Then
p = InStr(Chemin, Chr$(0))
Text1.Text = Left(Chemin, p - 1)
Else
Text1.Text = ""
End If
End Sub
Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention 3 janvier 2017 2 août 2006 à 22:04
Merci DARKSIDIOUS pour le tuyau.
J'ai pu constater dans le source
http://www.vbfrance.com/codes/CHEMIN-DOSSIER_32628.aspx que la solution proposée n'était pas trop lourde et elle me plaît assez.
En passant, j'ai trouvé que son auteur avait été noté injustement.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 2 août 2006 à 20:03
Pourtant, l'API SHBrowseForFolder est assez simple à utiliser !
Bon c'est sûr, ta méthode est plus simple, mais moins pratique...
1 oct. 2006 à 01:42
Merci encore!
4 sept. 2006 à 08:05
3 sept. 2006 à 15:59
Petite remarque en passant pour VBA, pour que le code ci-dessus fonctionne, il ne faut pas la ligne :
'BROWSEINFO.hOwner = Me.Hwnd
donc la mettre en remarque.
Ensuite si on veut plus court, on peut faire pour les dernières lignes :
Chemin = Space$(512)
RetVal = SHGetPathFromIDList(pidl&, Chemin)
Text1.Text = Chemin
C'est strictement identique.
Amicalement,
Us.
8 août 2006 à 09:23
(Un bouton et un TextBox, pour ceux qui veulent essayer.)
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
(ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long
Private 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
Private Const BIF_RETURNONLYFSDIRS = &H1
Private Sub Command1_Click()
Dim BROWSEINFO As BROWSEINFO
Dim Chemin As String
Dim pidl As Long
Dim RetVal As Long
Dim p As Integer
'
Text1.Text = ""
BROWSEINFO.hOwner = Me.hWnd
BROWSEINFO.pidlRoot = 0&
BROWSEINFO.lpszTitle = "Selectionnez un répertoire"
BROWSEINFO.ulFlags = BIF_RETURNONLYFSDIRS
pidl& = SHBrowseForFolder(BROWSEINFO)
'
Chemin = String(512, 0)
RetVal = SHGetPathFromIDList(pidl&, Chemin)
If RetVal Then
p = InStr(Chemin, Chr$(0))
Text1.Text = Left(Chemin, p - 1)
Else
Text1.Text = ""
End If
End Sub
2 août 2006 à 22:04
J'ai pu constater dans le source
http://www.vbfrance.com/codes/CHEMIN-DOSSIER_32628.aspx
que la solution proposée n'était pas trop lourde et elle me plaît assez.
En passant, j'ai trouvé que son auteur avait été noté injustement.
2 août 2006 à 20:03
Bon c'est sûr, ta méthode est plus simple, mais moins pratique...