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

recherche de repertoires

10 réponses
Avatar
steph b
Bonjour
Je voudrais si possible qu'une macro me fasse une recherche, alros je vais
essayer d'etre explicite.
J'ai un repertoire nommé "s:\" qui correspond à un repertoire partagé, qui
lui meme contient d'autre lettre de mappage lecteur disque dur.
Dans ces répertoires il y a une multitude de dossiers.
J'aimerais que, tout d'abord, la macro me recherche tous les répertoires
contenant le terme "EVP" ca peut etre du genre "*EVP*"
et aussi qu'il me les liste le chemin de chaque dossier sous une feuille
excel ligne par ligne (avec le nom de la lettre du lecteur (les lecteurs
mappés)).

merci d avance

10 réponses

Avatar
MichD
Bonjour,

Essaie comme ça : 2 variables à définir dans la procédure Test_GetFolder

'-----------------------------------
Sub Test_GetFolder()
Dim Dict As Object, Chemin As String, Expression As String

'***********Variable à définir*****************
'Répertoire de départ
Chemin = "C:UsersDMDocumentsBook22_files"
'condition : dont le nom des répertoires contient
'l'expression à déterminer..
Expression = "bo"
'**********************************************

' Création d'un objet Dictionnaire
Set Dict = CreateObject("Scripting.Dictionary")
' Si récursif, retourne les répertoires dans un objet dictionnaire
If GetFolders(Chemin, Dict, Expression, True) Then
'Ajout d'une feuille au répertoire
Sheets.Add
'récupère directement le tableau des items du dictionaire
'dans la colonne A de la nouvelle feuille
Range("A1:A" & Dict.Count).Value = _
Application.Transpose(Dict.Items)
End If
End Sub
'-----------------------------------
Function GetFolders(Chemin As String, _
Dict As Object, Expression As String, _
Optional Récursif As Boolean) As Boolean

Dim FS As Object, MyFolder As Object, MySubFolder As Object
Set FS = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
Set MyFolder = FS.GetFolder(Chemin)
If Err <> 0 Then
'chemin incorrect ou inexistant
Err = 0
GetFolders = False
Exit Function
End If
'si récursif est égale à true, rappel de la fonction
If Récursif Then
For Each MySubFolder In MyFolder.SubFolders
If InStr(1, MySubFolder, Expression, vbTextCompare) > 0 Then
'donne seulement le nom des répertoires
'Dict.Add MySubFolder.Name, MySubFolder.Name
'donne seulement le chemin complet des répertoires
Dict.Add MySubFolder.Path, MySubFolder.Path
End If
GetFolders MySubFolder.Path, Dict, Expression, True
Next
End If
' Retourne True si aucune erreur est trouvé.
If Dict.Count > 0 Then GetFolders = True
End Function
'-----------------------------------


MichD
--------------------------------------------
"steph b" a écrit dans le message de groupe de discussion : 4dcce9e3$0$30747$

Bonjour
Je voudrais si possible qu'une macro me fasse une recherche, alros je vais
essayer d'etre explicite.
J'ai un repertoire nommé "s:" qui correspond à un repertoire partagé, qui
lui meme contient d'autre lettre de mappage lecteur disque dur.
Dans ces répertoires il y a une multitude de dossiers.
J'aimerais que, tout d'abord, la macro me recherche tous les répertoires
contenant le terme "EVP" ca peut etre du genre "*EVP*"
et aussi qu'il me les liste le chemin de chaque dossier sous une feuille
excel ligne par ligne (avec le nom de la lettre du lecteur (les lecteurs
mappés)).

merci d avance
Avatar
steph b
merci michel le code marche sur bien..

c est genial

j'aimerais ensuite car en fait il me donne vraiment tous les repertoires
(avec le terme expression ) faire un tri

par exemple si le denier mot de la liste constituée par ta macro est "LOGI"
ou "LOGA" ou "LOGO" alors il me supprime la ligne entiere en remontant sans
laisser de ligne vide.


merci d avance




"MichD" a écrit dans le message de news:
iqlsn7$g7k$
Bonjour,

Essaie comme ça : 2 variables à définir dans la procédure Test_GetFolder

'-----------------------------------
Sub Test_GetFolder()
Dim Dict As Object, Chemin As String, Expression As String

'***********Variable à définir*****************
'Répertoire de départ
Chemin = "C:UsersDMDocumentsBook22_files"
'condition : dont le nom des répertoires contient
'l'expression à déterminer..
Expression = "bo"
'**********************************************

' Création d'un objet Dictionnaire
Set Dict = CreateObject("Scripting.Dictionary")
' Si récursif, retourne les répertoires dans un objet dictionnaire
If GetFolders(Chemin, Dict, Expression, True) Then
'Ajout d'une feuille au répertoire
Sheets.Add
'récupère directement le tableau des items du dictionaire
'dans la colonne A de la nouvelle feuille
Range("A1:A" & Dict.Count).Value = _
Application.Transpose(Dict.Items)
End If
End Sub
'-----------------------------------
Function GetFolders(Chemin As String, _
Dict As Object, Expression As String, _
Optional Récursif As Boolean) As Boolean

Dim FS As Object, MyFolder As Object, MySubFolder As Object
Set FS = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
Set MyFolder = FS.GetFolder(Chemin)
If Err <> 0 Then
'chemin incorrect ou inexistant
Err = 0
GetFolders = False
Exit Function
End If
'si récursif est égale à true, rappel de la fonction
If Récursif Then
For Each MySubFolder In MyFolder.SubFolders
If InStr(1, MySubFolder, Expression, vbTextCompare) > 0 Then
'donne seulement le nom des répertoires
'Dict.Add MySubFolder.Name, MySubFolder.Name
'donne seulement le chemin complet des répertoires
Dict.Add MySubFolder.Path, MySubFolder.Path
End If
GetFolders MySubFolder.Path, Dict, Expression, True
Next
End If
' Retourne True si aucune erreur est trouvé.
If Dict.Count > 0 Then GetFolders = True
End Function
'-----------------------------------


MichD
--------------------------------------------
"steph b" a écrit dans le message de groupe de discussion :
4dcce9e3$0$30747$

Bonjour
Je voudrais si possible qu'une macro me fasse une recherche, alros je vais
essayer d'etre explicite.
J'ai un repertoire nommé "s:" qui correspond à un repertoire partagé, qui
lui meme contient d'autre lettre de mappage lecteur disque dur.
Dans ces répertoires il y a une multitude de dossiers.
J'aimerais que, tout d'abord, la macro me recherche tous les répertoires
contenant le terme "EVP" ca peut etre du genre "*EVP*"
et aussi qu'il me les liste le chemin de chaque dossier sous une feuille
excel ligne par ligne (avec le nom de la lettre du lecteur (les lecteurs
mappés)).

merci d avance




Avatar
MichD
| par exemple si le denier mot de la liste constituée
| par ta macro est "LOGI" ou "LOGA" ou "LOGO" alors
| il me supprime la ligne entiere en remontant sans
| laisser de ligne vide.

Désolé, je ne comprends rien à ta question.

MichD
--------------------------------------------
Avatar
steph b
lorsque j'execute la macro qui marche super bien, j'ai une liste de
répertoires

avec cette liste:
si le denier mot de chaque ligne constituée
par ta macro est "LOGI" ou "LOGA" ou "LOGO" alors
il me supprime la ligne entiere en remontant sans
laisser de ligne vide.

est ce plus clair?



"MichD" a écrit dans le message de news:
iqqt51$vrd$
| par exemple si le denier mot de la liste constituée
| par ta macro est "LOGI" ou "LOGA" ou "LOGO" alors
| il me supprime la ligne entiere en remontant sans
| laisser de ligne vide.

Désolé, je ne comprends rien à ta question.

MichD
--------------------------------------------

Avatar
Jacquouille
Bonjour
Où sont tes LOLO et LOLA ? dans quelle colonne? supposons A>>>

Sub lolo2()
For Each C In Range("a1:a10")
If Right(C & i, 4) = "lolo" Then
C.Rows.EntireRow.Delete
End If
Next
End Sub


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"steph b" a écrit dans le message de groupe de discussion :
4dd12001$0$30755$

lorsque j'execute la macro qui marche super bien, j'ai une liste de
répertoires

avec cette liste:
si le denier mot de chaque ligne constituée
par ta macro est "LOGI" ou "LOGA" ou "LOGO" alors
il me supprime la ligne entiere en remontant sans
laisser de ligne vide.

est ce plus clair?



"MichD" a écrit dans le message de news:
iqqt51$vrd$
| par exemple si le denier mot de la liste constituée
| par ta macro est "LOGI" ou "LOGA" ou "LOGO" alors
| il me supprime la ligne entiere en remontant sans
| laisser de ligne vide.

Désolé, je ne comprends rien à ta question.

MichD
--------------------------------------------

Avatar
steph b
merci mais en fait j'ai une liste de nom et pas que de 4 lettres
comme:
environnement
pollution
divers
inondation

etc..



"Jacquouille" a écrit dans le message de news:
4dd12676$0$14254$
Bonjour
Où sont tes LOLO et LOLA ? dans quelle colonne? supposons A>>>

Sub lolo2()
For Each C In Range("a1:a10")
If Right(C & i, 4) = "lolo" Then
C.Rows.EntireRow.Delete
End If
Next
End Sub


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"steph b" a écrit dans le message de groupe de discussion :
4dd12001$0$30755$

lorsque j'execute la macro qui marche super bien, j'ai une liste de
répertoires

avec cette liste:
si le denier mot de chaque ligne constituée
par ta macro est "LOGI" ou "LOGA" ou "LOGO" alors
il me supprime la ligne entiere en remontant sans
laisser de ligne vide.

est ce plus clair?



"MichD" a écrit dans le message de news:
iqqt51$vrd$
| par exemple si le denier mot de la liste constituée
| par ta macro est "LOGI" ou "LOGA" ou "LOGO" alors
| il me supprime la ligne entiere en remontant sans
| laisser de ligne vide.

Désolé, je ne comprends rien à ta question.

MichD
--------------------------------------------




Avatar
Gloops
steph b a écrit, le 16/05/2011 09:04 :
merci michel le code marche sur bien..

c est genial

j'aimerais ensuite car en fait il me donne vraiment tous les repertoire s
(avec le terme expression ) faire un tri

par exemple si le denier mot de la liste constituée par ta macro est "LOGI"
ou "LOGA" ou "LOGO" alors il me supprime la ligne entiere en remontant sans
laisser de ligne vide.


merci d avance




Bonjour,

Mes neurones ne sont pas tous allumés aujourd'hui, mais j'ai
l'impression d'avoir compris la question (pas de travers j'espère) et d e
voir tout le monde se frotter les yeux devant, alors je vais tenter une
réponse.

Les répertoires à traiter, outre le fait d'avoir Expression dans leur
nom, ne doivent pas y avoir "LOGI", ni "LOGA", ni "LOGO". (Si ce n'est
pas ça, autant oublier la suite.)

Je ne comprends pas très bien l'intérêt d'ajouter les valeurs dans le
classeur pour les enlever ensuite. Sans insister d'ailleurs sur la
confusion entre tri et sélection (le tri consiste à mettre les élé ments
obtenus dans un certain ordre ; la sélection consiste à ne retenir qu e
les éléments répondant à un critère). Ou bien, les feuilles
correspondant aux répertoires avec LOGI, LOGA ou LOGO doivent-elles ê tre
créées, mais pas les lignes ? Je suis parti du principe que si on veu t
exclure les répertoires contenant ces mots dans leur nom, alors non
seulement comme il a été dit on ne doit pas créer des lignes pour e ux,
mais en plus on ne doit pas non plus créer des feuilles. Reste à
vérifier si ce n'est pas une interprétation abusive de ma part.

De ce que j'ai compris du code (oui oui ça va, j'irai mieux demain), un e
feuille est ajoutée pour un répertoire dans le cas où la fonction
GetFolders pour ce répertoire retourne Vrai.

Donc, l'instruction intéressante pour exclure de la création des
feuilles les répertoires contenant une expression clé dans leur nom m e
semble être à la fin de la fonction GetFolders :

If Dict.Count > 0 Then GetFolders = True


que je vais remplacer par

If Dict.Count > 0 And _
InStr(1, Chemin, "LOGI", vbTextCompare) = 0 And _
InStr(1, Chemin, "LOGA", vbTextCompare) = 0 And _
InStr(1, Chemin, "LOGO", vbTextCompare) = 0 _
Then
GetFolders = True
End If

De la sorte, seront retenus les répertoires qui étaient retenus par l e
code existant, mais dont le nom ne contient pas "LOGI" ni "LOGA" ni "LOGO ".

Par ailleurs, dans la feuille créée on ajoute la liste des répertoi res,
stockée dans Dict. Il convient donc aussi, selon les mêmes critères , de
ne pas ajouter dans Dict les répertoires exclus.

Nous avons :
If InStr(1, MySubFolder, Expression, vbTextCompare) > 0 Then
'donne seulement le nom des répertoires
'Dict.Add MySubFolder.Name, MySubFolder.Name
'donne seulement le chemin complet des répertoires
Dict.Add MySubFolder.Path, MySubFolder.Path
End If

et là il faudra aussi retoucher la première ligne

If InStr(1, MySubFolder, Expression, vbTextCompare) > 0 And _
InStr(1, MySubFolder, "LOGI", vbTextCompare) = 0 And _
InStr(1, MySubFolder, "LOGA", vbTextCompare) = 0 And _
InStr(1, MySubFolder, "LOGO", vbTextCompare) = 0 _
Then




Si on n'a pas de répertoire dont le nom contient "LOG" suivi par autre
chose que I, A ou O, on peut simplifier la condition.

Si quelqu'un d'un peu plus réveillé veut bien relire ...
Avatar
steph b
J ai rien compris !!!!

désolé


"Gloops" a écrit dans le message de news:
iqrfmq$h88$
steph b a écrit, le 16/05/2011 09:04 :
merci michel le code marche sur bien..

c est genial

j'aimerais ensuite car en fait il me donne vraiment tous les repertoires
(avec le terme expression ) faire un tri

par exemple si le denier mot de la liste constituée par ta macro est
"LOGI"
ou "LOGA" ou "LOGO" alors il me supprime la ligne entiere en remontant
sans
laisser de ligne vide.


merci d avance




Bonjour,

Mes neurones ne sont pas tous allumés aujourd'hui, mais j'ai
l'impression d'avoir compris la question (pas de travers j'espère) et de
voir tout le monde se frotter les yeux devant, alors je vais tenter une
réponse.

Les répertoires à traiter, outre le fait d'avoir Expression dans leur
nom, ne doivent pas y avoir "LOGI", ni "LOGA", ni "LOGO". (Si ce n'est
pas ça, autant oublier la suite.)

Je ne comprends pas très bien l'intérêt d'ajouter les valeurs dans le
classeur pour les enlever ensuite. Sans insister d'ailleurs sur la
confusion entre tri et sélection (le tri consiste à mettre les éléments
obtenus dans un certain ordre ; la sélection consiste à ne retenir que
les éléments répondant à un critère). Ou bien, les feuilles
correspondant aux répertoires avec LOGI, LOGA ou LOGO doivent-elles être
créées, mais pas les lignes ? Je suis parti du principe que si on veut
exclure les répertoires contenant ces mots dans leur nom, alors non
seulement comme il a été dit on ne doit pas créer des lignes pour eux,
mais en plus on ne doit pas non plus créer des feuilles. Reste à
vérifier si ce n'est pas une interprétation abusive de ma part.

De ce que j'ai compris du code (oui oui ça va, j'irai mieux demain), une
feuille est ajoutée pour un répertoire dans le cas où la fonction
GetFolders pour ce répertoire retourne Vrai.

Donc, l'instruction intéressante pour exclure de la création des
feuilles les répertoires contenant une expression clé dans leur nom me
semble être à la fin de la fonction GetFolders :

If Dict.Count > 0 Then GetFolders = True


que je vais remplacer par

If Dict.Count > 0 And _
InStr(1, Chemin, "LOGI", vbTextCompare) = 0 And _
InStr(1, Chemin, "LOGA", vbTextCompare) = 0 And _
InStr(1, Chemin, "LOGO", vbTextCompare) = 0 _
Then
GetFolders = True
End If

De la sorte, seront retenus les répertoires qui étaient retenus par le
code existant, mais dont le nom ne contient pas "LOGI" ni "LOGA" ni "LOGO".

Par ailleurs, dans la feuille créée on ajoute la liste des répertoires,
stockée dans Dict. Il convient donc aussi, selon les mêmes critères, de
ne pas ajouter dans Dict les répertoires exclus.

Nous avons :
If InStr(1, MySubFolder, Expression, vbTextCompare) > 0 Then
'donne seulement le nom des répertoires
'Dict.Add MySubFolder.Name, MySubFolder.Name
'donne seulement le chemin complet des répertoires
Dict.Add MySubFolder.Path, MySubFolder.Path
End If

et là il faudra aussi retoucher la première ligne

If InStr(1, MySubFolder, Expression, vbTextCompare) > 0 And _
InStr(1, MySubFolder, "LOGI", vbTextCompare) = 0 And _
InStr(1, MySubFolder, "LOGA", vbTextCompare) = 0 And _
InStr(1, MySubFolder, "LOGO", vbTextCompare) = 0 _
Then




Si on n'a pas de répertoire dont le nom contient "LOG" suivi par autre
chose que I, A ou O, on peut simplifier la condition.

Si quelqu'un d'un peu plus réveillé veut bien relire ...
Avatar
Gloops
Désolé, je croyais avoir compris la question, et manifestement non.

Je savais que mes neurones n'étaient pas tous allumés, aussi ...
______________________________________
steph b a écrit, le 17/05/2011 09:41 :
J ai rien compris !!!!

désolé

Avatar
MichD
| il me supprime la ligne entiere en remontant sans laisser de ligne vide.

De quelle ligne vide parles-tu ?



MichD
--------------------------------------------
"steph b" a écrit dans le message de groupe de discussion : 4dd12001$0$30755$

lorsque j'execute la macro qui marche super bien, j'ai une liste de
répertoires

avec cette liste:
si le denier mot de chaque ligne constituée
par ta macro est "LOGI" ou "LOGA" ou "LOGO" alors

est ce plus clair?



"MichD" a écrit dans le message de news:
iqqt51$vrd$
| par exemple si le denier mot de la liste constituée
| par ta macro est "LOGI" ou "LOGA" ou "LOGO" alors
| il me supprime la ligne entiere en remontant sans
| laisser de ligne vide.

Désolé, je ne comprends rien à ta question.

MichD
--------------------------------------------