Improvement of VBA-Macro for Printing PDF

Ici se trouvent les Propositions Acceptées en attente de Mise en Forme

Ajouter cette Solution sur le Site

Le sondage s’est terminé le Jeu 5 Mai 2011 13:10

Oui, bien sûr !
4
100%
Non, sans Intérêt.
0
Aucun vote
Sans Avis ...
0
Aucun vote
 
Nombre total de votes : 4

Improvement of VBA-Macro for Printing PDF

Message non lupar vba_lover1 » Mer 29 Déc 2010 22:24

Since I need to print PDF from MS Excel by macro, I tried to improve the code at
pdf/generer-un-pdf-par-macro-vba-sous-excel-t23.html
a year ago.

It prints Ranges, Windows, Charts (i.E. the selected object). Also, there's no need to link to the library of PDFCreator ans Scripting Runtime.

Thanx for Your code!
Spoiler:
module follows #################################################
Attribute VB_Name = "mdPDFCreator"
Option Explicit

' Benutzt folgendes Programm
' http://www.pdfforge.org/pdfcreator
' zum Ausdruck eines Objekts als PDF
' Getestet fuer pdfCreator 0.9.5
' Funktionen derzeit nur fuer MS-Excel definiert.
' Umbau der u.a. Makros fuer allgemeinere Druckfunktionen
' pdf/generer-un-pdf-par-macro-vba-sous-excel-t23.html

' AUSGABE IM DIREKTBEREICH
Private Const cTest_JN As Boolean = False

' BINDUNG ZUR LAUFZEIT
' Konstante gibt an, ob mit Verweis auf die Mirosoft Scripting Runtime (scrrun.dll)
' gearbeitet wird (cBindungZurLaufzeit=False), oder ueber Objekterstellung mittels
' CreateObject (cBindungZurLaufzeit=True), d.h. mit Bindung zur Laufzeit.
' Bei cBindungZurLaufzeit=False lassen sich die Eigenschaften/Methoden der Objekte der
' Scripting Runtime schoen uber den Objekt-'Punkt' (Object. ) aufrufen (fuer den
' Programmierer angenehmer), die Bindung zur Laufzeit laeuft aber sicherer.
#Const cBindungZurLaufzeit = True

' OBJEKTE DER MS SCRIPTING RUNTIME
#If cBindungZurLaufzeit = True Then
Private oFso As Object
Private oFile As Object
Private oStream As Object
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
#Else
Private oFso As Scripting.FileSystemObject
Private oFile As Scripting.File
Private oStream As Scripting.TextStream
#End If

' Beispiel
' #If cBindungZurLaufzeit = True Then
' Set oFso = CreateObject("Scripting.FileSystemObject")
' #Else
' Set oFso = New Scripting.FileSystemObject
' #End If

' OBJEKTE DES PDFCREATORS
#If cBindungZurLaufzeit = True Then
Private oPDFCreator As Object
#Else
Private oPDFCreator As PDFCreator.clsPDFCreator
#End If

' API Deklarationen
Private Declare Sub apiSleep Lib "kernel32.dll" Alias "Sleep" (ByVal dwMilliseconds As Long)

' SHELL EXECUTE
Private Declare Function apiShellExecute 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

' lpOperation Commands
Private Const apiNull As String = vbNullString

Private Const apiEDIT As String = "edit"
' Verhaelt sich so, als w¸rde man im Kontextmen¸ des Explorers auf
' "Bearbeiten" klicken.

Private Const apiEXPLORE As String = "explore"
' Handelt es sich bei "lpFile" um einen Verzeichnispfad,
' wird der Windows Explorer in Verbindung mit diesem Verzeichnis geoeffnet.

Private Const apiFIND As String = "find"
' Handelt es sich bei "lpFile" um einen Verzeichnispfad, wird der
' Windows Suchen-Dialog gestartet.

Private Const apiOPEN As String = "open"
' Oeffnet die Datei mit dem lt. Registry verknuepften Programm.

Private Const apiPRINT As String = "print"
' Druckt das Dokument in Verbindung mit der verknuepften Anwendung.

Private Const apiPROPERTIES As String = "properties"
'Zeigt die Verzeichnis- oder Datei-Eigenschaften

Private Const apiSW_HIDE = 0
Private Const apiSW_MAXIMIZE = 3
Private Const apiSW_MINIMIZE = 6
Private Const apiSW_NORMAL = 1
Private Const apiSW_SHOW = 5
Private Const apiSW_RESTORE = 9
Private Const apiSW_SHOWMAXIMIZED = 3
Private Const apiSW_SHOWMINIMIZED = 2
Private Const apiSW_SHOWMINNOACTIVE = 7
Private Const apiSW_SHOWNA = 8
Private Const apiSW_SHOWNOACTIVATE = 4
Private Const apiSW_SHOWNORMAL = 1

Private Const apiERROR_BAD_FORMAT = 11&
Private Const apiSE_ERR_ACCESSDENIED = 5
Private Const apiSE_ERR_ASSOCINCOMPLETE = 27
Private Const apiSE_ERR_DDEBUSY = 30
Private Const apiSE_ERR_DDEFAIL = 29
Private Const apiSE_ERR_DDETIMEOUT = 28
Private Const apiSE_ERR_DLLNOTFOUND = 32
Private Const apiSE_ERR_FNF = 2
Private Const apiSE_ERR_NOASSOC = 31
Private Const apiSE_ERR_OOM = 8
Private Const apiSE_ERR_PNF = 3
Private Const apiSE_ERR_SHARE = 26

' ADD TO RECENT DOC-LIST
Private Declare Sub apiSHAddToRecentDocs Lib "shell32.dll" _
Alias "SHAddToRecentDocs" (ByVal uFlags As Long, ByVal pv As String)
Private Const apiFlags As Long = &H2&


' SPECIAL FOLDER
Private Declare Function apiSHGetPathFromIDList Lib "Shell32" _
Alias "SHGetPathFromIDList" _
(ByVal lngIDList As Long, ByVal lpBuffer As String) As Long
Private Declare Function apiSHGetSpecialFolderLocation Lib "Shell32" _
Alias "SHGetSpecialFolderLocation" _
(ByVal hwndOwner As Long, ByVal nFolder As Integer, _
plngIDl As Long) As Long

Private Enum apiShellSpecialFolderConstants
tsDESKTOP = 0& 'Alle Ressourcen ab Desktop
tsProgramme = &H2& 'Startmen¸ Programme (aktueller Benutzer)
tsDrucker = &H4& 'Drucker
tsEigeneDateien = &H5& 'Eigene Dateien (aktueller Benutzer)
tsFavoriten = &H6& 'Favoriten (aktueller Benutzer)
tsSTARTMENU = &HB& 'Gesamtes Startmen¸ (aktueller Benutzer)
tsDesktopDir = &H10& 'Desktop (Ordner) (aktueller Benutzer)
tsArbeitsplatz = &H11& 'Arbeitsplatz
tsNetzwerkumgebung = &H12& 'Netzwerkumgebung
tsNetzwerkumgebungDir = &H13& 'Netzwerkumgebung (Ordner)
tsSchriften = &H14& 'Fonts (Ordner)
tsVorlagen = &H15& 'Vorlagen (Ordner)
tsGemStartmenu = &H16& 'Gesamtes Startmen¸ (alle Benutzer)
tsGemStartmenuPrg = &H17& 'Startmen¸ Programme (alle Benutzer)
tsGemAutostart = &H18& 'Autostart (Ordner) (alle Benutzer)
tsGemDesktopDir = &H18& 'Desktop (Ordner) (alle Benutzer)
tsAnwendungsdaten = &H1A& 'Anwendungsdaten (aktueller Benutzer)
tsDruckumgebungDir = &H1B& 'Druckumgebung (Ordner)
tsAltAutostart = &H1D& 'Altern. Autostart (Ordner) (aktueller Benutzer)
tsGemAltAutostart = &H1E& 'Altern. Autostart (Ordner) (alle Benutzer)
tsGemFavoriten = &H1F& 'Favoriten (alle Benutzer)
tsInternetCache = &H20& 'Temp. Internet Files
tsInternetCookies = &H21& 'Internet Cookies (Ordner)
tsInternetVerlauf = &H22& 'Internet Verlauf (Ordner)
End Enum

' Konstanten und Variablen
Private Const cTitel As String = "mdPDFCreator"
Private Const cWait As Double = 1000 ' Wartezeit
Private Const cStop_After As Long = 1000 ' Abbruchbedingung
Dim vRet As Variant

Private Sub mdPDFCreator_Testen()
' Call fctPDFCreator_Print(Excel.ActiveCell, , , True, True)
' Call fctPDFCreator_Print(ThisWorkbook.Sheets(1).Range("A3:A7"), , , True, True)
' Call fctPDFCreator_Print(ThisWorkbook, , , True, True)
' Eingebettetes CHART-Objekt
' Call fctPDFCreator_Print(ThisWorkbook.Worksheets(1).ChartObjects(1).Chart, , , True, True)
' SHEETS ARRAY
' Call fctPDFCreator_Print(ThisWorkbook.Sheets(Array("Tabelle1", "Tabelle2")), , , True, True)
' NICHT EXISTENTES VERZEICHNIS
' Call fctPDFCreator_Print(Excel.ActiveCell, "MUH", "O:\Mausibaerli\TomatenAufDenGuckern", True, True)
End Sub

Public Function fctPDFCreator_Print(ByRef oObject As Object, _
Optional ObjectName As String = "", _
Optional ObjectPath As String = "", _
Optional bOpenPDF As Boolean = False, _
Optional bMsgon As Boolean = False) As Boolean

' Prueft uebergebene Objekte/Werte, bzw. ob Bibliothek installiert
' wurde und uebergibt an Druckfunktion

Dim sName As String
Dim sTempName As String
Dim sMsg As String
Dim vPDF_FileName As Variant

If cTest_JN Then Debug.Print "Programmstart: ", Tab, Now

' Pruefung auf uebergebenes Objekt
If cTest_JN Then Debug.Print "Zum Druck uebergeben: ", Tab, VBA.TypeName(oObject)
Select Case VBA.TypeName(oObject)
' Befehl 'PrintOut' ist fuer folgende MS-Excel Objekte definiert:
Case "Chart", "Charts", "Sheets", "Window", "Workbook", "Worksheet", "Worksheets"
' Ausdruck moeglich
Case "Range"
' Wurde nur eine Zelle ausgewaehlt, wird das Worksheet, das die Zelle
' enthaelt, gedruckt.
If oObject.Cells.Count = 1 Then
Set oObject = oObject.Parent
End If
Case Else
' Objekt nicht druckbar oder Nothing
If bMsgon Then
On Error Resume Next
sName = oObject.Name
On Error GoTo 0
sMsg = "Objekt "
If sName <> "" Then sMsg = sMsg & sName & " "
sMsg = sMsg & "l‰sst sich nicht drucken!"
vRet = MsgBox(sMsg, vbCritical + vbOKOnly + vbSystemModal, cTitel)
End If
Exit Function
End Select

' Pruefung, ob Bibliothek pdfCreator installiert ist
On Error Resume Next
#If cBindungZurLaufzeit = True Then
Set oPDFCreator = CreateObject("PDFCreator.clsPDFCreator")
#Else
Set oPDFCreator = New PDFCreator.clsPDFCreator
#End If
On Error GoTo 0

If cTest_JN Then Debug.Print "Drucker: ", Tab, VBA.TypeName(oPDFCreator)

If VBA.TypeName(oPDFCreator) <> "clsPDFCreator" Then
If bMsgon Then
sMsg = "PDFCreator l‰sst sich nicht aufrufen!"
vRet = MsgBox(sMsg, vbCritical + vbOKOnly + vbSystemModal, cTitel)
End If
Set oPDFCreator = Nothing
Set oObject = Nothing
Exit Function
Else
If cTest_JN Then Debug.Print "Bibliothek: ", Tab, oPDFCreator.cPDFCreatorApplicationPath, oPDFCreator.cProgramRelease
End If

' Bestimmen des Dateinamens
If ObjectName = "" Then
Select Case VBA.TypeName(oObject)
Case "Chart"
ObjectName = oObject.Parent.Name & "_" & oObject.Name
Case "Charts"
ObjectName = oObject.Parent.Name & "_Charts"
Case "Window"
ObjectName = oObject.Caption
'ObjectName = oObject.SelectedSheets(1).Parent.Path
Case "Workbook"
ObjectName = oObject.Name
Case "Worksheet"
ObjectName = oObject.Parent.Name & "_" & oObject.Name
Case "Worksheets", "Sheets"
ObjectName = oObject.Parent.Name
Case "Range"
ObjectName = oObject.Address
ObjectName = Replace(ObjectName, ":", "-")
ObjectName = Replace(ObjectName, "$", "")
ObjectName = oObject.Parent.Parent.Name & "_" & _
oObject.Parent.Name & "_" & ObjectName
End Select
ObjectName = Replace(ObjectName, ".xls_", "_")
If UCase(Right(ObjectName, 4)) = ".XLS" Then ObjectName = Mid(ObjectName, 1, Len(ObjectName) - 4)
End If
If cTest_JN Then Debug.Print "Dateiname: ", Tab, ObjectName

' Bestimmen des Pfads
If ObjectPath = "" Then
Select Case VBA.TypeName(oObject)
Case "Window"
ObjectPath = oObject.SelectedSheets(1).Parent.Path
Case "Workbook"
ObjectPath = oObject.Path
Case "Worksheet", "Worksheets", "Sheets", "Charts"
ObjectPath = oObject.Parent.Path
Case "Chart"
ObjectPath = oObject.Parent.Parent.Parent.Path
Case "Range"
ObjectPath = oObject.Parent.Parent.Path
End Select
End If

' Pruefung ob Pfad existiert und Schreibrechte vorhanden
' wenn nicht, Desktop
If fctSchreibrecht_JN(ObjectPath) = False Then ObjectPath = fctGetSpecialFolder(tsDesktopDir)
' wenn nicht, Eigene Dateien
If fctSchreibrecht_JN(ObjectPath) = False Then ObjectPath = fctGetSpecialFolder(tsEigeneDateien)
' wenn nicht, TEMP
If fctSchreibrecht_JN(ObjectPath) = False Then
#If cBindungZurLaufzeit = True Then
Set oFso = CreateObject("Scripting.FileSystemObject")
#Else
Set oFso = New Scripting.FileSystemObject
#End If
' Scripting.SpecialFolderConst.TemporaryFolder
ObjectPath = oFso.GetSpecialFolder(2)
Set oFso = Nothing
End If

If cTest_JN Then Debug.Print "Pfad: ", Tab, ObjectPath

If fctSchreibrecht_JN(ObjectPath) = True Then
' Jetzt Uebergabe an die Druckfunktion
vPDF_FileName = fctPrint(oPDFCreator, oObject, ObjectName, ObjectPath, bMsgon)

If vPDF_FileName <> "" Then
fctPDFCreator_Print = True
If (cTest_JN Or bOpenPDF) Then
vRet = apiShellExecute(oObject.Application.hWnd, apiOPEN, vPDF_FileName, _
vbNull, vbNull, apiSW_SHOWNORMAL)
' Eintrag in Liste: letzte geoeffnete Dokumente
If bMsgon Then apiSHAddToRecentDocs apiFlags, vPDF_FileName
End If
vPDF_FileName = ""
'Excel.ThisWorkbook.FollowHyperlink (ObjectPath & Excel.Application.PathSeparator & ObjectName & ".pdf")
End If
Else
If bMsgon Then
sMsg = "Keine Schreibrechte, nicht einmal auf Desktop, Eigene Dateien oder TEMP!"
vRet = MsgBox(sMsg, vbCritical + vbOKOnly + vbSystemModal, cTitel)
End If

End If

Set oPDFCreator = Nothing
Set oObject = Nothing
If cTest_JN Then Debug.Print "Programmende: ", Tab, Now

End Function

Private Function fctGetSpecialFolder(FolderName As apiShellSpecialFolderConstants) As String
Dim lngID As Long
Dim strPath As String

Call apiSHGetSpecialFolderLocation(0, FolderName, lngID)

If lngID Then
strPath = Space(256)
Call apiSHGetPathFromIDList(lngID, strPath)
strPath = Left(strPath, InStr(strPath, Chr(0)) - 1)
Else
strPath = " - nicht definiert - "
End If
fctGetSpecialFolder = strPath

End Function

Private Function fctSchreibrecht_JN(ObjectPath As String) As Boolean
Dim sTempName As String

#If cBindungZurLaufzeit = True Then
Set oFso = CreateObject("Scripting.FileSystemObject")
#Else
Set oFso = New Scripting.FileSystemObject
#End If

With oFso
If .FolderExists(ObjectPath) Then
sTempName = .BuildPath(ObjectPath, .GetTempName)
On Error Resume Next
Set oStream = .CreateTextFile(sTempName)
If Err.Number <> 0 Then
' 70: Keine Schreibrechte
On Error GoTo 0
Else
On Error GoTo 0
oStream.Close
.DeleteFile FileSpec:=sTempName
fctSchreibrecht_JN = True
End If
End If
End With

Set oStream = Nothing
Set oFso = Nothing
End Function

Private Function fctPrint(PDFCreator1 As Object, _
oObject As Object, _
PDFName As String, _
PDFLocation As String, _
Optional bMsgon As Boolean = False) As String

' Eigentliche Druckfunktion, uebergibt den Dateinamen der PDF Datei

Dim sDefaultPrinter As String ' Imprimante par Defaut (memorisation)
Dim c As Long ' compteur Temporisation
Dim sOutputFilename As String ' Nom du Fichier Genere

' Initialisierung
If cTest_JN Then Debug.Print Tab, "INIT...";

With PDFCreator1
.cStart "/NoProcessingAtStartup"
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
' Repertoire de stockage du Fichier PDF genere
.cOption("AutosaveDirectory") = PDFLocation
.cOption("AutosaveFilename") = PDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
' Memorise l'Imprimante pas defaut
sDefaultPrinter = .cDefaultPrinter
' ecrase par PDFCreator
.cDefaultPrinter = "PDFCreator"
.cClearCache
End With

If cTest_JN Then Debug.Print "Druck..."
oObject.PrintOut Copies:=1, ActivePrinter:="PDFCreator"

If cTest_JN Then Debug.Print Tab, "Warten 1...";
' ABBRUCHBEDINGUNG FEHLT!
' Attend la Fin du travail pour quitter
c = 0
Do Until PDFCreator1.cCountOfPrintjobs = 1
c = c + 1
If c > cStop_After Then Exit Do
DoEvents
apiSleep cWait
Loop

apiSleep cWait
PDFCreator1.cPrinterStop = False
If cTest_JN Then Debug.Print "Drucker angehalten..."

If cTest_JN Then Debug.Print Tab, "Warten auf Datei";
c = 0
' Attend la Fin d'Ecriture au besoin 50x200ms (1 sec)
Do While (PDFCreator1.cOutputFilename = "") And (c < (cWait / 20))
c = c + 1
apiSleep (cWait / 5)
If cTest_JN Then Debug.Print ".";
Loop

If cTest_JN Then Debug.Print ""
' Recupere le nom du Fichier Genere
sOutputFilename = PDFCreator1.cOutputFilename
apiSleep (cWait / 5)

If cTest_JN Then Debug.Print Tab, "Ruecksetzen...";
With PDFCreator1
' Reattribue l'Imprimante initiale
If .cDefaultPrinter <> sDefaultPrinter Then
.cDefaultPrinter = sDefaultPrinter
End If
' Tempo de prise en compte avant fermeture
apiSleep (cWait / 2)
.cClose
End With
' Tempo 2 sec permettant d'assurer la liberation de PDFCreator de la Memoire
If cTest_JN Then Debug.Print "Warten 2..."
apiSleep (cWait * 2)

If sOutputFilename = "" Then
If bMsgon Then
vRet = MsgBox("CrÈation Fichier pdf." & vbCrLf & vbCrLf & _
"Une Erreur s'est produite: DÈlai dÈpassÈ!", vbExclamation + vbSystemModal, cTitel)
End If
Else
If cTest_JN Then Debug.Print Tab, "Ausgabedatei: " & sOutputFilename
fctPrint = sOutputFilename
End If
End Function

end of module ###################################################
Dernière édition par hastursoft le Mer 9 Avr 2014 23:58, édité 3 fois.
Raison: Sujet coché comme accepté et déplacé dans la partie correspondante
vba_lover1
Contributeur
Contributeur
 
Messages: 1
Inscription: Mer 29 Déc 2010 22:08

Si Vous avez Trouvé votre Bonheur,
ou si vous voulez aider ce site à progresser...
Merci de penser à
donate
ou bien encore, Inscrivez-Vous ! (c'est gratuit et sans publicité bloquante)
Vous pourrez suivre les évolutions, les mises à jour, et participer... MERCI.

Improvement of VBA-Macro for Printing PDF

Message non lupar hastursoft » Mer 23 Mar 2011 00:22

Thanks for your contribution, vba_lover1.
Merci de ta contribution vba_lover1.

It's quite strange that it was blocked so for a long time in status of moderation. It's a setting problem of the forum, when your status changed, the moderator did not verify that you had current messages. I'll look if there is a solution in the parameter setting of the forum.
Il est assez étrange qu'il ait été bloqué si longtemps en statut de modération. Cela est lié au paramétrage du forum, lorsque ton statut a changé, le modérateur n'a pas vérifié que tu avais des messages en cours. Je regarderai de mon coté s'il y a une astuce dans le paramétrage du forum.

Your proposition is valid for which Excel version ?
Ta proposition est valide pour quelle(s) version(s) d'Excel ?

Merci
hastursoft
Administrateur
Administrateur
 
Messages: 273
Inscription: Sam 14 Juin 2008 21:02

Re: Improvement of VBA-Macro for Printing PDF

Message non lupar Zebra3 » Mar 12 Avr 2011 13:04

Bonjour,

Effectivement, je suis passé à coté de cet excellent sujet.

Je le positionne en Quarantaine pendant la phase d'évaluation.
J'y ai déjà jeté un oeil et je dois dire que c'est du très bon travail.

Juste une possibilité qui ne fontionne pas :?
L'impression d'une Zone sélectionnée. C'est la première ligne de test ( mdPDFCreator_Testen ) :
Code: Tout sélectionner
 Call fctPDFCreator_Print(Excel.ActiveCell, , , True, True)

Qui imprime toute la page, en plus des cellules actives. (?)

Sinon, tout ce qui est proposé, je me répète est excellent.
Un grand merci à vba_lover1 !
Zebra3
Avatar de l’utilisateur
Zebra3
Contributeur
Contributeur
 
Messages: 18
Inscription: Dim 15 Mar 2009 12:05

Re: Improvement of VBA-Macro for Printing PDF

Message non lupar hastursoft » Mar 12 Avr 2011 21:30

Merci d'avoir modéré 'enfin' ce sujet ;)
J'ai voté.
hastursoft
Administrateur
Administrateur
 
Messages: 273
Inscription: Sam 14 Juin 2008 21:02

Re: Improvement of VBA-Macro for Printing PDF

Message non lupar gwenghen » Mar 12 Avr 2011 21:41

A voté !
Avatar de l’utilisateur
gwenghen
Participant 3+
Participant 3+
 
Messages: 3
Inscription: Dim 2 Mai 2010 00:13

Re: Improvement of VBA-Macro for Printing PDF

Message non lupar Zebra3 » Mer 13 Avr 2011 13:11

Voté 'oui'
Zebra3
Avatar de l’utilisateur
Zebra3
Contributeur
Contributeur
 
Messages: 18
Inscription: Dim 15 Mar 2009 12:05

Re: Improvement of VBA-Macro for Printing PDF

Message non lupar hastursoft » Dim 8 Mai 2011 18:35

Le vote est donc terminé.
Comme d'habitude dans ces cas je déplace le sujet dans les Propositions Acceptées, pour mise en forme.

Je ne clos pas ce sujet pour l'instant afin que des commentaires puissent être ajoutés éventuellement par la suite.

Il sera clos dès que la mise en forme sur le forum PDF/VBA aura été réalisé.

Merci
hastursoft
Administrateur
Administrateur
 
Messages: 273
Inscription: Sam 14 Juin 2008 21:02

Re: Improvement of VBA-Macro for Printing PDF

Message non lupar hastursoft » Lun 6 Juin 2011 23:36

Et donc, voici le lien sur le sujet officiel.

Je n'ai rien changé au code, hormis préciser la version 1.0 et son contributeur : vba_lover1 bien sûr.

Le module y est accessible en téléchargement.

pdf/generer-un-pdf-avec-une-fonction-vba-sous-excel-t161.html

Je clos ce sujet.
hastursoft
Administrateur
Administrateur
 
Messages: 273
Inscription: Sam 14 Juin 2008 21:02


Retourner vers Propositions Acceptées

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

Si Vous avez Trouvé votre Bonheur,
ou si vous voulez aider ce site à progresser...
Merci de penser à
donate
ou bien encore, Inscrivez-Vous ! (c'est gratuit et sans publicité bloquante)
Vous pourrez suivre les évolutions, les mises à jour, et participer... MERCI.