[déplacé VB6 -> VBA] "PAS" Urgent : Compter nombre de page document PDF
llouisin
Messages postés12Date d'inscriptionmardi 27 avril 2004StatutMembreDernière intervention25 novembre 2009
-
24 nov. 2009 à 12:01
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
25 nov. 2009 à 10:08
bonjour,
Voila mon sujet : Je voudrai qu'une macro Excel 2007 me trouve pour un répertoire donnée les info suivantes:
- Le nom du fichier, (= > fonctionne dans ma macro)
- Le chemin du fichier (=> fonctionne dans ma macro)
- Le nombres de page si c'est un document PDF (si possible les autres formats aussi mais la je pense réver),
- Le format du document (A4,A3...) - l'extension du fichier.
Je suis vraiment débutant et en cherchant un peu sur le net j'ai trouvé des bouts de macro, Mais pour le moment ca me bloque des que la macro arrive sur un document autres que PDF.
Je vous remercie par avance de l'aide que vous pouvez m'apporter...
voici les macros :
---------------------------------------------------------------------------------------------
Public Sub getFilename() Dim f As New FileSystemObject
Dim rep
Dim i As Integer
Dim ss() As String
rep = "Y:xxxxxxx"
Dim r As Folder
Dim d1, d2, d3, d4, d5 As Folder
Set r = f.GetFolder(rep)
Set w = Workbooks("Import_CYCOFOS 4+pdf.xlsm")
i = 1
For Each d1 In r.SubFolders
'Debug.Print d1.Name
'w.Worksheets("Feuil1").Cells(i, 1).Value = d1.Name
'i = i + 1
getfls d1, i
For Each d2 In d1.SubFolders
'w.Worksheets("Feuil1").Cells(i, 2).Value = d2.Name
'i = i + 1
'Debug.Print d2.Name
getfls d2, i
For Each d3 In d2.SubFolders
'i = i + 1
'w.Worksheets("Feuil1").Cells(i, 3).Value = d3.Name
'Debug.Print d3.Name
getfls d3, i
For Each d4 In d3.SubFolders
getfls d4, i
For Each d5 In d4.SubFolders
getfls d5, i
Next
Next
Next
Next
Next
End Sub
--------------------------------------------------------------------------------------------
Public Sub getfls(ByVal fold As Folder, ByRef i As Integer)
Dim f As File
Dim w As Workbook
Dim p As Integer
Dim s As String
Set w = Workbooks("Import_CYCOFOS 4+pdf.xlsm")
For Each f In fold.Files
'ReDim Preserve s(i)
's(i) = f.Name
' Debug.Print fold.Name, f.Name
w.Worksheets("Feuil1").Cells(i, 1).Value = fold.Path
w.Worksheets("Feuil1").Cells(i, 2).Value = f.Name
NbPagesDocPDF f.Path, p, s
w.Worksheets("Feuil1").Cells(i, 3).Value = p
w.Worksheets("Feuil1").Cells(i, 4).Value = s
i = i + 1
Next
End Sub
-------------------------------------------------------------------------------------------
Private Sub NbPagesDocPDF(sFichier As String, ByRef Num As Integer, ByRef formatPDF As String)
Dim oApp As Object
Dim PdfDoc As Object
Dim AvDoc As Object
Dim CheminPDF As String
Dim sStr As String
Dim f As Object
Dim Pdfpage As Object
CheminPDF = sFichier
Set oApp = CreateObject("AcroExch.App")
Set AvDoc = CreateObject("AcroExch.AVDoc")
'Set Pdfpage = CreateObject("AcroExch.PDPage")
If AvDoc.Open(CheminPDF, "") Then
Set PdfDoc = AvDoc.GetPDDoc()
Num = PdfDoc.GetNumPages()
Set Pdfpage = PdfDoc.AcquirePage(0)
Set f = Pdfpage.GetSize()
formatPDF = CStr(f.x) + " / " + CStr(f.y)
Set PdfDoc = Nothing
AvDoc.Close (1)
Else
Num = -1
End If
Set AvDoc = Nothing
Set oApp = Nothing
Set f = Nothing
Set Pdfpage = Nothing
End Sub
llouisin
Messages postés12Date d'inscriptionmardi 27 avril 2004StatutMembreDernière intervention25 novembre 2009 24 nov. 2009 à 15:26
Bonjour,
Euh, je debute et je code que des petit bouts de code, apparement la récursivité serait une procédure qui s'appelle elle-même... mais je ne voit pas trop à quoi tu pense !
Si c'est pour la macro Public Sub getFilename() , elle fonctionne meme si elle est un peu longue.
c'est surtout au niveau des attributs de document que je bloque (numeros de page et format).Pour le moment la macro commence correctement à recopier les pages de pdf mais bloque a un moment soit parceque le format est autre que PDF ou parcequ'acrobat plante...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 24 nov. 2009 à 15:54
l'interet est là :
For Each d1 In r.SubFolders
'Debug.Print d1.Name
'w.Worksheets("Feuil1").Cells(i, 1).Value = d1.Name
'i = i + 1
getfls d1, i
For Each d2 In d1.SubFolders
'w.Worksheets("Feuil1").Cells(i, 2).Value = d2.Name
'i = i + 1
'Debug.Print d2.Name
getfls d2, i
For Each d3 In d2.SubFolders
'i = i + 1
'w.Worksheets("Feuil1").Cells(i, 3).Value = d3.Name
'Debug.Print d3.Name
getfls d3, i
For Each d4 In d3.SubFolders
getfls d4, i
For Each d5 In d4.SubFolders
getfls d5, i
Next
Next
Next
Next
Next
permettrai de simplifier le tout en :
Private sub ScanFolder(byref Parent as Folder)
getfls Parent, i
For Each d In Parent.SubFolders
ScanFolder d
Next
End sub
sans te soucier du nombre de sous-niveaux.
je vois que tu fais appel a ta fonction de calcul de pages pdf pour tous les fichiers rencontrés... assures toi au moins que l'extension soit ".pdf"
llouisin
Messages postés12Date d'inscriptionmardi 27 avril 2004StatutMembreDernière intervention25 novembre 2009 24 nov. 2009 à 16:07
Pas mal du tout.. Merci pour la simplification.
Mon souci principal reste le calcul du nombre de pages. J'ai crée un repertoire contenant que des documents .pdf => à un moment ca bloque quand meme. Et je n'arrive pas a savoir pourquoi.
Il faut que j'aille dans le Gestionnaire XP pour arreter le processus Acrobat sinon tout plante.
Un hypothese : J'ai des documents de taille variable (de 1MO a 300MO) cela peut-il influencer le calcul ?
Saurai- tu comment faire pour renseigner les champs (noms + chemin de fichier) et si ce n'est pas du PDF de sauter l'étape calcul de page... ?
Ou encore mieux calculer aussi pour un document Word...! (J'en demande beaucoup je sais bien)
laurent
Vous n’avez pas trouvé la réponse que vous recherchez ?