Erreur lors d'un choix de dossier

mdidish

XLDnaute Junior
Bonjour
Dans une macro, le code ci-dessous permet à l'utilisateur de choisir un répertoire :

VB:
    Set objFolder = Nothing
    Do While objFolder Is Nothing
        Set objShell = CreateObject("Shell.Application")
        Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir le répertoire contenant la base de données", &H1&)
    Loop
    Set oFolderItem = objFolder.Items.Item
    Chemin = oFolderItem.Path & "\" & "Base de données.xlsx"

Ce code marche bien, sauf si l'utilisateur choit le bureau (sur Windows 7), auquel cas j'ai une erreur sur la ligne "Chemin = ..."
1/ Comment résoudre ce problème ?
2/ Peut-on choisir le répertoire sur lequel s'ouvre la fenêtre de recherche de dossier (par exemple le répertoire du classeur actif) ?
(à l'instar de .InitialFileName = Application.DefaultFilePath & " \ " de Application.FileDialog(msoFileDialogFolderPicker) )

Merci par avance
 

david84

XLDnaute Barbatruc
Re : Erreur lors d'un choix de dossier

Bonjour,
je n'ai pas l'habitude d'utiliser Shell mais 3 remarques :
- déjà, déclare tes variables c'est mieux ne serait-ce que pour comprendre dans un 1er temps:
cocher Microsoft Shell Controls and Automation
Code:
Dim objFolder As Folder
Dim objShell As Shell
Dim oFolderItem As FolderItem
Dim Chemin As String
Code:
 Set objShell = New Shell
        Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir le répertoire contenant la base de données", &H1&)
- La fonction BrowseForFolder te ramène un dossier (Folder). Or le l'icone représentant le bureau ne me semble pas représenter un dossier. Peut-être est-ce cela le problème.
- Si tu passe par Utilisateur>Bureau (avec l'icone de dossier) cela ne plante pas.
Après il y a sûrement moyen de sélectionner directement le bureau mais je pense qu'il ne faut pas passer par cette fonction.
A+
 

Staple1600

XLDnaute Barbatruc
Re : Erreur lors d'un choix de dossier

Bonjour à tous

Avec cet exemple, la MsgBox affiche le chemin du bureau si sélection icône du bureau
NB: Pour ceux que cela intéresse, voir ici liste des constantes des Ce lien n'existe plus
Code:
Sub a()
Const DESKTOP = &H10&
Const WINDOW_HANDLE = 0
Const OPTIONS = 0
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(DESKTOP)
Set objFolderItem = objFolder.Self
strPath = objFolderItem.Path
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder _
    (WINDOW_HANDLE, "Choisir un dossier:", OPTIONS, strPath)
If objFolder Is Nothing Then
    End
End If
Set objFolderItem = objFolder.Self
objPath = objFolderItem.Path
MsgBox objPath
End Sub
tests ok sur XP/XL2K3
à tester donc sur W7/XL2K13
 

mdidish

XLDnaute Junior
Re : Erreur lors d'un choix de dossier

Merci pour vos réponses.
La solution de Staple1600 marche sur W7, le chemin du bureau est correctement affiché.

En revanche concernant le chemin qui est affiché par défaut, si j'assigne à DESKTOP un autre répertoire, par exemple C:\Test, l'utilisateur ne peut se déplacer que dans les sous-répertoires du répertoire Test (screen de droite en PJ).
Je n'ai pas trouvé sur MSDN comment changer pour que l'utilisateur ait toujours accès à l'ensemble des répertoires (comme sur le screen de gauche).

Seule la méthode Application.FileDialog(msoFileDialogFolderPicker) le permet ? (mais je la trouve moins intuitive pour l'utilisateur lorsqu'il s'agit de sélectionner un répertoire)
 

Pièces jointes

  • essai1.jpg
    essai1.jpg
    38.3 KB · Affichages: 51
  • essai1.jpg
    essai1.jpg
    38.3 KB · Affichages: 51
  • essai1.jpg
    essai1.jpg
    38.3 KB · Affichages: 61

Staple1600

XLDnaute Barbatruc
Re : Erreur lors d'un choix de dossier

Re

mdidish
J'ai pourtant mis un lien dans mon précédent message ... ;
NB: Pour ceux que cela intéresse, voir ici liste des constantes des Ce lien n'existe plus
Code:
Sub b()
Const MON_PC = &H11&
Const WINDOW_HANDLE = 0
Const OPTIONS = 0
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(MON_PC)
Set objFolderItem = objFolder.Self
strPath = objFolderItem.Path
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder _
    (WINDOW_HANDLE, "Choisir un dossier:", OPTIONS, strPath)
If objFolder Is Nothing Then
    End
End If
Set objFolderItem = objFolder.Self
objPath = objFolderItem.Path
MsgBox objPath
End Sub
 
Dernière édition:

mdidish

XLDnaute Junior
Re : Erreur lors d'un choix de dossier

J'ai mal expliqué ; je voudrais :
- que la fenêtre de choix du répertoire s'ouvre directement sur le répertoire dans lequel se trouve le fichier Excel
- mais que l'utilisateur puisse, si besoin, accéder aux autres répertoires.

On y arrive avec Application.FileDialog(msoFileDialogFolderPicker), avec la paramètre .InitialFileName = Application.DefaultFilePath & " \.
En revanche je n'y arrive pas par objShell.BrowseForFolder (voir la PJ de mon précédent post : à gauche ce que j'aimerais, à droite ce que j'obtiens, en considérant que le fichier Excel se trouve dans le répertoire "C:\Test").
 

david84

XLDnaute Barbatruc
Re : Erreur lors d'un choix de dossier

On y arrive avec Application.FileDialog(msoFileDialogFolderPicker), avec la paramètre .InitialFileName = Application.DefaultFilePath & " \
Oui mais cette boîte de dialogue est faite pour cela, donc c'est normal qu'elle offre plus de possibilité.
Ceci-dit à quoi fais-tu allusion quand tu évoques la possibilité dans msoFileDialogFolderPicker d'accéder aux autres répertoires ? Parles-tu du menu général situé à gauche ou de la zone de texte permettant de taper le nom d'un dossier ?

Le 3ème argument de la méthode BrowseForFolder te donne accès à certaines options (cf. Ce lien n'existe plus), dont celle d'inclure une zone de texte permettant une éventuelle recherche. Regarde peut-être du côté des options accessibles via cette possibilité (nommée structure BROWSEINFO)
A+
 

mdidish

XLDnaute Junior
Re : Erreur lors d'un choix de dossier

Bonsoir
Merci David84 pour ton aide.

J'ai finalement trouvé la réponse Ce lien n'existe plus :
"The root folder to use in the dialog box. The user cannot browse higher in the tree than this folder"

Du coup je reviens à msoFileDialogFolderPicker, qui permet d'ouvrir l'arborescence dans le répertoire contenant le fichier en cours (par exemple), mais en laissant la possibilité à l'utilisateur de sélectionner un répertoire localisé ailleurs et pas uniquement dans les sous-répertoires, grâce au menu déroulant se situant dans la partie supérieure de la fenêtre.
 

Discussions similaires

Statistiques des forums

Discussions
312 239
Messages
2 086 508
Membres
103 236
dernier inscrit
Menni