OVH Cloud OVH Cloud

VBA Excel 2003 - Boîte de dialogue permettant de sélectionner un dossier ou un fichier

20 réponses
Avatar
thomas
Bonjour,

Le code ci-dessous marche parfaitement bien si je mets en 4ème paramètre de
objShell.BrowseForFolder "C:\toto" mais plus du tout si je remplace
"C:\toto" par une variable, "Chemin" par exemple ( Chemin = "C:\toto")

Au lieu d'avoir comme dossier de départ de la recherche "C:\toto" j'ai "Mes
documents". Où ai-je fait une erreur?

Merci

Dim objShell, objFolder, SecuriteSlash

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisissez un dossier",
&H1&, Chemin)

................................

10 réponses

1 2
Avatar
thomas
je récupère bien le chemin choisi par la boite de dialogue mais la boite de
dialogue ne se positionne pas sur le chemin par defaut


"Daniel.C" a écrit dans le message de groupe de
discussion :
Ca ne te donnera pas la solution, mais, si tu veux uniquement récupérer le
chemin du répertoire, utilise :
Dim Chemin As String, Dossier As String
Chemin = "c:toto"
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = Chemin
.Show
If .SelectedItems.Count > 0 Then Dossier = .SelectedItems(1)
End With
Daniel
"thomas" <nomail> a écrit dans le message de news:

ben non cela ne marche pas mieux mais ce qui est bizarre c'est que si je
clique sur annuler dans la boîte de recherche , Chemin > objFolder.ParentFolder.ParseName(objFolder.Title).Path restitue le chemin
que j'ai défini par défaut et pas celui que la boîte affiche



"Jacques93" a écrit dans le message de groupe de
discussion
:
Essaie avec :

Dim Chemin As Variant

Ce paramètre peut être soit une chaine de caractères, soit une constante
numérique :

<http://msdn.microsoft.com/en-us/library/bb774065(VS.85).aspx>

<http://msdn.microsoft.com/en-us/library/bb774096(VS.85).aspx>

thomas a écrit :
oui Dim Chemin as String


"Jacques93" a écrit dans le message de groupe de
discussion
:
Aurais tu déclaré :

Dim Chemin as String

?




--

Cordialement,

Jacques.



Avatar
Daniel.C
Non. Il se ppositionne sur le chemin spécifié par ce que tu indiques dans la
variable Chemin. Si tu veux que le chemin par défaut s'affiche, tu n'as pas
besoin de spécifier un chemin :

Dim Chemin As String, Dossier As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Show
MsgBox "Chemin par défaut : " & CurDir
If .SelectedItems.Count > 0 Then Dossier = .SelectedItems(1)
End With
J'ai ajouté un msgbox par comparaison.

Daniel
"thomas" <nomail> a écrit dans le message de news:

je récupère bien le chemin choisi par la boite de dialogue mais la boite
de
dialogue ne se positionne pas sur le chemin par defaut


"Daniel.C" a écrit dans le message de groupe de
discussion :
Ca ne te donnera pas la solution, mais, si tu veux uniquement récupérer le
chemin du répertoire, utilise :
Dim Chemin As String, Dossier As String
Chemin = "c:toto"
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = Chemin
.Show
If .SelectedItems.Count > 0 Then Dossier = .SelectedItems(1)
End With
Daniel
"thomas" <nomail> a écrit dans le message de news:

ben non cela ne marche pas mieux mais ce qui est bizarre c'est que si je
clique sur annuler dans la boîte de recherche , Chemin >> objFolder.ParentFolder.ParseName(objFolder.Title).Path restitue le chemin
que j'ai défini par défaut et pas celui que la boîte affiche



"Jacques93" a écrit dans le message de groupe de
discussion
:
Essaie avec :

Dim Chemin As Variant

Ce paramètre peut être soit une chaine de caractères, soit une constante
numérique :

<http://msdn.microsoft.com/en-us/library/bb774065(VS.85).aspx>

<http://msdn.microsoft.com/en-us/library/bb774096(VS.85).aspx>

thomas a écrit :
oui Dim Chemin as String


"Jacques93" a écrit dans le message de groupe de
discussion
:
Aurais tu déclaré :

Dim Chemin as String

?




--

Cordialement,

Jacques.






Avatar
thomas
ce n'est pas le chemin courant que je veux par defaut mais un chemin que je
specifie

"Daniel.C" a écrit dans le message de groupe de
discussion : #
Non. Il se ppositionne sur le chemin spécifié par ce que tu indiques dans la
variable Chemin. Si tu veux que le chemin par défaut s'affiche, tu n'as pas
besoin de spécifier un chemin :

Dim Chemin As String, Dossier As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Show
MsgBox "Chemin par défaut : " & CurDir
If .SelectedItems.Count > 0 Then Dossier = .SelectedItems(1)
End With
J'ai ajouté un msgbox par comparaison.

Daniel
"thomas" <nomail> a écrit dans le message de news:

je récupère bien le chemin choisi par la boite de dialogue mais la boite
de
dialogue ne se positionne pas sur le chemin par defaut


"Daniel.C" a écrit dans le message de groupe de
discussion :
Ca ne te donnera pas la solution, mais, si tu veux uniquement récupérer le
chemin du répertoire, utilise :
Dim Chemin As String, Dossier As String
Chemin = "c:toto"
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = Chemin
.Show
If .SelectedItems.Count > 0 Then Dossier = .SelectedItems(1)
End With
Daniel
"thomas" <nomail> a écrit dans le message de news:

ben non cela ne marche pas mieux mais ce qui est bizarre c'est que si je
clique sur annuler dans la boîte de recherche , Chemin >> objFolder.ParentFolder.ParseName(objFolder.Title).Path restitue le chemin
que j'ai défini par défaut et pas celui que la boîte affiche



"Jacques93" a écrit dans le message de groupe de
discussion
:
Essaie avec :

Dim Chemin As Variant

Ce paramètre peut être soit une chaine de caractères, soit une constante
numérique :

<http://msdn.microsoft.com/en-us/library/bb774065(VS.85).aspx>

<http://msdn.microsoft.com/en-us/library/bb774096(VS.85).aspx>

thomas a écrit :
oui Dim Chemin as String


"Jacques93" a écrit dans le message de groupe de
discussion
:
Aurais tu déclaré :

Dim Chemin as String

?




--

Cordialement,

Jacques.






Avatar
Daniel.C
"je récupère bien le chemin choisi par la boite de dialogue mais la boite de
dialogue ne se positionne pas sur le chemin par defaut"
"ce n'est pas le chemin courant que je veux par defaut mais un chemin que je
specifie"
Il faudrait savoir ce que tu veux.
Daniel
Avatar
thomas
Je dis depuis le début que je veux récupérer un chemin bien défini contenu
dans une variable : c:toto dans mon exemple


"Daniel.C" a écrit dans le message de groupe de
discussion :
"je récupère bien le chemin choisi par la boite de dialogue mais la boite de
dialogue ne se positionne pas sur le chemin par defaut"
"ce n'est pas le chemin courant que je veux par defaut mais un chemin que je
specifie"
Il faudrait savoir ce que tu veux.
Daniel
Avatar
Jacques93
Bonjour thomas,
Bizarre, chez moi cela réagit bien comme ça :

Dim Chemin As String

Racine = "BureauJacques"

Dim Chemin as Variant

Racine "C:Toto"

Si je laisse :

Dim Chemin as String

mais que je force la conversion avec

.BrowseForFolder(&H0&, "Choisissez un dossier", &H1&, CVar(Chemin))

Racine = "C:Toto"

De même si j'ajoute une référence à Microsoft Shell Controls And
Automation (Shell32.dll), et que je déclare :

Dim objShell As Shell
Dim objFolder As Folder
Dim Chemin As String

Chemin = "c:toto"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisissez un
dossier", &H1&, Chemin)

c'est bon, la conversion étant implicite.

NB : Si tu travailles sur la même machine que celle décrite sur
microsoft.public.fr.windows.vista.general (BSOD, perte des mots de
passe, des points de restauration, etc ...), il serait peut être bon
d'y faire le ménage avant de poursuivre ;-)

thomas a écrit :
ben non cela ne marche pas mieux mais ce qui est bizarre c'est que si je
clique sur annuler dans la boîte de recherche , Chemin =
objFolder.ParentFolder.ParseName(objFolder.Title).Path restitue le chemin
que j'ai défini par défaut et pas celui que la boîte affiche




--

Cordialement,

Jacques.
Avatar
Daniel.C
Publie tout ton code.
Daniel
"thomas" <nomail> a écrit dans le message de news:

Je dis depuis le début que je veux récupérer un chemin bien défini contenu
dans une variable : c:toto dans mon exemple


"Daniel.C" a écrit dans le message de groupe de
discussion :
"je récupère bien le chemin choisi par la boite de dialogue mais la boite
de
dialogue ne se positionne pas sur le chemin par defaut"
"ce n'est pas le chemin courant que je veux par defaut mais un chemin que
je
specifie"
Il faudrait savoir ce que tu veux.
Daniel



Avatar
isabelle
bonjour Thomas,

Sub ChoixRepertoire()
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Dim Chemin As String

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)

On Error Resume Next
Set oFolderItem = objFolder.Items.Item
Chemin = oFolderItem.Path

MsgBox Chemin
End Sub

isabelle

thomas a écrit :
Je dis depuis le début que je veux récupérer un chemin bien défini contenu
dans une variable : c:toto dans mon exemple


"Daniel.C" a écrit dans le message de groupe de
discussion :
"je récupère bien le chemin choisi par la boite de dialogue mais la boite de
dialogue ne se positionne pas sur le chemin par defaut"
"ce n'est pas le chemin courant que je veux par defaut mais un chemin que je
specifie"
Il faudrait savoir ce que tu veux.
Daniel



Avatar
thomas
Le problème se posait aussi au bureau

J'avais bien changé Dim Chemin as string en Dim Chemin as Variant

Avec CVar(Chemin)) ça marche!

Merci



"Jacques93" a écrit dans le message de groupe de discussion
: #
Bonjour thomas,
Bizarre, chez moi cela réagit bien comme ça :

Dim Chemin As String

Racine = "BureauJacques"

Dim Chemin as Variant

Racine "C:Toto"

Si je laisse :

Dim Chemin as String

mais que je force la conversion avec

.BrowseForFolder(&H0&, "Choisissez un dossier", &H1&, CVar(Chemin))

Racine = "C:Toto"

De même si j'ajoute une référence à Microsoft Shell Controls And
Automation (Shell32.dll), et que je déclare :

Dim objShell As Shell
Dim objFolder As Folder
Dim Chemin As String

Chemin = "c:toto"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisissez un
dossier", &H1&, Chemin)

c'est bon, la conversion étant implicite.

NB : Si tu travailles sur la même machine que celle décrite sur
microsoft.public.fr.windows.vista.general (BSOD, perte des mots de
passe, des points de restauration, etc ...), il serait peut être bon
d'y faire le ménage avant de poursuivre ;-)

thomas a écrit :
ben non cela ne marche pas mieux mais ce qui est bizarre c'est que si je
clique sur annuler dans la boîte de recherche , Chemin > objFolder.ParentFolder.ParseName(objFolder.Title).Path restitue le chemin
que j'ai défini par défaut et pas celui que la boîte affiche




--

Cordialement,

Jacques.
Avatar
Jacques93
Tant mieux, mais tout de même bizarre que les autres méthodes ne
fonctionnent pas. En tout cas merci du retour :-)

thomas a écrit :
Le problème se posait aussi au bureau

J'avais bien changé Dim Chemin as string en Dim Chemin as Variant

Avec CVar(Chemin)) ça marche!

Merci





--

Cordialement,

Jacques.
1 2