Daydayer
Messages postés201Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention13 août 2005
-
26 janv. 2005 à 17:32
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 2006
-
27 janv. 2005 à 20:06
bonjour!
j'ai un répertoire nommé PMS. celui-ci contient des repertoires types 'WPnumero-description', chacun de ces répertoires possède un sous répertoire nommé 'temporary reports', ce dernier contient des documents word.
Ce que je veux faire :
pour chaque répertoire 'WPnumero-description', aller dans 'temporary reports'et
lister tous les noms de fichiers
j'ai reussi a faire ce code pour lister les repertoires 'WPnumero-descritpion':
--------------------------------------------------------------------------------------------
Option Explicit
Private Sub CommandButton1_Click()
'add the reference 'Microsoft Scripting Runtime'in order to execute
'the following code
Dim fso As FileSystemObject, dossier As Folder
Dim generalDirectory As String
generalDirectory = "Z:\PMS"
Set fso = New FileSystemObject
Set dossier = fso.GetFolder(generalDirectory)
lister dossier
End Sub
Public Function lister(dossier As Folder)
Dim sFolder As Folder
Dim sFolderTabl() As String
Dim indexsFolder, maxiNum As Integer
indexsFolder = 0
For Each sFolder In dossier.SubFolders
indexsFolder = indexsFolder + 1
ReDim Preserve sFolderTabl(indexsFolder) As String
sFolderTabl(indexsFolder - 1) = sFolder.path + "\temporary reports"
End Function
---------------------------------------------------------------------------------------------
j'ai reussi à faire le code listant les fichiers(type 'WPnumero-description-weeknumber) dans un répertoire et en selectionnant le dernier ('number' le plus élevé):
-------------------------------------------------------------------------------------------
Option Explicit
'add the reference 'Microsoft Scripting Runtime'in order to execute
'the following code
Private Sub liste_Click()
Dim fso As FileSystemObject, dossier As Folder
Dim generalDirectory As String
generalDirectory = "Z:\PMS"
Set fso = New FileSystemObject
Set dossier = fso.GetFolder(generalDirectory)
lister dossier
End Sub
Public Function lister(dossier As Folder)
Dim fichier As File
Dim Tabl() As String
Dim indexfile, maxiNum As Integer
Dim selectedFilePath As String
indexfile = 0
For Each fichier In dossier.Files
indexfile = indexfile + 1
ReDim Preserve Tabl(indexfile) As String
Tabl(indexfile - 1) = fichier.Name
Selection.MoveDown Unit:=wdLine, Count:=1
'selection of the last case
maxiNum = UBound(Tabl)
selectedFilePath = Tabl(maxiNum - 1)
Selection.TypeText Text:=selectedFilePath
Selection.MoveDown Unit:=wdLine, Count:=1
End Function
-------------------------------------------------------------------------------------------
le problème c'est pour imbriquer les deux, je ne sais pas s'il faut que je déclare (dans le 2eme code) une nouvelle variable de la même façon que 'dossier'(en elevant justemement 'dossier'), et donner un nouveau chemin (celui du sous repertoire) parce quand je fais cela, ca ne marche pas (je ne sais pas comment m'y prendre)
à l'aideu!
merci si vous avez des propositions...
Daydayerement Vôtre
Daydayer
Messages postés201Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention13 août 2005 26 janv. 2005 à 17:37
en fait, j'ai fait cela comme code e imbriquant les boucles:
-----------------------------------------------------------------------------------------
Option Explicit
Private Sub CommandButton1_Click()
'add the reference 'Microsoft Scripting Runtime'in order to execute
'the following code
Dim fso As FileSystemObject, dossier As Folder
Dim generalDirectory As String
generalDirectory = "Z:\PMS"
Set fso = New FileSystemObject
Set dossier = fso.GetFolder(generalDirectory)
lister dossier
End Sub
Public Function lister(dossier As Folder)
Dim sFolder As Folder
Dim sFolderTabl() As String
Dim indexsFolder, maxiNum As Integer
Dim fichier As File
Dim indexfile As Integer
Dim Tabl() As String
Dim selectedFileName, selectedFilePath As String
indexsFolder = 0
For Each sFolder In dossier.SubFolders
indexsFolder = indexsFolder + 1
ReDim Preserve sFolderTabl(indexsFolder) As String
sFolderTabl(indexsFolder - 1) = sFolder.path + "\temporary reports"
mon problème se situe au niveau de 'for each fichier in dossier.files', je pense: il faut que je dise qu'en fait je cherche maintenant dans le répertoire temporary report, celui appartenant au répertoire dans la boucle supérieure du code...
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 26 janv. 2005 à 20:21
Regarde du côté d'une fonction récusrsive.
Un exemple à moi (là je cherche des .doc) :
Un Form avec une listbox (list1) et un commandbutton (command1)
Dim fso As FileSystemObject
'Sélectionner "Microsoft Scripting Runtime" dans Projet/Références
Private Sub Rechercher_Fichiers(Dossier As String)
Dim fld As Folder
Dim subfld As Folder
Dim fl As File
' Création du FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
' Set du dossier à parcourir
Set fld = fso.GetFolder(Dossier)
' Listage des fichiers du dossier
For Each fl In fld.Files
If Right(fl.Name, 4) = ".doc" Then
List1.AddItem Dossier & fl.Name
End If
Next
' Recherche récursive des fichiers dans les sous-dossiers
For Each subfld In fld.SubFolders
Rechercher_Fichiers Dossier & subfld.Name & ""
Next
End Sub
Private Sub Command1_Click()
Dim Dossier_Depart As String
Screen.MousePointer = vbHourglass
' Dossier de départ
Dossier_Depart = "C:" ' toujours terminer la chaine par un ""
' Rechercher les fichiers
Rechercher_Fichiers Dossier_Depart
Daydayer
Messages postés201Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention13 août 2005 27 janv. 2005 à 16:16
merci pour ta réponse!
là je vais regarder ce que je peux en faire... par contre, juste une
question de vocabulaire (peut être un peu bête) : c'est quoi une
fonction récursive?....
Daydayerement Vôtre
Vous n’avez pas trouvé la réponse que vous recherchez ?
Daydayer
Messages postés201Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention13 août 2005 27 janv. 2005 à 16:27
c'est pas vraiment cela que je voudrais faire... je dois d'abord lister
tous les sous-dossiers d'un dossier nommé 'PMS' (qui se trouve dans
C:\), et pour chaque sous dossier, rajouter l'extension 'temporary
reports' (ca, pas de problème), en bout de leur chemin, et ensuite,
toujours pour chacun, lister tous les sous fichiers : je dois faire ce
listage de fichier sous dossier par sous dossier. ene ffet, à chaque
fois que je vais lister, c'est pour choisir un seul des fichiers de
chaque sous dossier. je ne dois pas d'abord faire la liste entière des
sous dossiers, puis la liste entière des fichiers.
Daydayer
Messages postés201Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention13 août 2005 27 janv. 2005 à 17:54
c'est remoi...
bon, j'ai remanié ton code à ma sauce et cela donne cela:
Dim fld, newfld As Folder
Dim subfld As Folder
Dim fl As File
Dim fso As FileSystemObject
Dim Dossier, newPath As String
Set fso = New FileSystemObject
Dossier = "C:\Documents and Settings\Propriétaire\Bureau\Claire\PL\PMS"
' Set du dossier à parcourir
Set fld = fso.GetFolder(Dossier)
' Recherche récursive des fichiers dans les sous-dossiers
For Each subfld In fld.SubFolders
newPath = Dossier + subfld.Name + ""
Set newfld = fso.GetFolder(newPath)
For Each fl In newfld.Files
If Right(fl.Name, 4) = ".doc" Then
Selection.TypeText Text:=subfld.path
Selection.MoveDown Unit:=wdLine, Count:=1
Next
Next
End Sub
le problème, c"est que le compileur me dit qu'il y a un 'next' sans
'for' alors que je l'ai bien mis pour les deux 'next'.... à ton avis,
cela viens d'où?? du 'set ' que j'ai mis dans le for principal?
le problème c'est que j'ai besoin de faire ce set pour rediriger ma recherche de fichier dans chaque sous répertoire...
Daydayer
Messages postés201Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention13 août 2005 27 janv. 2005 à 17:57
au fait, en faisant le set de 'newfld', est ce que j'ai le droit de
réutiliser 'fso' ou est ce que je dois utiliser un autre
filesystemobject? (j'ai pas encore la réponse vu que mon ciode ne
tourne pas à cause de ce next sans for)