Forum des développeurs  

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é.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > Contribuez

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

Réponse
 
Outils de la discussion
Vieux 14/03/2008, 16h30   #1 (permalink)
Membre éprouvé
 
Date d'inscription: septembre 2006
Messages: 492
Par défaut Création .pdf, une variante

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...
Voilà... Si vous avez des questions, bah... n'hésitez pas !

----------

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
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 15/03/2008, 15h24   #2 (permalink)
Membre Confirmé
 
Date d'inscription: juillet 2005
Localisation: Mimet
Messages: 243
Par défaut un truc

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+
naphta est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/03/2008, 14h19   #3 (permalink)
Membre éprouvé
 
Date d'inscription: septembre 2006
Messages: 492
Par défaut

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...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 19/11/2008, 15h18   #4 (permalink)
Membre habitué
 
Date d'inscription: janvier 2006
Messages: 162
Par défaut

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
AndréPe est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > Contribuez

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide