[VBA] Compter le nombre de page d'un PDF [Résolu]

LeGaulois

XLDnaute Nouveau
Bonjour,
Je cherche à compter le nombre de page d'un fichier PDF. J'ai essayé de les compter en lisant le fichier puis de chercher tout les /Type/Pages, cependant ça ne fonctionne pas. Cela me donne un nombre différent du nombre de pages du PDF.
J'aimerais savoir si c'était possible de faire une telle macro?

Merci

La solution est ICI

Merci pour tout :)
 
Dernière édition:

LeGaulois

XLDnaute Nouveau
Re : [VBA] Compter le nombre de page d'un PDF

Re-bonjour!
Une nouvelle piste (que j'ai trouvé dans ce forum : ICI) serrait d'explorer le fichier PDF jusqu'à arriver à la dernière page.
Pour faire cela, j'ai ajouté dans les références : Microsoft Internet Controls
Puis j'ai créé un objet Internet Explorer, et j'ai ouvert le PDF page par page dans le navigateur jusqu'à que j'ai un message d'erreur, ce qui veut dire que je suis arrivé à la fin du PDF.

Le problème avec cette technique, c'est que lorsqu'on arrive à la fin du PDF on a un message d'erreur qui arrête le programme. Et c'est une technique assez lourde si l'on souhaite faire ça avec des centaines de PDF et qui sont en plus assez conséquent.

Personne n'a de solution à proposer ?

EDIT : RE-re-bonjour!
Encore une troisième solution, mais qui pose encore un soucis pour la réalisation de mon problème.
Celle ci consiste à lire les propriétés des fichiers, quel que soit la nature du fichier, cependant avec les fichiers PDF, contrairement par exemple à un fichier excel, je ne vois pas le nombre de pages...

Aussi il faut savoir qu'on utilise la version Reader d'Adobe. Il me semble que ça joue un rôle...

Je précise tout de même que le code doit être exportable sur les versions d'excel 2002 jusqu'à la plus récente.
Et qu'on est sur des environnements Windows XP, mais qu'il se peut que ça évolue à un Windows plus récent.
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : [VBA] Compter le nombre de page d'un PDF

Bonjour LeGaulois et bienvenue :),
Je viens de tester la macro de Kiki29, elle fonctionne impécablement, mais évidemment, j'ai un AcrobatPro :rolleyes:...
Je ne crois pas non plus qu'il y ait moyen de gérer de la même façon sous Reader :eek:...
Désolé :p...
Bon courage :cool:
 

LeGaulois

XLDnaute Nouveau
Re : [VBA] Compter le nombre de page d'un PDF

Bonjour JNP et merci,

J'ai continué à chercher une solution, et à priori se serrait une technique proche de celle des /Type/Pages, car il faudrait chercher : /Count et à côté de ça il y a un nombre qui définit le nombre de pages.
Cependant parfois il n'y en a pas qu'un seul, et il faut, il me semble, chercher le Count qui a la plus grosse valeur.

Voilà, j'essaie de faire la macro et je la mettrai en ligne si ça fonctionne.

EDIT : Pour l'instant j'obtiens toujours 0, je me suis basé sur un code ( ICI ), je recherche pourquoi ça ne va pas...
 
Dernière édition:

LeGaulois

XLDnaute Nouveau
Re : [VBA] Compter le nombre de page d'un PDF

Hop résolu!
Et ça a l'air de plutôt bien fonctionner!
J'ai trouvé la solution ICI, le post #4, et à priori il est plutôt fiable!

Sub Test()
Dim MyPath As String, MyFile As String
Dim i As Long
MyPath = "C:\TestFolder"
MyFile = Dir(MyPath & Application.PathSeparator & "*.pdf", vbDirectory)
Range("A:B").ClearContents
Range("A1") = "File Name": Range("B1") = "Pages"
Range("A1:B1").Font.Bold = True
i = 1
Do While MyFile <> ""
i = i + 1
Cells(i, 1) = MyFile
Cells(i, 2) = GetPageNum(MyPath & Application.PathSeparator & MyFile)
MyFile = Dir
Loop
Columns("A:B").AutoFit
MsgBox "Total of " & i - 1 & " PDF files have been found" & vbCrLf _
& " File names and corresponding count of pages have been written on " _
& ActiveSheet.Name, vbInformation, "Report..."
End Sub
'
Function GetPageNum(PDF_File As String)
'Haluk 19/10/2008
Dim FileNum As Long
Dim strRetVal As String
Dim RegExp
Set RegExp = CreateObject("VBscript.RegExp")
RegExp.Global = True
RegExp.Pattern = "/Type\s*/Page[^s]"
FileNum = FreeFile
Open PDF_File For Binary As #FileNum
strRetVal = Space(LOF(FileNum))
Get #FileNum, , strRetVal
Close #FileNum
GetPageNum = RegExp.Execute(strRetVal).Count
End Function

Et bien merci de votre attention, j'espère que j'aurai aidé quelques personnes.

Si par contre c'est possible, je ne comprend pas comment fonctionne la fonction, si quelqu'un pouvait me l'expliquer ?

A bientôt :)
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : [VBA] Compter le nombre de page d'un PDF

Re :),
Si par contre c'est possible, je ne comprend pas comment fonctionne la fonction, si quelqu'un pouvait me l'expliquer ?
Je vois que MJ13 aime bien, mais Michel, tu aurais pu lui expliquer la fonction :p...
Ben figure toi que c'est pas évident, mais je vais essayer :rolleyes:...
RegExp est une expression régulière (je te conseilles de lire mon tuto à ce sujet).
"/Type\s*/Page[^s]" signifie qu'il cherche "/Type" puis "\s*" signifie des blancs autant qu'on veut puis "/Page" et enfin "[^s]" tout sauf un "s" :p...
Ensuite, RegExp.Execute(strRetVal).Count renvoie le nombre de fois qu'il a trouvé le motif ;).
Sinon, ben c'est du chargement dans une variable, mais comme une variable String serait limitée, il l'a force avec strRetVal = Space(LOF(FileNum)), c'est à dire en mettant autant d'espaces que de caractères (si j'ai tout compris :eek:).
Sinon, c'est de la récupération de fichier en binaire comme ta première macro. Si tu veux mieux comprendre, tu change l'extension d'un ".pdf" en ".txt" et tu ouvre le fichier avec WordPad :).
Bon courage :cool:
 

LeGaulois

XLDnaute Nouveau
Re : [VBA] Compter le nombre de page d'un PDF [Résolu]

Bonjour,

Merci encore une fois JNP, "nous vous devons une reconnaissance éternelle" ! ;)
Pour MJ13, j'ai peut être fait la modification après qu'il ait aimé le fil lol

Expliqué comme ça, ça parait simple! Mais je n'aurais jamais trouvé seul :eek:

Un grand merci JNP!

A bientôt :D
 

MJ13

XLDnaute Barbatruc
Re : [VBA] Compter le nombre de page d'un PDF [Résolu]

Bonjour Legaulois, jean-Noël

Désolé Jean-Noël, mais j'avais même pas vu que c'était du Regexp :eek:.

Mais, comme, cela a marché du premier coup alors j'ai liké ;). Merci Legaulois :).

Par contre le regexp (reggae pour les experts), cela ne rentre pas trop :eek:.
 

Discussions similaires