recherche de repertoires

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #23360451
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
steph b
Le #23366481
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" 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




MichD
Le #23366941
| 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
--------------------------------------------
steph b
Le #23367441
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" 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
--------------------------------------------

Jacquouille
Le #23367531
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" 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
--------------------------------------------

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

etc..



"Jacquouille" 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" 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
--------------------------------------------




Gloops
Le #23367881
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 ...
steph b
Le #23369531
J ai rien compris !!!!

désolé


"Gloops" 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 ...
Gloops
Le #23369721
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é

MichD
Le #23381741
| 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" 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
--------------------------------------------

Publicité
Poster une réponse
Anonyme