IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Création .pdf, une variante


Sujet :

Contribuez

  1. #1
    seb92400
    Invité(e)
    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 : 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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    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...
    Dernière modification par seb92400 ; 16/03/2008 à 14h14. Motif: Quelques corrections

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    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+

  3. #3
    seb92400
    Invité(e)
    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...

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 681
    Points : 214
    Points
    214
    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

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 127
    Points : 78
    Points
    78
    Par défaut
    Merci Seb92400 pour ton travail,
    Mais je n'ai pu exploiter ton code, car je ne sais pas trop comment en tirer partie, peux-tu nous concocter une petite base exemple, avec un état à générer en PDF. Cela risque d'être super pédagogique. Qu'en penses-tu ?
    Je suis en train de gérer la partie 'impression' de mon appli, et je vais devoir soit imprimés des états générés par mon application, soit les convertir en PDF pour les envoyés par mail.
    Je me suis penché sur le tuto de Cafeïne, mais il ne répond pas tout à fait à mes attentes... car je dois absolument manipulés les nom de fichiers définitifs de ses fichiers PDF étant basé sur le code client et la date de création du doc.
    Pourquoi faire simple, quand on peut faire compliqué ???

  6. #6
    Membre averti
    Directeur technique
    Inscrit en
    Novembre 2006
    Messages
    584
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 584
    Points : 403
    Points
    403
    Par défaut
    Bonjour à tous.
    naphta:
    et là 1 info pour le fameux outputto qui ne fonctionne pas sur le runtime sans la version complète de office 2007,
    Apparement corrigé avec le SP2.
    Un seul conseil: la règle des 3S.

  7. #7
    Invité
    Invité(e)
    Par défaut
    bonsoir
    Pour Office 2007 Sp2 ou le Runtime après le 29/04/2009 toutes les exportations en Pdf sont incluses.
    Pour les versions antérieures, sans passer par une imprimante virtuelle:
    http://www.lebans.com/reporttopdf.htm

    IL faut éventuellement l'adapter, pour ce que l'on souhaite, mais c'est efficace.

Discussions similaires

  1. [Débutant] Création d'une application de gestion + remplir un PDF automatiquement
    Par celtic sword dans le forum VB.NET
    Réponses: 4
    Dernier message: 21/11/2012, 16h08
  2. Probleme de création d'une table avec les variant
    Par sebyo dans le forum Débuter
    Réponses: 2
    Dernier message: 28/04/2009, 22h01
  3. [FPDF] Création d'une image à partir d'un pdf
    Par Tchupacabra dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 04/04/2008, 21h36
  4. Création d'une base avec IbConsole
    Par Lucien dans le forum Outils
    Réponses: 3
    Dernier message: 02/03/2004, 18h34
  5. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 07h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo