OVH Cloud OVH Cloud

rechercher dossiers (répertoire)

15 réponses
Avatar
SoniaG
Bonjour,
Comment en VB rechercher un sous-répertoire dans un répertoire donné ?
Par avance merci :o)
SoniaG

10 réponses

1 2
Avatar
3stone
Salut,

"SoniaG"
| Comment en VB rechercher un sous-répertoire dans un répertoire donné ?


Heu... avec si peu... je dirais Dir()


ou alors ceci ?
http://www.3stone.be/access/articles.php?lng=fr&pg1


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
soniagaubert
Bonjour 3stone,

En effet ma question était un peu laconique : en fait je voudrais
savoir quelle commande je peux employer pour chercher un
sous-répertoire qui peut lui-même se trouver dans un
sous-répertoire... et l'ouvrir depuis un bouton sur un formulaire...
La commande dir ne fait que lire le contenu d'un répertoire mais ne va
pas chercher à l'intérieur des sous-répertoire pour voir si le
sous-répertoire recherché n'y est pas...
Donc, ce qui suit ne fonctionne pas :

Dim RepObjet As String
Dim RepDossier As String
Dim stAppName As String

RepObjet = "I:" & Me![Abreviation] & "" & Me![Refobjet]
RepDossier = Me![NumFonds] & Me![Cote] & "_" & Me![SousCote]

If Dir(RepObjet & "" & RepDossier, vbDirectory) <> "" Then
stAppName = "explorer.exe " & RepObjet & "" & RepDossier & " "
Call Shell(stAppName, 1)

Else
MsgBox "Dans le répertoire : " & RepObjet & "" & RepDossier &
"Il n'existe pas de répertoire dossier " & Me![NumFonds] & Me![Cote] &
"_" & Me![SousCote], vbInformation
End If

... et franchement j'ai du mal avec le BROWSEINFO : trop compliqué
pour ma pt'it tête d'éternelle novice.. et ne semble pas non plus
réellement répondre tout à fait à ma demande... (à moins que vous
ne m'expliquiez comment ?)

Il n'existe pas de commande Dos pour faire une recherche à partir d'un
endroit donné de l'arborescense fichier n'est-ce pas ?
Merci par avance,
SoniaG




3stone wrote:
Salut,

"SoniaG"
| Comment en VB rechercher un sous-répertoire dans un répertoire donn é ?


Heu... avec si peu... je dirais Dir()


ou alors ceci ?
http://www.3stone.be/access/articles.php?lng=fr&pg1


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/


Avatar
3stone
Salut,

En effet ma question était un peu laconique : en fait je voudrais
savoir quelle commande je peux employer pour chercher un
sous-répertoire qui peut lui-même se trouver dans un
sous-répertoire... et l'ouvrir depuis un bouton sur un formulaire...
La commande dir ne fait que lire le contenu d'un répertoire mais ne va
pas chercher à l'intérieur des sous-répertoire pour voir si le
sous-répertoire recherché n'y est pas...
Donc, ce qui suit ne fonctionne pas :

Dim RepObjet As String
Dim RepDossier As String
Dim stAppName As String

RepObjet = "I:" & Me![Abreviation] & "" & Me![Refobjet]
RepDossier = Me![NumFonds] & Me![Cote] & "_" & Me![SousCote]

If Dir(RepObjet & "" & RepDossier, vbDirectory) <> "" Then
stAppName = "explorer.exe " & RepObjet & "" & RepDossier & " "
Call Shell(stAppName, 1)

Else
MsgBox "Dans le répertoire : " & RepObjet & "" & RepDossier &
"Il n'existe pas de répertoire dossier " & Me![NumFonds] & Me![Cote] &
"_" & Me![SousCote], vbInformation
End If

... et franchement j'ai du mal avec le BROWSEINFO : trop compliqué
pour ma pt'it tête d'éternelle novice.. et ne semble pas non plus
réellement répondre tout à fait à ma demande... (à moins que vous
ne m'expliquiez comment ?)

Il n'existe pas de commande Dos pour faire une recherche à partir d'un
endroit donné de l'arborescense fichier n'est-ce pas ?
-----------------------------------------------------

Ce que tu tente avec Shell() ne te conviendra pas...
tu n'as pas de valuer en retour (idem pour les DOS ;-)

Utilise la fonction (ou une autre) que tu colle simplement dans
un module général (onglet Module), ensuite, tu l'appelle par :

Dim strRepertoire As String
strRepertoire = GetFolderName("Choix du répertoire :")


Si par contre tu connais le nom du sous-répertoire et que c'est un sous
répertoire de répertoire de la base, regarde ceci pour trouver l'emplacement:
http://www.3stone.be/access/articles.php?lng=fr&pg
auquel il te suffit d'ajouter le nom du sous-répertoire.


Heu... c'est toujours pas ca ? ;-)


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
soniagaubert
-----------------------------------------------------

Ce que tu tente avec Shell() ne te conviendra pas...
tu n'as pas de valuer en retour (idem pour les DOS ;-)

Utilise la fonction (ou une autre) que tu colle simplement dans
un module général (onglet Module), ensuite, tu l'appelle par :

Dim strRepertoire As String
strRepertoire = GetFolderName("Choix du répertoire :")



Ouais, j'ai fait ça : et ça me trouve... le bureau ! vachement
avancé je suis...
Tout de façon je comprends pas dans cette formule je peux indiquer le
sous-répertoire que je cherche !!?

Si par contre tu connais le nom du sous-répertoire et que c'est un sous
répertoire de répertoire de la base, regarde ceci pour trouver l'empl acement:
http://www.3stone.be/access/articles.php?lng=fr&pg
auquel il te suffit d'ajouter le nom du sous-répertoire.


Ben non, c'est évidemment le répertoire de la base (!!) que je
cherche...



Heu... c'est toujours pas ca ? ;-)

Ben non, pas vraiment ! je me demandes si tu as compris ce que je

voulais faire ?
Je veux que le système cherche un sous-répertoire (Windows) dont je
connais le nom et qui est certainement contenu dans un autre
répertoire, mais pas au premier niveau : le système doit donc
chercher UN SOUS-(sous)-REPERTOIRE dans DANS TOUS LES SOUS-REPERTOIRES
DU REPERTOIRE QUE JE LUI INDIQUES (en lui donnant le nom et son chemin
d'accès : en l'occurence dans une des partitions d'un disque)
Si tu as d'autres idées... sinon je crois que je vais renonçer :o[

Bonne soirée,
SoniaG

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/


Avatar
3stone
Salut,

a écrit
Dim strRepertoire As String
strRepertoire = GetFolderName("Choix du répertoire :")



Ouais, j'ai fait ça : et ça me trouve... le bureau ! vachement
avancé je suis...


il te retourne le répertoire que tu auras sélectionné !!!



Si par contre tu connais le nom du sous-répertoire et que c'est un sous
répertoire de répertoire de la base, regarde ceci pour trouver l'emplacement:
http://www.3stone.be/access/articles.php?lng=fr&pg
auquel il te suffit d'ajouter le nom du sous-répertoire.


Ben non, c'est évidemment le répertoire de la base (!!) que je
cherche...


C'est ou ne n'est pas ??

dans le premier cas, le lien est parfait !




Heu... c'est toujours pas ca ? ;-)

Ben non, pas vraiment ! je me demandes si tu as compris ce que je

voulais faire ?
Je veux que le système cherche un sous-répertoire (Windows) dont je
connais le nom et qui est certainement contenu dans un autre
répertoire, mais pas au premier niveau : le système doit donc
chercher UN SOUS-(sous)-REPERTOIRE dans DANS TOUS LES SOUS-REPERTOIRES
DU REPERTOIRE QUE JE LUI INDIQUES (en lui donnant le nom et son chemin
d'accès : en l'occurence dans une des partitions d'un disque)


Ah bon...
Trouver le chemin d'un *éventuel* sous-sous...répertoire ?

Pour un fichier, oui, cela existe par "Application.FileSearch"
mais je pense qu'il n'y a rien de prévu de semblable pour un répertoire...
Je regarde et je reviens si je trouve quelque chose (de propre ;-)


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/

Avatar
soniagaubert
Merci Pierre de ta patience ;o)
De mon côté je cherche aussi mais pour l'instant je ne trouve pas
grand chose... ce qui m'étonne un peu... du mal à imaginer que jamais
personne n'ai eu besoin de faire quelque chose comme ça..
mais bon !
Effectivement si
With Application.FileSearch
existait pour les dossiers, ce serait bien (sauf que "Application" ça
veut dire quoi exactement ? est-ce que le système cherche partout, sur
tous les disques ?)

... là je cherche du côté de :
CreateObject("Scripting.FileSystemObject") et GetFolder... mais je
rame énormément...
A plus tard et encore merci de ton aide,
SoniaG
Avatar
soniagaubert
Bon re-moi,

Voilà où j'en suis : dans un module de classe j'ai écrits :

Function fnGetSubFoldersInDirectory(sPath As String) As String

Dim RepDossier As String
Dim stAppName As String
Dim f As Form
'Dim NomForm As String

RepDossier = f![NumFonds] & f![Cote] & "_" & f![SousCote]

Dim fso As Object
Dim Directory As Object
Dim SubFolders As Object
Dim Folders As Object
Dim sTmp As String

Set fso = CreateObject("Scripting.FileSystemObject")
Set Directory = fso.GetFolder(sPath)
Set SubFolders = Directory.SubFolders
For Each Folders In SubFolders
sTmp = sTmp & Folders.Name & ";"
fnGetSubFoldersInDirectory (Folders)
If Folders.Name = RepDossier Then
stAppName = "explorer.exe " & Folders.Path
Call Shell(stAppName, 1)
End If

Next Folders
If sTmp <> "" Then
sTmp = Left(sTmp, Len(sTmp) - 1) & ""
End If
fnGetSubFoldersInDirectory = sTmp
Set Folders = Nothing
Set SubFolders = Nothing
Set fso = Nothing
Set Directory = Nothing

End Function

Quand j'écris ça (ou l'équivalent) en Private (directement dans le
formulaire), ça marche à peu près sauf que je n'arrive pas à faire
descendre la recherche dans les sous-répertoires (je n'arrive pas à
écrire ce qu'il faudrait pour que ça descende d'un niveau...)
Bon mais dans le module ça plante évidemment sur RepDossier, mais
j'ai absolument besoin que la fonction aille chercher des éléments
dans mon formulaire pour reconstituer le nom du répertoire
recherché...
Help donc :o[
La novice,
SoniaG
Avatar
3stone
Bonjour,

Voilà où j'en suis : dans un module de classe j'ai écrits :

Function fnGetSubFoldersInDirectory(sPath As String) As String

Dim RepDossier As String
Dim stAppName As String
Dim f As Form
'Dim NomForm As String

RepDossier = f![NumFonds] & f![Cote] & "_" & f![SousCote]

Dim fso As Object
Dim Directory As Object
Dim SubFolders As Object
Dim Folders As Object
Dim sTmp As String

Set fso = CreateObject("Scripting.FileSystemObject")
Set Directory = fso.GetFolder(sPath)
Set SubFolders = Directory.SubFolders
For Each Folders In SubFolders
sTmp = sTmp & Folders.Name & ";"
fnGetSubFoldersInDirectory (Folders)
If Folders.Name = RepDossier Then
stAppName = "explorer.exe " & Folders.Path
Call Shell(stAppName, 1)
End If

Next Folders
If sTmp <> "" Then
sTmp = Left(sTmp, Len(sTmp) - 1) & ""
End If
fnGetSubFoldersInDirectory = sTmp
Set Folders = Nothing
Set SubFolders = Nothing
Set fso = Nothing
Set Directory = Nothing

End Function

Quand j'écris ça (ou l'équivalent) en Private (directement dans le
formulaire), ça marche à peu près sauf que je n'arrive pas à faire
descendre la recherche dans les sous-répertoires (je n'arrive pas à
écrire ce qu'il faudrait pour que ça descende d'un niveau...)
Bon mais dans le module ça plante évidemment sur RepDossier, mais
j'ai absolument besoin que la fonction aille chercher des éléments
dans mon formulaire pour reconstituer le nom du répertoire
recherché...
-------------------------------

Oui, en fait, il faut rendre ta fonction récursive....
lorsque tu atteint un répertoire, re-appeler la fonction !

C'est à cela que je pensais lorsque je parlais de qque chose de propre ;-)


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
soniagaubert
Ben Pierre, OK pour ton assentiment (et ma fonction est bien récursive
en l'état...) mais tu ne réponds pas à ma question concernant la
référence :
RepDossier = f![NumFonds] & f![Cote] & "_" & f![SousCote]
Est-ce possible de faire quelque chose comme ça ou pas ? c'est à dire
que ma fonction utilise des valeurs incluses dans mon formulaire !???
A +
SoniaG
Avatar
3stone
Salut,

a écrit
Ben Pierre, OK pour ton assentiment

Pour ce qu'il vaut... ;-)


(et ma fonction est bien récursive
en l'état...) mais tu ne réponds pas à ma question

Le problème est que tu dois mémoriser chaque branche
et l'ajouter au Path actuel... et recouper la branche
lorsque tu "remonte".


Si tu souhaite une solution immédiate:
Crée dans chaque répertoir un fichier texte vide au nom du repertoire!

MonRéperoire.txt

et fais la recherche avec FileSearch ;-)


Bon, je rigole (à moitié ;)


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
1 2