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 :
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
Donc, on imprime directement dans "Mes documents" puis dans un sous-répertoire de "Mes documents".

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 :

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
Ici, même principe que précédemment. Sauf que je n'ai pas le même résultat !
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWindow.SelectedSheets.PrintOut , To:=1, Copies:=1
, 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 ...
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,