![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: septembre 2006
Messages: 492
|
Hello à toutes et tous...
(Code testé sous Access 2007) Voici une variante d'un code qui permet de créer des fichiers pdf grâce à PDFCreator. Le but recherché était de permettre la création de pdf la plus simple possible en utilisant les outils connus de Windows (boite de dialogue, etc...) et surtout en évitant d'utiliser l'interface de PDFCreator. Ce code permet par un simple clic sur un bouton de sélectionner le répertoire de destination, d'écrire ou de changer le nom du fichier, enregistrer celui-ci, et enfin d'ouvrir celui-ci (à condition qu'un visionneur de pdf soit installé sur le pc) Voici donc ce code. Attention, bibliothèques à référencer : PDFCreator et Microsoft Office 12.0 Object Library Attention, Fonction ShellExecute à déclarer (perso, je l'ai déclarée en public dans un module indépendant, vu que je m'en sers dans d'autres modules). Code :
Option Compare Database Option Explicit '########################' ' ' ' CODE ' ' ' '########################' Public Sub proPDF(ByRef etaPDF As String, Optional ByRef strNomFichier As String) On Error GoTo Erreur_proPDF 'Déclaration des variables... 'Chemin, fichier et boite de dialogue... Dim strCheminFichier As String Dim nbCar As Integer Dim oFD As FileDialog Set oFD = Application.FileDialog(msoFileDialogSaveAs) 'Nom de l'imprimante par défaut... Dim strImprimanteDefautNom As String strImprimanteDefautNom = Application.Printer.DeviceName 'Nom de l'imprimante PDF... Dim strImprimantePDFNom As String strImprimantePDFNom = "PDFCreator" 'Sélection de PDFCreator comme imprimante par défaut... Set Printer = Printers(strImprimantePDFNom) 'Classe PDFCreator... Dim oPDF As PDFCreator.clsPDFCreator Set oPDF = New clsPDFCreator 'Parametres de PDFCreator... Dim Parametres(0 To 4) As Variant 'Ouverture du fichier PDF... Dim Reponse As Integer 'Timer... Dim Temps As Long 'Traitement du nom de fichier... If IsNull(strNomFichier) Or strNomFichier = "" Then strNomFichier = "" ElseIf Right$(strNomFichier, 4) <> ".pdf" Then strNomFichier = strNomFichier & ".pdf" End If 'Boite de dialogue... With oFD .Title = "Création d'un fichier PDF" .ButtonName = "Créer PDF" .AllowMultiSelect = False .InitialFileName = Application.CurrentProject.Path & "\" & strNomFichier If .Show = -1 Then If IsNull(.SelectedItems(1)) Or .SelectedItems(1) = "" Then MsgBox "Aucun nom de fichier n'a été indiqué ! & vbcrlf & vbcrlf" _ & "Merci de recommencer la procédure...", vbExclamation, "Création PDF..." GoTo Sortie_proPDF Else strNomFichier = StrReverse(Split(StrReverse(.SelectedItems(1)), "\", , vbBinaryCompare)(0)) strCheminFichier = .SelectedItems(1) If Right$(strNomFichier, 4) <> ".pdf" Then strNomFichier = strNomFichier & ".pdf" strCheminFichier = strCheminFichier & ".pdf" End If nbCar = Len(strCheminFichier) - Len(strNomFichier) strCheminFichier = Mid(strCheminFichier, 1, nbCar) End If Else MsgBox "Aucun fichier n'a été enregistré...", vbInformation, "Création PDF..." GoTo Sortie_proPDF End If End With 'Création du PDF... With oPDF .cVisible = False .cStart '"Sauvegarde" des paramètres de PDFCreator... Parametres(0) = .cOption("UseAutoSave") Parametres(1) = .cOption("UseAutoSaveDirectory") Parametres(2) = .cOption("AutoSaveDirectory") Parametres(3) = .cOption("AutoSaveFilename") Parametres(4) = .cOption("autoSaveFormat") .cSaveOptions 'Changement des paramètres de PDFCreator... .cOption("UseAutoSave") = 1 .cOption("UseAutoSaveDirectory") = 1 .cOption("AutoSaveDirectory") = strCheminFichier .cOption("AutoSaveFilename") = strNomFichier .cOption("autoSaveFormat") = 0 '(0 = PDF) .cSaveOptions 'Impresion de l'état... DoCmd.Hourglass True DoCmd.Echo False DoCmd.OpenReport etaPDF, acViewNormal, , , acWindowNormal Do Until .cIsConverted = True DoEvents Loop DoCmd.Echo True DoCmd.Hourglass False .cClearCache .cClearLogfile '"Restauration" des paramètres de PDFCreator... .cOption("UseAutoSave") = Parametres(0) .cOption("UseAutoSaveDirectory") = Parametres(1) .cOption("AutoSaveDirectory") = Parametres(2) .cOption("AutoSaveFilename") = Parametres(3) .cOption("autoSaveFormat") = Parametres(4) .cSaveOptions End With 'Ouverture du fichier PDF... Reponse = MsgBox("Voulez-vous ouvrir le document """ & strNomFichier & """ créé ?", vbQuestion + vbYesNo, _ "Création PDF...") DoCmd.Hourglass True DoCmd.Echo False Temps = Timer + 0.7 Do While Timer < Temps DoEvents Loop DoCmd.Echo True DoCmd.Hourglass False oPDF.cClose Select Case Reponse Case vbYes ShellExecute Application.hWndAccessApp, "open", strNomFichier, "", strCheminFichier, 3 End Select Sortie_proPDF: Set Printer = Printers(strImprimanteDefautNom) Set oFD = Nothing Set oPDF = Nothing Exit Sub Erreur_proPDF: MsgBox Err.Number & " : " & Err.Description Err.Clear Resume Sortie_proPDF End Sub '###############################' ' ' ' UTILISATION ' ' ' '###############################' 'Ecrire 'proPDF "nom de l'état à imprimer", "nom du fichier enregistré avec ou sans l'extension .pdf (facultatif)"' 'dans une procédure VBA... ---------- Modification apportée : Simplification du code, correction de quelques bugs...
__________________
Ce n'est pas parce que les choses sont compliquées que nous n'osons pas... C'est parce que nous n'osons pas qu'elles deviennent compliquées !!! A lire impérativement : Post de Maxence Hubiche et Les règles du club... Au regard de tous les BENEVOLES qui s'occupent de ce forum voilà un petit proverbe que j'aime bien... Il est plus important de chercher que d’avoir trouvé. (André Siegfried) Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI... Dernière modification par seb92400 ; 16/03/2008 à 14h14 Motif: Quelques corrections |
|
|
|
|
|
#2 (permalink) |
|
Membre Confirmé
![]() Date d'inscription: juillet 2005
Localisation: Mimet
Messages: 243
|
Bonjour,
C'est super, j'ai cherché à produire des PDF de cette façon cela ma fatigué j'ai mis cela de côté. Impossible de seter les paramètres de PDFCreator. J'ai fini de façon différente, mais cette méthode est la plus logique et la plus cacher pour moi, en attendant que Microsoft se bouge. une remarque dans ma méthode à la fin de ma function j'ai Set Application.Printer = Nothing sinon c'est la pagaille au niveau des imprimantes entre le commondialog et le sélecteur natif d'access. et là 1 info pour le fameux outputto qui ne fonctionne pas sur le runtime sans la version complète de office 2007, On peut tout de même produire des fichiers RTF et des HTML en copiant le fichier UTILITY.ACCDA dans office12 des postes avec le runtime seulement. Je fais copier coller de ton code et je teste de ce pas. Merci A+ |
|
|
|
|
|
#3 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: septembre 2006
Messages: 492
|
Hello,
J'ai procédé à quelques modifs du code, rien de bien méchant, mais j'avais parfois quelques bugs aléatoires après l'impression pdf... A prori, après ces modifs, cela semble terminé. (code corrigé dans le premier message) Merci pour tes infos Il me reste juste un petit point que je souhaite régler, toujours dans un souci d'esthétisme : Ne pas faire apparaitre la fenêtre d'impression (celle qui s'imprime pendant une impression et qui donne l'avancement), mais là, je pense qu'il va falloir que je joue avec les api... Et toujours pour la même raison, j'ajouterai un petit gif de mon cru pour faire patienter l'utilisateur durant la création du pdf... Bon dimanche...
__________________
Ce n'est pas parce que les choses sont compliquées que nous n'osons pas... C'est parce que nous n'osons pas qu'elles deviennent compliquées !!! A lire impérativement : Post de Maxence Hubiche et Les règles du club... Au regard de tous les BENEVOLES qui s'occupent de ce forum voilà un petit proverbe que j'aime bien... Il est plus important de chercher que d’avoir trouvé. (André Siegfried) Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI... |
|
|
|
|
|
#4 (permalink) |
|
Membre habitué
![]() Date d'inscription: janvier 2006
Messages: 162
|
Bonjour,
Ce pb d'export PDF m'intéresse au plus haut point et j'ai voulu tester le code de seb92400, mais il ne fonctionne pas en AC2000, car il manque la boîte de dialogue. Y aurait-il en AC2000 un substitut aussi complet ? Amitiés |
|
|
|
![]() |
![]() |
||
Création .pdf, une variante
|
||
| Outils de la discussion | |
|
|