Problème de parcours de Dossiers
Résolu
VlkPr3s
Messages postés
251
Statut
Membre
-
pijaku Messages postés 13513 Statut Modérateur -
pijaku Messages postés 13513 Statut Modérateur -
Bonjour,
Bonjour/ Bonsoir je suis en stage et lors de ce stage je dois generer des fichiers PDF depuis visio en ayant accès à deux dossiers type PDF et visio
je compare les fichiers et j'exécute certaines tâches. Mon problème est le suivant je sais parcours UN dossier, UN sous dossier mais une fois que je veux accéder à un autre dossier => sous dossier ect et bien il m'envoie chier et oublie d'aller renseigner le chemin du second répertoire. en d'autre mot
ClientA => Rubrique => SRubrique OK
MAIS
ClientA => Rubrique => SRubrique IMPOSSIBLE svp aider moi je cherche comme un con des moyens de contourner le problème en vain mais impossible
=> RubriqueB
Bonjour/ Bonsoir je suis en stage et lors de ce stage je dois generer des fichiers PDF depuis visio en ayant accès à deux dossiers type PDF et visio
je compare les fichiers et j'exécute certaines tâches. Mon problème est le suivant je sais parcours UN dossier, UN sous dossier mais une fois que je veux accéder à un autre dossier => sous dossier ect et bien il m'envoie chier et oublie d'aller renseigner le chemin du second répertoire. en d'autre mot
ClientA => Rubrique => SRubrique OK
MAIS
ClientA => Rubrique => SRubrique IMPOSSIBLE svp aider moi je cherche comme un con des moyens de contourner le problème en vain mais impossible
=> RubriqueB
'============================================== 'Fonction récursive de parcours d'un répertoire '============================================== Sub ParcoursRepT() Call stRecInit Call ParcoursRepB(stRepIA, stRepIB) End Sub Sub stRecInit() Set oFSO = CreateObject("Scripting.FileSystemObject") stRepIA = "C:\Users\XXX\Documents\pdf\" stRepIB = "C:\Users\XXX\Documents\test\" End Sub Sub ParcoursRepB(ByVal stRepB As String, ByVal stRepA As String) If oFSO.FolderExists(stRepB) And oFSO.FolderExists(stRepA) Then Set oFldB = oFSO.GetFolder(stRepB) For Each oSubFolderB In oFldB.SubFolders If oSubFolderB = "" Then MsgBox "coucou" End If B = Dir(oSubFolderB & "\") cpt = 0 Set oFldA = oFSO.GetFolder(stRepA) For Each oSubFolderA In oFldA.SubFolders For Each oFileA In oSubFolderA.Files NomA = Left(oFileA.Name, Len(oFileA.Name) - 4) NomB = Left(B, Len(B) - 3) cpt = cpt + 1 If NomA <> NomB Then Else dtA = FileDateTime(oFileA) dtA = Format(dtA, "DD-MM-YYYY HH") 'MsgBox ("" & dtA) dtB = FileDateTime(oSubFolderB & "\" & B) chemin_C = oSubFolderB & "\" & B dtB = Format(dtB, "DD-MM-YYYY HH") 'MsgBox ("" & dtB) If dtA <= dtB Then 'MsgBox "RAF" B = Dir(oSubFolderB & "\") For i = 1 To cpt If B = "" Then Else B = Dir() End If Next Else Set doc = Documents.Open(oFileA) 'NomA = Left(oFileA, Len(oFileA) - 4) & "pdf" doc.ExportAsFixedFormat visFixedFormatPDF, chemin_C, visDocExIntentPrint, visPrintAll doc.Close B = Dir(oSubFolderB & "\") For i = 1 To cpt B = Dir() Next End If End If Next oFileA If (oFileA Is Nothing) And (B <> "") Then MsgBox ("Fichier PDF unique, suppression en cours ! ") Kill (oFileB) Else End If ParcoursRepB oSubFolderB.Path, oSubFolderA.Path Next '// LE BUG CE SITUE ICI, IL NE SAUTE PAS CETTE ETAPE LORSQU IL DOIT CHOISIR UN AUTRE DOSSIER Next End If End Sub
A voir également:
- Problème de parcours de Dossiers
- Impossible de supprimer un dossier - Guide
- Mettre un mot de passe sur un dossier - Guide
- Vous avez besoin d'une autorisation de la part de système pour modifier ce dossier - Guide
- Mes parcours google - Guide
- Afficher taille des dossiers windows - Guide
2 réponses
Bonjour,
Regarde ce code de Jacques Boisgontier :
Regarde ce code de Jacques Boisgontier :
Dim ligne Sub arborescenceRepertoire() racine = ChoixDossier() ' ou un répertoire C:\xxx e.g. If racine = "" Then Exit Sub Range("A:E").ClearContents Set fs = CreateObject("Scripting.FileSystemObject") Set dossier_racine = fs.getfolder(racine) ligne = 3 Lit_dossier dossier_racine, 1 End Sub Sub Lit_dossier(ByRef dossier, ByVal niveau) Cells(ligne, 1) = String(3 * (niveau - 1), " ") & dossier.Name ligne = ligne + 1 For Each d In dossier.SubFolders Lit_dossier d, niveau + 1 Next End Sub Function ChoixDossier() If Val(Application.Version) >= 10 Then With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = ActiveWorkbook.Path & "\" .Show If .SelectedItems.Count > 0 Then ChoixDossier = .SelectedItems(1) Else ChoixDossier = "" End If End With Else ChoixDossier = InputBox("Répertoire?") End If End Function
Bonjour,
Si j'ai bien compris...
Tu as deux répertoires contenant un nombre inconnu de sous répertoires. Le premier répertoire contient (dans ses sous-rép) des fichiers .pdf et le second des fichiers visio.
Tu souhaites, en fonction des noms des fichiers et de leurs dates de création, exporter certains fichiers visio en .pdf.
C'est cela?
Si j'ai bien compris...
Tu as deux répertoires contenant un nombre inconnu de sous répertoires. Le premier répertoire contient (dans ses sous-rép) des fichiers .pdf et le second des fichiers visio.
Tu souhaites, en fonction des noms des fichiers et de leurs dates de création, exporter certains fichiers visio en .pdf.
C'est cela?
Si oui, pour plus de clarté, je procèderais de la sorte :
A partir du code ci-dessous :
- Une fonction principale => qui lance le bouzin et les fonctions dans l'ordre
- Une fonction de "listage" des fichiers et stocke leurs noms et leurs dates de création dans une variable tableau (FicPdfs() pour les fichiers pdf et FicVisios pour les vsd)
- Une fonction de comparaison des deux variables tableaux.
A partir du code ci-dessous :
- adapte ce qui doit l'être
- construit la Sub Compare
Option Explicit '******************** * * * * A ADAPTER * * * * ************************************** Const RepertPdf As String = "C:\Travail\2015\PDFS" 'Chemin des fichiers pdf Const RepertVisio As String = "C:\Travail\2015\VSDS" 'Chemin des fichiers visio Const ExtPdf As String = "pdf" 'Extension des fichiers pdf Const ExtVisio As String = "vsd" 'Extension des fichiers visio '******************** * * * * * * * * * * * ************************************** Dim FicPdfs(), FicVisios() Sub Principale() Dim fs As Object, dossier_racine As Object 'If RepertPdf = "" Or RepertVisio = "" Then Exit Sub Set fs = CreateObject("Scripting.FileSystemObject") 'Liste les fichiers pdf et leurs FileDateTime Set dossier_racine = fs.getfolder(RepertPdf) Lit_dossier dossier_racine, 1, FicPdfs, ExtPdf, 1 'Liste les fichiers vsd et leurs FileDateTime Set dossier_racine = fs.getfolder(RepertVisio) Lit_dossier dossier_racine, 1, FicVisios, ExtVisio, 1 Compare End Sub Sub Lit_dossier(ByRef dossier As Object, ByVal niveau As Integer, NomF(), ext As String, i As Long) Dim NomFic As String, d As Object For Each d In dossier.SubFolders NomFic = Dir(d & "\*." & ext) Do While NomFic <> "" ReDim Preserve NomF(1 To 2, 1 To i) NomF(1, i) = NomFic NomF(2, i) = Format(FileDateTime(d & "\" & NomFic), "DD-MM-YYYY HH") i = i + 1 NomFic = Dir Loop Lit_dossier d, niveau + 1, NomF, ext, i Next End Sub Sub Compare() End Sub
La macro que je te donne liste tous les fichiers d'un répertoire et de ses sous répertoires... A toi de l'adapter pour qu'elle fasse ce que tu désires...
For each oSubFolderbis in oFldb.SubFolders
.....
For each oSubFolder in oFld.SubFolders
....
next
next
quand je remonte à mon dossier type PDF\ pour accéder ainsi à PDF\Clientsuivant
et bien il s'arrête au premiere for each et donc ne prend pas en compte le dossier VISIO\Clientsuivant