XL 2021 Piloter PDFSam par vba

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Florent74

XLDnaute Nouveau
Bonjour à tous,
Je souhaiterais pouvoir automatiser la division de PDF par VBA Excel en utilisant l'application PDFSam (seul application que mon employeur m'autorise à installer). Savez-vous s'il est possible de piloter PDFSam directement depuis VBA (à la manière d'Adobe Pro par exemple) ?

A défaut, connaissez-vous les commandes et instruction à intégrer dans un fichier shell pour diviser un pdf avec PDFSam ?

Merci pour votre aide !!
 
Dans mon cas, j'essaye d'automatiser le traitement des pdf par VBA Excel et Power Query, pour intégrer les données des PDF, et les renommer, les séparer et les déplacer dans les répertoires ciblés. Je voudrais éviter l'étape manuelle de traitement séparation et renommage des PDF !!
Oui, je comprends.

Moi je voulais juste les découper, mais à cause de Sejda SDK j'ai laissé tomber.
Donc si tu trouves une solution pour commander PDFsam depuis Excel, je suis intéressé.
 
Hello TooFatBoy,
Ben rien, on rejoue ce que l'on fait dans PDFSam, d'où ma question précédente :
Pourquoi faire cela à partir d' Excel ?
Ami calmant, J.P
Salut Jurassik Pork !! Et merci d'être toujours là !!

Je poursuis le travail initié à l'automne et pour lequel tu m'avais déjà aidé : il s'agit de traiter des PDF contenant des rapports d'analyses (un pdf contient plusieurs analyses, chaque rapport d'analyse ayant un nombre variable de pages), d'extraire les données par Power Query, puis séparer le PDF en autant de PDF qu'il y a d'analyses, les renommner et les déplacer. J'arrive désormais à tout faire avec Power Query et VBA. La séparation et renommage des PDF se fait depuis le VBA en pilotant Adobe Pro. Je dois désormais arriver à faire la même chose mais avec PDFSam !! J'ai trouvé le code ci-dessous. Je vais essayer de le tester mais je ne sais pas encore comment écrire et lancer le script depuis VBA.

#!/bin/bash

# Chemin vers le fichier PDF d'entrée
INPUT_PDF="chemin/vers/votre/fichier.pdf"

# Dossier de sortie pour les fichiers séparés
OUTPUT_DIR="chemin/vers/dossier/de/sortie"

# Créer le dossier de sortie s'il n'existe pas
mkdir -p "$OUTPUT_DIR"

# Utiliser PDFSam pour séparer le PDF
pdfsam-console split -f "$INPUT_PDF" -o "$OUTPUT_DIR" -s I1 -name "page_%03d.pdf"

# Renommer les fichiers séparés
for FILE in "$OUTPUT_DIR"/page_*.pdf; do
# Extraire le numéro de page du nom de fichier
PAGE_NUMBER=$(basename "$FILE" .pdf | sed 's/page_//')

# Renommer le fichier avec un nouveau nom
mv "$FILE" "$OUTPUT_DIR/nouveau_nom_page_$PAGE_NUMBER.pdf"
done

echo "Séparation et renommage terminés."
 
Je n'avais pas le droit d'installer quoi que ce soit au boulot, donc je n'ai pas essayé Sejda SDK.
😉
il me semble que pdfsam-console n'est plus présent dans les versions actuelles de PDFSam basic et que Sejda SDK ne propose pas non plus l'équivalent . Le souci d'installation d'un logiciel tiers dans ton entreprise c'est un problème de coût ou de sécurité ou les deux ?
Sinon je peux te mettre un classeur de test en pièce jointe qui commande PDFSam tout en VBA avec UIAutomation.
1 - Dans outils/Références vérifier que uiautomationclient est coché.
2 - Changer dans la macro les différents paramètres mis en dur.
Attention j''utilise la case à cocher Après les pages suivantes
Si cela fonctionne il suffit de mettre des paramètres en entrée de la procédure pour l'appeler.
 
Dernière édition:
Bonjour à tous,

Si l'objectif final consiste plus à manipuler des pdf qu'à piloter PDFsam, une autre solution possible consiste à utiliser cpdf.
Il s'agit d'un utilitaire - ne nécessitant pas d'installation - utilisable en ligne de commande et permettant de manipuler des pdf.
Il permet entre autres d'extraire des pages, voici un exemple :
VB:
Sub Test()
Dim pathCpdfExe     As String
Dim pathPdfSource   As String
Dim pathPdfDest     As String
Dim cmdLine         As String
Dim wshShell        As Object   'IWshRuntimeLibrary.WshShell - référence 'Windows Script Host Object Model'
    
    pathCpdfExe = "C:\...\cpdf.exe"
    pathPdfSource = "C:\...\src.pdf"
    pathPdfDest = "C:\...\dest.pdf"
    
    'construire la ligne de commande pour extraire les pages 2 à 5
    cmdLine = """" & pathCpdfExe & """ """ & pathPdfSource & """ 2-5 -o """ & pathPdfDest & """"
    
    'exécuter la ligne de commande
    Set wshShell = CreateObject("WScript.Shell")
    wshShell.Run Environ("comspec") & " /c chcp 1252 && " & cmdLine & " && chcp 850", 0, True
End Sub
Les sources et l'exécutable sont disponibles sur GitHub. La documentation (bien complète) est disponible sur le site du projet.

A+
 
Hello,
je mets quand même ma solution avec UIAautomation qui pourrait inspirer pour piloter d'autres logiciels :
VB:
Sub PDFSamAutomation(docSrc, pagesDec, repOut)
Dim c As New CUIAutomation, oPDFSam As IUIAutomationElement
Dim oDesktop As IUIAutomationElement, oBtn As IUIAutomationElement
Dim oPane As IUIAutomationElement, oEdit As IUIAutomationElement
Dim oGroup As IUIAutomationElement, oRbtn As IUIAutomationElement
Shell "D:\Logiciels\PdfSam\PdfSam.exe" 'Lancement Logiciel PDFSam
Set oDesktop = c.GetRootElement
Set oPDFSam = WaitForUiElem(c, oDesktop, "AutoId", "JavaFX1", _
                            TreeScope_Children, 20) ' Recherche de la fenêtre PDFSam TimeOut 20 secondes
Set oBtn = WaitForUiElem2c(c, oPDFSam, "CtrlType", 50000, _
                               "Name", "Découper", TreeScope_Descendants, 2) 'Bouton Découper
GetIacc(oBtn).DoDefaultAction ' clic sur le bouton
Set oPane = WaitForUiElem(c, oPDFSam, "CtrlType", 50033, TreeScope_Children, 2) 'Premier Panneau
Set oEdit = WaitForUiElem(c, oPane, "CtrlType", 50004, TreeScope_Children, 2)
GetIacc(oEdit).SetValue docSrc 'Remplir Fichier PDF à exploiter
Set oGroup = WaitForUiElem(c, oPane, "Name", "Paramètres de découpage", TreeScope_Children, 2)
Set oRbtn = WaitForUiElem(c, oGroup, "Name", "Après les pages suivantes", TreeScope_Children, 2)
GetIacc(oRbtn).DoDefaultAction ' DefaultAction = cocher
Set oEdit = WaitForUiElem(c, oGroup, "CtrlType", 50004, TreeScope_Children, 2)
GetIacc(oEdit).SetValue pagesDec 'Remplir avec pages de séparation
Set oGroup = WaitForUiElem(c, oPane, "Name", "Paramètres de sortie", TreeScope_Children, 2)
Set oEdit = WaitForUiElem(c, oGroup, "CtrlType", 50004, TreeScope_Children, 2)
GetIacc(oEdit).SetValue repOut 'Remplir Dossier de sortie
Set oBtn = WaitForUiElem(c, oPane, "Name", "Exécuter", TreeScope_Children, 2)
GetIacc(oBtn).DoDefaultAction 'clic sur le bouton Exécuter
Set oEdit = WaitForUiElem(c, oPane, "Name", "Terminé", TreeScope_Children, 5) ' On attend la fin du traitement
Set oBtn = WaitForUiElem(c, oPDFSam, "Name", "Quitter", TreeScope_Descendants, 2)
GetIacc(oBtn).DoDefaultAction 'clic sur le bouton Quitter
End Sub
Code:
Private Sub CommandButton1_Click()
PDFSamAutomation Range("DocSrc"), Range("PagesDec"), Range("RepOut")
End Sub
Cà serait très rapide si il n'y avait pas PDFSam a lancé ce qui prend énormément de temps à cause du java a lancé.
En pièce jointe un classeur de test.
UIA_PDFSAM.png


Ami calmant, J.P
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
3 K
C
Réponses
3
Affichages
7 K
Antoine
A
Retour