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 la taille des dossiers windows 11 - 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