Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/04/2011, 13h17   #1
Invité de passage
 
Inscription : août 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 25
Points : 3
Points : 3
Par défaut Imprimer un fichier PDF

Bonjour à tous,

Nous avons migré depuis peu sur Office 2007 dans mon entreprise et depuis je n'arrive plus a imprimer mes fichier pdf depuis la base.

En effet, jusque la j'utilisais la commande "shell", mais elle ne fonctionne plus (le logiciel acrobat reader se lance bien, mais avec un message d'erreur, et le fichier ne s'ouvre pas)

Voici ma ligne de code :

Code :
Shell (C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe /p /h " & Path_Avissouf & Nom_Fichier)
Path_Avissouf & Nom_fichier correpond au chemin complet de mon fichier a ouvrir (Ex : c:\toto.pdf)

J'ai également ajouter la référence "Adobe Acrobat 8.0 Type Library" mais je ne trouve pas comment utiliser cette dernière pour imprimer mon document.

Avez vous une idée svp ?

Merci d'avance à tous

Daima
daimadoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 14h21   #2
Membre Expert
 
Avatar de stigma
 
Homme Alain
Développeur informatique
Inscription : octobre 2003
Messages : 846
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 61
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2003
Messages : 846
Points : 1 053
Points : 1 053
Envoyer un message via MSN à stigma
J'utilise ça sous Access 2003 pour créer un PDF à partir d'un état.
Code :
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
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)
'
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
      ' 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\"
        End If
        .cOption("AutosaveDirectory") = strDirectory
 
        ' Nom du fichier PDF à générer
        .cOption("AutosaveFilename") = _
          IIf(strPDFName = "", strReportName, 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
      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
Et ça marche très bien.
__________________
Je ne suis pas une adresse IP, je suis un homme libre !
stigma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 15h15   #3
Invité de passage
 
Inscription : août 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 25
Points : 3
Points : 3
Bonjour Stigma,

Juste pour information, je ne souhaite pas imprimer à partir d'un état mais à partir d'un fichier pdf existant.

Enfin,ce n'est pas grave, j'ai reussi a resoudre mon soucis en créant la fonction shellexecute qui fonctionne à merveille.

Pour ceux qui veulent, voici le code de cette fonction

Code :
1
2
3
4
5
6
7
8
9
10
Public Declare Function ShellExecute _
    Lib "shell32.dll" _
    Alias "ShellExecuteA" ( _
    ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) _
    As Long
Il ne reste plus ensuite qu'a appeler cette fonction de la manière suivante :

Code :
1
2
dim test as long
test = ShellExecute(0, "print", Path_Avissouf & Nom_Fichier, "", "", 0)
le "print" en parémètre permet de lancer l'impression en tache de fond. On peut mettre également "Open" pour ouvrir le fichier etc...

En esperant que ça aide quelqu'un.

A bientot

(PS : vous pouvez statuer cette discussion en "résolu"
daimadoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h48.


 
 
 
 
Partenaires

Hébergement Web