OVH Cloud OVH Cloud

lister les répertoires d'un disque

4 réponses
Avatar
JFP
Bonjour,

Je voudrais dans mon application access 2000, faire apparaitre une boite de
dialogue qui me permette de sélectionner un répertoire, afin de pouvoir
récupérer le chemin d'accès correspondant dans une variable.

J'avais trouvé une solution en VB qui utilisait une treeview. Ca ne marchait
pas mal, mais il y avait deux inconvénients majeurs :
- Le code ne permettait pas d'afficher dans la listbox les différents
lecteurs, mais uniquement les répertoires d'un lecteur donné,
- le temps de chargement de la liste des répertoire était particulièrement
longue.

Existe-t-il une solution via les API du type "openfile", mais qui ne
permettrait de lister et sélectionner que les répertoires, sans les fichiers
qui y sont contenus ?

Merci d'avance,
JFP

4 réponses

Avatar
Patrick Fredin
Bonjour,

Je pense que cela te conviendra sans problème :


'Choisir un répertoire - Fonctions API
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As
BROWSE_INFO_TYPE) As Long

Private Declare Function SHGetPathFromIDList Lib "shell32" _
(ByVal pidList As Long, ByVal lpBuffer As String) As Long

Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" _
(ByVal lpString1 As String, ByVal lpString2 As String) As Long


'Choisir un répertoire - Code VB/VBA
Function RepertoireChoisi(ByVal Titre As String) As String
Const BIF_RETURNONLYFSDIRS = 1
Const BIF_DONTGOBELOWDOMAIN = 2
Const MAX_PATH = 260

Dim lpIDList As Long
Dim sBuffer As String
Dim tBrowseInfo As BROWSE_INFO_TYPE

With tBrowseInfo
.lpszTitle = lstrcat(Titre, "")
.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
End With

lpIDList = SHBrowseForFolder(tBrowseInfo)

If lpIDList Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
RepertoireChoisi = sBuffer
Else
RepertoireChoisi = "Faux"
End If
End Function

Je pense que tout est là.


--
Patrick
"JFP" wrote in message
news:418bbf61$0$18490$
Bonjour,

Je voudrais dans mon application access 2000, faire apparaitre une boite
de
dialogue qui me permette de sélectionner un répertoire, afin de pouvoir
récupérer le chemin d'accès correspondant dans une variable.

J'avais trouvé une solution en VB qui utilisait une treeview. Ca ne
marchait
pas mal, mais il y avait deux inconvénients majeurs :
- Le code ne permettait pas d'afficher dans la listbox les différents
lecteurs, mais uniquement les répertoires d'un lecteur donné,
- le temps de chargement de la liste des répertoire était particulièrement
longue.

Existe-t-il une solution via les API du type "openfile", mais qui ne
permettrait de lister et sélectionner que les répertoires, sans les
fichiers
qui y sont contenus ?

Merci d'avance,
JFP





Avatar
JFP
Heu... ce n'est pas encore tout à fait ça !!
j'ai copié le script dans un module tel que tu me l'as présenté.
Dans l'évènement clic de mon bouton, j'ai mis "=RepertoireChoisi()"... mais
rien ne se passe
Je suis alors passé à l'éditeur VB, et dans le fenêtre d'excécution, j'ai
tapé :
?RepertoireChoisi()
et la, j'ai un message d'erreur : "Erreur de compilation : type défini par
l'utilisateur non défini" et en surbrillance la première ligne du script :
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As
BROWSE_INFO_TYPE) As Long

Alors ?...
il manque un bout de code ?
ou bien c'est moi qui m'y prends mal ?

Merci de ton aide,
JFP


"Patrick Fredin" a écrit dans le
message de news: #
Bonjour,

Je pense que cela te conviendra sans problème :


'Choisir un répertoire - Fonctions API
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As
BROWSE_INFO_TYPE) As Long

Private Declare Function SHGetPathFromIDList Lib "shell32" _
(ByVal pidList As Long, ByVal lpBuffer As String) As Long

Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" _
(ByVal lpString1 As String, ByVal lpString2 As String) As Long


'Choisir un répertoire - Code VB/VBA
Function RepertoireChoisi(ByVal Titre As String) As String
Const BIF_RETURNONLYFSDIRS = 1
Const BIF_DONTGOBELOWDOMAIN = 2
Const MAX_PATH = 260

Dim lpIDList As Long
Dim sBuffer As String
Dim tBrowseInfo As BROWSE_INFO_TYPE

With tBrowseInfo
.lpszTitle = lstrcat(Titre, "")
.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
End With

lpIDList = SHBrowseForFolder(tBrowseInfo)

If lpIDList Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
RepertoireChoisi = sBuffer
Else
RepertoireChoisi = "Faux"
End If
End Function

Je pense que tout est là.


--
Patrick
"JFP" wrote in message
news:418bbf61$0$18490$
Bonjour,

Je voudrais dans mon application access 2000, faire apparaitre une boite
de
dialogue qui me permette de sélectionner un répertoire, afin de pouvoir
récupérer le chemin d'accès correspondant dans une variable.

J'avais trouvé une solution en VB qui utilisait une treeview. Ca ne
marchait
pas mal, mais il y avait deux inconvénients majeurs :
- Le code ne permettait pas d'afficher dans la listbox les différents
lecteurs, mais uniquement les répertoires d'un lecteur donné,
- le temps de chargement de la liste des répertoire était
particulièrement


longue.

Existe-t-il une solution via les API du type "openfile", mais qui ne
permettrait de lister et sélectionner que les répertoires, sans les
fichiers
qui y sont contenus ?

Merci d'avance,
JFP









Avatar
p.handerek
Bonsoir
il y a un exemple super bien fait à
www.ticegestion.com
rubrique utilitaires access et exel
sous le titre
Afficher des informations sur un fichier ou un dossier (sous Access 2000)

le code est ouvert

en esperant t'aider

ph

"JFP" a écrit dans le message de news:
418bbf61$0$18490$
Bonjour,

Je voudrais dans mon application access 2000, faire apparaitre une boite
de
dialogue qui me permette de sélectionner un répertoire, afin de pouvoir
récupérer le chemin d'accès correspondant dans une variable.

J'avais trouvé une solution en VB qui utilisait une treeview. Ca ne
marchait
pas mal, mais il y avait deux inconvénients majeurs :
- Le code ne permettait pas d'afficher dans la listbox les différents
lecteurs, mais uniquement les répertoires d'un lecteur donné,
- le temps de chargement de la liste des répertoire était particulièrement
longue.

Existe-t-il une solution via les API du type "openfile", mais qui ne
permettrait de lister et sélectionner que les répertoires, sans les
fichiers
qui y sont contenus ?

Merci d'avance,
JFP





Avatar
JFP
Effectivement le code est efficace et rapide...
Juste un petit problème, il refuse la sélectiond'un dossier qui contient
trop de fichier (celui que j'ai sélectionné en contient 500)

Entretemps j'ai fini par trouver la solution à l'adresse suivante (à toutes
fins utiles) :
http://www.excelabo.net/xl/messages.php#choixdossier

Merci de ton aide
JFP



"p.handerek" a écrit dans le message de news:
418be458$0$8246$
Bonsoir
il y a un exemple super bien fait à
www.ticegestion.com
rubrique utilitaires access et exel
sous le titre
Afficher des informations sur un fichier ou un dossier (sous Access 2000)

le code est ouvert

en esperant t'aider

ph

"JFP" a écrit dans le message de news:
418bbf61$0$18490$
Bonjour,

Je voudrais dans mon application access 2000, faire apparaitre une boite
de
dialogue qui me permette de sélectionner un répertoire, afin de pouvoir
récupérer le chemin d'accès correspondant dans une variable.

J'avais trouvé une solution en VB qui utilisait une treeview. Ca ne
marchait
pas mal, mais il y avait deux inconvénients majeurs :
- Le code ne permettait pas d'afficher dans la listbox les différents
lecteurs, mais uniquement les répertoires d'un lecteur donné,
- le temps de chargement de la liste des répertoire était
particulièrement


longue.

Existe-t-il une solution via les API du type "openfile", mais qui ne
permettrait de lister et sélectionner que les répertoires, sans les
fichiers
qui y sont contenus ?

Merci d'avance,
JFP