1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
| Option Explicit
Private Declare Function QueryPerformanceCounter Lib "kernel32" (X As Currency) As Boolean
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (X As Currency) As Boolean
Private Declare Function SHCreateDirectoryEx Lib "Shell32.dll" Alias "SHCreateDirectoryExA" _
(ByVal hwnd As Long, _
ByVal pszPath As String, _
ByVal lngsec As Long) As Long
Dim Debut As Currency, Fin As Currency, Freq As Currency
Private Function CreationDossier(sDossier) As Long
Dim Rep As Long
Rep = SHCreateDirectoryEx(0&, sDossier, 0&)
End Function
Private Sub Crop_Pages_PDF(ByVal sFichier As String)
Dim PDDoc As Object
Dim AcroRect As Object
Dim JSO As Object, Page As Object
Dim FSO As Object, sNom As String, iNbPages As Long
Dim sNumPage As String, i As Long, bVide As Boolean
Dim sDossierCrop As String, sOutPDF As String
Set FSO = CreateObject("Scripting.FileSystemObject")
sNom = FSO.GetBaseName(sFichier)
Set FSO = Nothing
sDossierCrop = ThisWorkbook.Path & "\" & "CROP"
bVide = ShParam.CheckBoxes("chkVider").Value = 1
If bVide Then
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(sDossierCrop) Then FSO.DeleteFolder sDossierCrop, True
Set FSO = Nothing
End If
CreationDossier sDossierCrop
Set PDDoc = CreateObject("AcroExch.PDDoc")
Set AcroRect = CreateObject("AcroExch.Rect")
If PDDoc.Open(sFichier) Then
Set JSO = PDDoc.GetJSObject
iNbPages = PDDoc.GetNumPages()
For i = 1 To iNbPages
Set Page = PDDoc.AcquirePage(i - 1)
sNumPage = Format(i, "000")
sOutPDF = RenommerFichier(sDossierCrop, sNom & "_" & sNumPage & ".pdf")
AcroRect.Left = 0.5 * 72
AcroRect.Top = 4 * 72
AcroRect.bottom = 1 * 72
AcroRect.Right = 6.75 * 72
Page.CropPage AcroRect
JSO.ExtractPages i - 1, i - 1, sOutPDF
Application.StatusBar = i & " / " & iNbPages
Next i
End If
PDDoc.Close
Set Page = Nothing
Set JSO = Nothing
Set AcroRect = Nothing
Set PDDoc = Nothing
With ShParam
.Activate
.Range("A1").Select
End With
Application.StatusBar = Application.StatusBar & " / Terminé"
End Sub
Private Sub PosBoutons()
Dim T As Range
With ShParam
.Activate
.Rows(1).RowHeight = 12.75
Set T = .Cells(1, 2)
With .Buttons("btnFichier")
.Left = T.Left + 3
.Top = T.Top + 15
.Width = 110
.Height = 2 * Rows(1).RowHeight - 5
End With
With .Shapes("chkVider")
.Left = ShParam.Shapes("btnFichier").Left + ShParam.Shapes("btnFichier").Width + 5
.Top = ShParam.Shapes("btnFichier").Top
.Width = 160
.Height = ShParam.Buttons("btnFichier").Height
End With
.Range("A1").Select
End With
End Sub
Private Function RenommerFichier(sDossier As String, sNomfichier As String) As String
Dim sNouveauNom As String
Dim sPre As String, sExt As String
Dim i As Long
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(sDossier & "\" & sNomfichier) Then
sNouveauNom = sNomfichier
sPre = FSO.GetBaseName(sNomfichier)
sExt = FSO.GetExtensionName(sNomfichier)
i = 0
While FSO.FileExists(sDossier & "\" & sNouveauNom)
i = i + 1
sNouveauNom = sPre & Chr(40) & Format(i, "000") & Chr(41) & Chr(46) & sExt
Wend
sNomfichier = sNouveauNom
End If
Set FSO = Nothing
RenommerFichier = sDossier & "\" & sNomfichier
End Function
Sub SelFichierPDF()
Dim Fichier As Variant
ChDir ThisWorkbook.Path
Fichier = Application.GetOpenFilename("Fichiers PDF (*.pdf), *.pdf")
If Fichier = False Then Exit Sub
DoEvents
With Application
.StatusBar = ""
.Cursor = xlWait
End With
QueryPerformanceCounter Debut
Crop_Pages_PDF Fichier
QueryPerformanceCounter Fin
QueryPerformanceFrequency Freq
With Application
.StatusBar = .StatusBar & " / " & Format((Fin - Debut) / Freq, "0.00 s")
.Cursor = xlDefault
End With
End Sub |
Partager