[déplacé VB6 -> VBA] "PAS" Urgent : Compter nombre de page document PDF

llouisin Messages postés 12 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 25 novembre 2009 - 24 nov. 2009 à 12:01
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 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

--------------------------------------------------------------------------------------------
laurent

7 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2009 à 15:04
le mot "récursivité" t'évoque-t'il quelque chose ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
llouisin Messages postés 12 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 25 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...

laurent
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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"

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
llouisin Messages postés 12 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 25 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2009 à 16:09
tu pourrais déjà t'astenir de créer un objet acrobat par fichier.

créées en un, réutilises le.

ca devrai aider, je pense

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
llouisin Messages postés 12 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 25 novembre 2009
25 nov. 2009 à 10:05
Hello,

Je ne sais pas le faire ca ! comment faire pour réutiliser le même processus Acrobat ?

laurent
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 nov. 2009 à 10:08
Set oApp = CreateObject("AcroExch.App")

te sert a rien

et au lieu d'appeler

CreateObject("AcroExch.AVDoc")

dans le sub, créé ton AVDoc dans le getFilename
ainsi, Acrobat ne sera instancié qu'une fois pour tous les fichiers


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Rejoignez-nous