Bonjour,
j'ai écrit un programme qui me permet d'éditer l'ensemble des rapports pdf d'une application pour archivage à long terme
globalement, le programme fonctionne mais pour une raison que je ne comprends, il "saute" certains rapports de la liste
pour l'impression pdf j'utilise une fonction que j'ai légèrement adapté pour mes besoins
en fait les pdf sont générés et enregistrés automatiquement UseAutosave=1.
Pourtant, sur quelques pdf, la boite de dialogue demandant l'enregistrement s'ouvre malgré tout et je pense que c'est ce qui fait que certain pdf passent à la trappe
je vois dans le code qu'il y a des périodes de temporisation, peut-être que c'est sur çà qu'il faut jouer
ceci étant, j'ai plusieurs séries de près de 100000 pdf à créer donc je serais plutôt tenter de réduire les temps de temporisation car c'est extrêmement long...
d'avance merci pour vos conseils...
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
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 Option Compare Database Option Explicit ' Ne pas oublier de cocher la bibliothèqe PDFCreator ' dans le menu Outils / Références de Visual Basic Editor ' API Windows pour faire une temporisation en millisecondes Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ' Constantes pour les temporisations Private Const maxTime = 10 ' en secondes Private Const sleepTime = 250 ' en millisecondes ' --- ' IMPRESSION D'UN ETAT EN PDF ' --- ' Entrée : strReportName <- Nom de l'état à imprimer en PDF ' strWhere <- Clause WHERE filtrant l'état (facultatif) ' strPDFName <- Nom du fichier PDF à générer (facultatif) ' strDirectory <- Chemin de stockage du fichier PDF (facultatif) -> (J LE CARROU - 03/07/2019) nom du dms passé en 4ème argument ' Public Sub SaveAsPDF( _ ByVal strReportName As String, _ Optional ByVal strWhere As String = "", _ Optional ByVal strPDFName As String = "", _ Optional ByVal strDirectory As String = "") ' Quelques variables... Dim pdfc As PDFCreator.clsPDFCreator Dim DefaultPrinter As String Dim c As Long Dim OutputFilename As String Dim dms As String ' Instancier un nouvel objet PDFCreator Set pdfc = New clsPDFCreator ' Paramétrer l'objet PDFCreator With pdfc .cStart "/NoProcessingAtStartup" .cOption("UseAutosave") = 1 .cOption("UseAutosaveDirectory") = 1 ' Chemin de destination ' Par défaut : dossier 'Mes documents' de l'utilisateur If strDirectory = "" Then strDirectory = Environ("USERPROFILE") & "\Mes documents" Else strDirectory = "C:\Documents and Settings\t2lecajer\Mes documents\exportPDF\" & strDirectory 'Debug.Print "Nom du dossier : " & strDirectory End If .cOption("AutosaveDirectory") = strDirectory ' Nom du fichier PDF à générer .cOption("AutosaveFilename") = _ IIf(strPDFName = "", strReportName, strPDFName) 'Debug.Print "Nom du fichier à imprimer : " & strPDFName ' Format de sauvegarde (0 = PDF) .cOption("AutosaveFormat") = 0 ' Mémoriser l'imprimante par défaut ' et définir PDFCreator à la place DefaultPrinter = .cDefaultPrinter .cDefaultPrinter = "PDFCreator" .cClearCache ' Imprimer l'état DoCmd.OpenReport strReportName, acViewNormal, , strWhere .cPrinterStop = False End With ' Temporisation c = 0 Do While (pdfc.cOutputFilename = "") And (c < (maxTime * 1000 / sleepTime)) c = c + 1 Sleep 200 Loop ' Nom du fichier PDF produit Debug.Print pdfc.cOutputFilename OutputFilename = pdfc.cOutputFilename ' Réinstaller l'imprimante d'origine With pdfc .cDefaultPrinter = DefaultPrinter Sleep 200 .cClose End With ' Attendre jusqu'à ce que PDFCreator soit supprimé de la mémoire Sleep 2000 ' Vérifier si le fichier a été créé 'If OutputFilename = "" Then ' MsgBox "Création du fichier PDF." & vbCrLf & vbCrLf & _ ' "Une erreur s'est produite : temps écoulé !", vbExclamation + vbSystemModal 'End If End Sub
Partager