Bonjour à tous,
je travaille avec Windows 7, Office 2010 et Adobe Acrobat X Pro.
Dans un fichier Excel, j'ai une macro qui me permet de générer des fichiers PDF à la volée (50 fichiers par ex, en mettant à jour les données d'une page, puis on imprime en PDF, puis on rechange les données etc). En fait, j'ai même 2 fichiers, qui utilisent des codes similaires :
Code 1 :
Donc, on imprime directement dans "Mes documents" puis dans un sous-répertoire de "Mes documents".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub Print_PDF(Optional One_Page As Boolean = True) Dim ReportFolder As String, ReportName As String Dim DistillerFolder As String, PDFOutput As String Dim InvestedFolder As String InvestedFolder = "C:\Users\moi.meme\Documents\TestFiche\" DistillerFolder = "C:\Users\moi.meme\Documents\" Application.ActivePrinter = "Adobe PDF sur Ne03:" 'ancien : Ne01 'Impression PDF : ne fonctionne que sur C:\INTRANET Sheets("Basic_Report").Select ReportName = Cells(3, 2) ReportName = Replace(ReportName, "/", "-", 1) ReportName = Replace(ReportName, Chr(34), " ", 1) ReportName = Replace(ReportName, "'", "", 1) PDFOutput = DistillerFolder & "MaFiche.pdf" ActiveWindow.SelectedSheets.PrintOut , To:=1, Copies:=1 Sleep 200 FileCopy PDFOutput, InvestedFolder & ReportName & ".pdf" Kill PDFOutput End Sub
Une 1ère remarque dans ce code : Bien que l'on ne précise pas, dans la commande "ActiveWindow.SelectedSheets.PrintOut", le code imprime bien la feuille sélectionnée et sauvegarde sous le nom "MaFiche.pdf" (note : le nom du fichier est "MaFiche.xls"). C'est étrange mais passons.
Le 2ième fichier, avec l'autre code, est le suivant :
Ici, même principe que précédemment. Sauf que je n'ai pas le même résultat !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub Print_PDF() Dim ReportFolder As String, ReportName As String Dim DistillerFolder As String, PDFOutput As String Dim InvestedFolder As String Dim tmpPdf As String InvestedFolder = "C:\Users\moi.meme\Documents\TestFiche\" DistillerFolder = Environ$("USERPROFILE") & "\Documents\" 'avant : "\Mes documents\" Application.ActivePrinter = "Adobe PDF sur Ne03:" 'avant : Ne01: 'Impression PDF : ne fonctionne que sur C:\INTRANET Sheets("Basic_Report").Select ReportName = Cells(3, 2) ReportName = Replace(ReportName, "/", "-", 1) ReportName = Replace(ReportName, Chr(34), " ", 1) ReportName = Replace(ReportName, "'", "", 1) PDFOutput = DistillerFolder & FILE_FICHE_PDF 'MaFiche.pdf ActiveWindow.SelectedSheets.PrintOut , To:=1, Copies:=1 , PrintToFile:=True, PrToFileName:=PDFOutput Sleep 500 FileCopy PDFOutput, InvestedFolder & ReportName & ".pdf" Kill PDFOutput End Sub
En effet, quand j'ouvre le fichier PDF généré, on me dit que le fichier PDF est erroné : "Acrobat n'a pas pu ouvrir xxx.pdf, car le type de fichier n'est pas pris en charge ou le fichier est endommagé (...)"
Si, à l'inverse, je ne précise pas le nom du fichier où imprimer en PDF :
, alors on me demande (à chaque impression), le nom du fichier PDF à exporter. C'est assez lourd si j'ai une macro qui est censé me générer 50 fichiers PDF ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ActiveWindow.SelectedSheets.PrintOut , To:=1, Copies:=1
Par contre, quand j'ouvre le fichier PDF généré, aucun problème pour le lire !
Pourquoi, dans le 1er code, je n'ai pas eu besoin de préciser le nom du fichier PDF (= nom du fichier XLS) à chaque impression, alors que dans le deuxième code on me le demande systématiquement (soit via VBA, soit via l'ouverture d'une boite de dialogue) ? Et, quand, dans le 2ième code, je précise le nom du fichier PDF, il m'est impossible d'ouvrir ce dernier, une fois crée ?
Merci d'avance à toute personne capable de m'aider.
Cdlt,
Partager