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

Changement de de repertoire bis

2 réponses
Avatar
Thierry
Bonjour,

Dans un précédent message, je voulais savoir comment changer de répertoire
via un formulaire. on m'a gentiment répondu, dont voici le code ci-dessous.
Cela marche seulement si je lance le code dans un module. en fait je
voudrais l'inclure dans mon userform et en cliquant sur un bouton faire
afficher la listes des répertoires pour en selectionner un puis continuer à
renseigner les différents paramètre de mon userform.
Mais cela ne fonctionne pas . A chaque fois que je clique sur le bouton pour
faire afficher la liste des répertoires, j'ai un message d'erreur : "Nom
abigu détécté: Browseinfo".
Je ne peux pas déclarer BROWSEINFO dans mon userform sinon j'ai encore un
autre message d'erreur. Je ne sais plus quoi faire.
Merci pour votre aide.

"Daniel" a écrit :

> Bonjour.
> Copie tout ce code et exécute la macro Test :
>
> Option Explicit
>
> 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
>
>
>
>
>
> Sub Test()
>
> Dim Msg As String
> Msg = "Choisissez un répertoire."
> MsgBox GetDirectory(Msg)
>
> End Sub
>
>
>
> Function GetDirectory(Optional Msg) As String
>
> Dim bInfo As BROWSEINFO
> Dim path As String
> Dim r As Long, x As Long, pos As Integer
>
> ' Root folder = Desktop
>
> bInfo.pidlRoot = 0&
>
> ' Title in the dialog

> If IsMissing(Msg) Then
> bInfo.lpszTitle = "Select a folder."
> Else
>
> bInfo.lpszTitle = Msg
>
> End If
>
>
> ' Type of directory to return
> bInfo.ulFlags = &H1
>
>
> ' Display the dialog
> x = SHBrowseForFolder(bInfo)
>
> ' Parse the result
> 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

2 réponses

Avatar
Daniel
Bonjour.
"nom ambigü", ça ceut dire normalement que tu as deux macros avec le même
nom.
Regarde le classeur :
http://cjoint.com/?hdr6ClMdIR
Cordialement.
Daniel
"Thierry" a écrit dans le message de
news:
Bonjour,

Dans un précédent message, je voulais savoir comment changer de répertoire
via un formulaire. on m'a gentiment répondu, dont voici le code
ci-dessous.
Cela marche seulement si je lance le code dans un module. en fait je
voudrais l'inclure dans mon userform et en cliquant sur un bouton faire
afficher la listes des répertoires pour en selectionner un puis continuer
à
renseigner les différents paramètre de mon userform.
Mais cela ne fonctionne pas . A chaque fois que je clique sur le bouton
pour
faire afficher la liste des répertoires, j'ai un message d'erreur : "Nom
abigu détécté: Browseinfo".
Je ne peux pas déclarer BROWSEINFO dans mon userform sinon j'ai encore
un
autre message d'erreur. Je ne sais plus quoi faire.
Merci pour votre aide.


Bonjour.
Copie tout ce code et exécute la macro Test :

Option Explicit

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





Sub Test()

Dim Msg As String
Msg = "Choisissez un répertoire."
MsgBox GetDirectory(Msg)

End Sub



Function GetDirectory(Optional Msg) As String

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

' Root folder = Desktop

bInfo.pidlRoot = 0&

' Title in the dialog

If IsMissing(Msg) Then
bInfo.lpszTitle = "Select a folder."
Else

bInfo.lpszTitle = Msg

End If


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


' Display the dialog
x = SHBrowseForFolder(bInfo)

' Parse the result
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





Avatar
Thierry
Merci,

C'était bien ça, le code était 2 fois dans 2 modules diférents pour pouvoir
faire des tests. Merci encore.


Bonjour.
"nom ambigü", ça ceut dire normalement que tu as deux macros avec le même
nom.
Regarde le classeur :
http://cjoint.com/?hdr6ClMdIR
Cordialement.
Daniel
"Thierry" a écrit dans le message de
news:
Bonjour,

Dans un précédent message, je voulais savoir comment changer de répertoire
via un formulaire. on m'a gentiment répondu, dont voici le code
ci-dessous.
Cela marche seulement si je lance le code dans un module. en fait je
voudrais l'inclure dans mon userform et en cliquant sur un bouton faire
afficher la listes des répertoires pour en selectionner un puis continuer
à
renseigner les différents paramètre de mon userform.
Mais cela ne fonctionne pas . A chaque fois que je clique sur le bouton
pour
faire afficher la liste des répertoires, j'ai un message d'erreur : "Nom
abigu détécté: Browseinfo".
Je ne peux pas déclarer BROWSEINFO dans mon userform sinon j'ai encore
un
autre message d'erreur. Je ne sais plus quoi faire.
Merci pour votre aide.


Bonjour.
Copie tout ce code et exécute la macro Test :

Option Explicit

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





Sub Test()

Dim Msg As String
Msg = "Choisissez un répertoire."
MsgBox GetDirectory(Msg)

End Sub



Function GetDirectory(Optional Msg) As String

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

' Root folder = Desktop

bInfo.pidlRoot = 0&

' Title in the dialog

If IsMissing(Msg) Then
bInfo.lpszTitle = "Select a folder."
Else

bInfo.lpszTitle = Msg

End If


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


' Display the dialog
x = SHBrowseForFolder(bInfo)

' Parse the result
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