Se connecter avec
S'enregistrer | Connectez-vous

Macro excel et pdfcreator

Dernière réponse : dans Programmation

Bonjour à tous,

j'ai un petit soucis avec pdfcreator depuis les macros excel vba :

j'utilise excel pour renseigner différents champs, dont des relevés de mesures, d'où sont tirés des graphiques sur différentes feuilles, ainsi qu'une partie rapport (texte mis en forme), toujours sous excel.

une macro me permet de mettre en forme une partie du rapport : certains mots devant être mis en Italque dans une cellule ; celle-ci fonctionne à merveille grâce à zeb.

la seconde me permet d'imprimer à la volée toute les feuilles devant constituer le rapport papier, et fonctionne également, je me suis débrouillé tout seul pour celle-ci.

la troisième me permet de créer une copie renommée du fichier renseigné, en cherchant l'existence ou non du chemin d'enregistrement, et à défaut de la créer, puis de fermer le nouveau fichier et de revenir au fichier initial vierge.

en fin, la dernière macro qui me pose soucis concerne l'utilisation de pdfcreator : j'ai réussi sur la première partie de ce que je veux faire : convertir les mêmes feuilles à imprimer en les regroupant en un seul fichier, après avoir également collé un jpeg de signature.
là où je coince, c'est sur la seconde partie : après avoir fusionner les différentes feuilles dans l'ordre d'impression, je veux ajouter un dernier fichier au format déjà pdf, dont le nom dépend d'une cellule dont le résultat dépend des renseignements saisis, et fusionner ces deux nouveaux fichiers en file d'attente pour au final ne créer qu'un seul pdf complet.

je voudrais également que ce pdf ne puisse que être lu et/ou imprimé, qu'il ne soit pas possible de sélectionner (et donc copier en vue de modification) du texte ou quoique ce soit dessus. Mais ça ce sera pour la suite.

je vous joins donc le code de ma 4ème macro, peut-être pas très propre, mais qui fonctionne pour la première partie du problème, la nouvelle instruction devant être placée entre les lignes 97 & 98.

j'ai essayé avec .cAddPrintJob, mais quelque chose n'est pas codé correctement, c'est pourquoi je vous demande un peu d'aide et surtout d'explication

par avance merci

  1. Sub Création_pdf()
  2.  
  3. ' Création_pdf Macro
  4. ' Macro enregistrée le 04/10/2010 par
  5.  
  6. Sheets("Renseignements machine").Select
  7. Dim annee As String
  8. Dim client As String
  9. Dim fichier As String
  10. Dim window As String
  11. Dim cheminannee As String
  12. Dim cheminclient As String
  13. Dim rapport As String
  14. Dim test As String
  15. Dim debut As label
  16. Dim fin As label
  17. Dim racc As String
  18. Dim ps As String
  19. Dim pdfjob As PDFCreator.clsPDFCreator
  20. Dim sPDFName As String
  21. Dim sPDFPath As String
  22.  
  23. test = [L1].Value
  24. If test = "" Then GoTo debut
  25. MsgBox "NOM DU CLIENT, NUMERO DU RAPPORT OU DATE, NON RENSEIGNES, VERIFIEZ ET RE-ESSAYEZ !!!", vbOKOnly, "OUBLIS !!!"
  26. GoTo fin
  27.  
  28. debut:
  29.  
  30. racc = [j6].Value
  31. rapport = "E:\Dossiers Clients\Modèles de documents\Rapport Standard MMT.xls"
  32. annee = [i46].Value
  33. client = [b5].Value
  34. fichier = [i45].Value
  35. window = [i49].Value
  36. cheminannee = [i47].Value
  37. cheminclient = [i48].Value
  38. If Dir(cheminannee, vbDirectory) = "" Then 'Création du dossier ANNEE si n'existe pas
  39. MkDir cheminannee
  40. End If
  41. If Dir(cheminclient, vbDirectory) = "" Then 'Création du dossier CLIENT si n'existe pas
  42. MkDir cheminclient
  43. End If
  44.  
  45.  
  46.  
  47. sPDFName = [b31].Value & ".pdf"
  48. sPDFPath = [i50].Value
  49.  
  50. Set pdfjob = New PDFCreator.clsPDFCreator
  51. With pdfjob
  52. .cDefaultPrinter = True
  53.  
  54. If .cStart("/NoProcessingAtStartup") = False Then
  55. MsgBox "Il y a des documents dans la file d'attente, purger la relancer la commande", vbCritical + _
  56. vbOKOnly, "PrtPDFCreator"
  57. Exit Sub
  58. End If
  59.  
  60.  
  61. Sheets("Rapport").Select 'Insertion du jpeg de la signature
  62. Range("C79").Select
  63. ActiveSheet.Pictures.insert( _
  64. "E:\Dossiers Clients\Modèles de documents\SIGNATURE REDIM.jpg").Select
  65. Selection.ShapeRange.IncrementLeft 60#
  66. Selection.ShapeRange.ScaleWidth 6.64, msoFalse, msoScaleFromTopLeft
  67. Selection.ShapeRange.ScaleHeight 6.64, msoFalse, msoScaleFromTopLeft
  68.  
  69. Application.ActivePrinter = "PDFCreator sur Ne00:"
  70. ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
  71. "PDFCreator sur Ne00:", Collate:=True
  72. Sheets("AXE X").Select
  73. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  74. Sheets("AXE Y").Select
  75. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  76. Sheets("AXE Z").Select
  77. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  78. Sheets("Volume 1").Select
  79. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  80. Sheets("Volume 2").Select
  81. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  82. Sheets("Volume 3").Select
  83. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  84. Sheets("Volume 4").Select
  85. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  86. Sheets("Equerrages").Select
  87. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  88.  
  89. Do Until pdfjob.cCountOfPrintjobs = 9 'attent que l'impression soit dans la file d'attente de pdf créator
  90. DoEvents
  91. Loop
  92.  
  93. .cCombineAll
  94. Do Until pdfjob.cCountOfPrintjobs = 1 'attent que la fusion des feuilles est complète
  95. DoEvents
  96. Loop
  97.  
  98. .cOption("UseAutosave") = 1
  99. .cOption("UseAutosaveDirectory") = 1
  100. .cOption("AutosaveDirectory") = sPDFPath
  101. .cOption("AutosaveFilename") = sPDFName
  102. .cOption("AutosaveFormat") = 0 ' 0 = PDF
  103.  
  104. .cPrinterStop = False
  105. Do Until pdfjob.cCountOfPrintjobs = 0 'attent que la fusion des feuilles est complète
  106. DoEvents
  107. Loop
  108. .cClearCache
  109. .cClose
  110.  
  111. End With
  112.  
  113. Sheets("Rapport").Select
  114. Range("C79").Select
  115. ActiveSheet.Pictures.Select
  116. Selection.Delete
  117. Sheets("Renseignements machine").Select
  118.  
  119. fin:
  120.  
  121. End Sub



ps : il reste dans ce code une partie de la 3ème macro qui me permet de vérifier l'existence de l'arborescence ou va être enregistrer le pdf (au même endroit que le fichier excel)

edit : à savoir que ce que je veux faire fonctionne manuellement

Autres pages sur : macro excel pdfcreator

Lassé par la pub ? Créez un compte

Meilleure solution

finalement un truc bien plus simple, et qui fonctionne, toujours avec pdfcreator, et j'ai même trouvé le code qui va bien pour protéger les documents...

  1. Sub Création_PDF()
  2. '
  3. ' Création_PDF Macro
  4. ' Macro enregistrée le 25/10/2010 par Ludovic 500
  5. '
  6. Dim TEST As String
  7. Dim début As Label
  8. Dim fin As Label
  9. Dim cheminannee As String
  10. Dim cheminclient As String
  11. Dim pdfjob As PDFCreator.clsPDFCreator
  12. Dim sPDFPath As String
  13. Dim sPDFName As String
  14. Dim annee As String
  15. Dim initiales As String
  16. Dim pass As String
  17.  
  18. TEST = Sheets("Renseignements Machine").Range("L1").Value
  19. cheminannee = Sheets("Renseignements Machine").Range("i47").Value
  20. cheminclient = Sheets("Renseignements Machine").Range("i48").Value
  21. annee = Sheets("Renseignements Machine").Range("i46").Value
  22. initiales = Sheets("Renseignements Machine").Range("m21").Value
  23. pass = "Ma Société" & annee & initiales & Round(1000000 * Rnd(), 0)
  24.  
  25. Sheets("Renseignements Machine").Range("j55") = pass
  26.  
  27. If TEST = "" Then GoTo début
  28. MsgBox "NOM DU CLIENT, NUMERO DU RAPPORT OU DATE, NON RENSEIGNES, VERIFIEZ ET RE-ESSAYEZ !!!", vbOKOnly, "OUBLIS !!!"
  29. GoTo fin
  30.  
  31. début:
  32.  
  33. Application.StatusBar = "Merci de patienter"
  34. Application.DisplayAlerts = False
  35.  
  36. If Dir(cheminannee, vbDirectory) = "" Then 'Création du dossier ANNEE si n'existe pas
  37. MkDir cheminannee
  38. End If
  39.  
  40. If Dir(cheminclient, vbDirectory) = "" Then 'Création du dossier CLIENT si n'existe pas
  41. MkDir cheminclient
  42. End If
  43.  
  44. sPDFPath = Sheets("Renseignements Machine").Range("i50").Value
  45. sPDFName = Sheets("Renseignements Machine").Range("B31").Value & ".pdf"
  46.  
  47. Set pdfjob = New PDFCreator.clsPDFCreator
  48. With pdfjob
  49.  
  50. If .cStart("/NoProcessingAtStartup") = False Then
  51. MsgBox "Il y a des documents dans la file d'attente, purger la, fermer pdfcreator puis relancer la commande", vbCritical + _
  52. vbOKOnly, "PrtPDFCreator"
  53. .cClearCache
  54. Exit Sub
  55. End If
  56. .cDefaultPrinter = True
  57. .cOption("UseAutosave") = 1 'enregistrement automatique du fichier
  58. .cOption("UseAutosaveDirectory") = 1 'enregistrement automatique du fichier dans le répertoire spécifié
  59. .cOption("AutosaveDirectory") = sPDFPath 'nom du répertoire de sauvegarde
  60. .cOption("AutosaveFilename") = sPDFName 'nom du fichier de sauvegarde
  61. .cOption("AutosaveFormat") = 0 'format de création : 0 = PDF
  62. .cOption("AutosaveStartStandardProgram") = 1 'ouverture du programme par défaut pour visualiser le fichier
  63. 'les lignes suivantes sont requises pour régler les paramètres de sécurité
  64. .cOption("PDFUseSecurity") = 1 'active la sécurité
  65. .cOption("PDFOwnerPass") = 1 'active le mot de passe propriétaire
  66. .cOption("PDFOwnerPasswordString") = pass 'mot de passe propriétaire
  67. 'les lignes suivantes servent à régler les autorisations/interdictions de l'utilisateur
  68. .cOption("PDFDisallowCopy") = 1 'n'autorise pas la copie
  69. .cOption("PDFDisallowModify") = 1 'n'autorise pas la modification
  70. .cOption("PDFDisallowModifyContents") = 1 'n'autorise pas la modification du contenu
  71. .cOption("PDFDisallowModifyComments") = 1 'n'autorise pas la modification des commentaires
  72. .cOption("PDFDisableCaption") = 1 'n'autorise pas la sélection du contenu par la souris
  73. 'les lignes suivantes forcent un utilisateur à saisir un mot de passe avant d'ouvrir le fichier
  74. ' pour l'activer, enlever l'apostrophe au début des 2 lignes suivantes
  75. '.cOption("PDFUserPass") = 1
  76. '.cOption("PDFUserPasswordString") = pass
  77. .cPrinterStop = True
  78.  
  79. MsgBox "Veuillez patienter, la création du document pdf est très longue!!!", vbOKOnly, "WAIT & SEE"
  80. Application.StatusBar = "Merci de patienter & password =" & pass
  81.  
  82. Sheets("Rapport").Select 'Insertion du jpeg de la signature
  83. Range("C79").Select
  84. ActiveSheet.Pictures.Insert( _
  85. "E:\Dossiers Clients\Modèles de documents\SIGNATURE REDIM.jpeg").Select
  86. Selection.ShapeRange.IncrementLeft 60#
  87.  
  88. Application.ActivePrinter = "PDFCreator sur Ne00:"
  89. ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
  90. "PDFCreator sur Ne00:", Collate:=True
  91.  
  92. 'remarque : les boucles "Do Until" suivi de "Loop" sont très importantes, car sans elles, certaines feuilles passent avant
  93. 'les autres en fonction de leur taille en ko, et au final le document créé est dans le désordre
  94.  
  95. Do Until pdfjob.cCountOfPrintjobs = 1 'attent que l'impression soit dans la file d'attente de pdf créator
  96. DoEvents
  97. Loop
  98. Range("c79").Select
  99. ActiveSheet.Pictures.Select
  100. Selection.Delete
  101. Range("c9").Select
  102.  
  103. Sheets("AXE X").Select
  104. Range("A1").Select
  105. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  106. Do Until pdfjob.cCountOfPrintjobs = 2 'attent que l'impression soit dans la file d'attente de pdf créator
  107. DoEvents
  108. Loop
  109.  
  110. Sheets("AXE Y").Select
  111. Range("A1").Select
  112. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  113. Do Until pdfjob.cCountOfPrintjobs = 3 'attent que l'impression soit dans la file d'attente de pdf créator
  114. DoEvents
  115. Loop
  116.  
  117. Sheets("AXE Z").Select
  118. Range("A1").Select
  119. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  120. Do Until pdfjob.cCountOfPrintjobs = 4 'attent que l'impression soit dans la file d'attente de pdf créator
  121. DoEvents
  122. Loop
  123.  
  124. Sheets("Volume 1").Select
  125. Range("A1").Select
  126. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  127. Do Until pdfjob.cCountOfPrintjobs = 5 'attent que l'impression soit dans la file d'attente de pdf créator
  128. DoEvents
  129. Loop
  130.  
  131. Sheets("Volume 2").Select
  132. Range("A1").Select
  133. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  134. Do Until pdfjob.cCountOfPrintjobs = 6 'attent que l'impression soit dans la file d'attente de pdf créator
  135. DoEvents
  136. Loop
  137.  
  138. Sheets("Volume 3").Select
  139. Range("A1").Select
  140. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  141. Do Until pdfjob.cCountOfPrintjobs = 7 'attent que l'impression soit dans la file d'attente de pdf créator
  142. DoEvents
  143. Loop
  144.  
  145. Sheets("Volume 4").Select
  146. Range("A1").Select
  147. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  148. Do Until pdfjob.cCountOfPrintjobs = 8 'attent que l'impression soit dans la file d'attente de pdf créator
  149. DoEvents
  150. Loop
  151.  
  152. Sheets("Equerrages").Select
  153. Range("A1").Select
  154. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  155. Do Until pdfjob.cCountOfPrintjobs = 9 'attent que l'impression soit dans la file d'attente de pdf créator
  156. DoEvents
  157. Loop
  158.  
  159. Sheets("Renseignements machine").Select
  160. ActiveSheet.Unprotect
  161. Range("D1:F8").Select
  162. With Selection
  163. .HorizontalAlignment = xlCenter
  164. .VerticalAlignment = xlCenter
  165. .WrapText = True
  166. .Orientation = 0
  167. .AddIndent = False
  168. .IndentLevel = 0
  169. .ShrinkToFit = False
  170. .ReadingOrder = xlContext
  171. .MergeCells = False
  172. End With
  173. Selection.Merge
  174. Range("D1").Select
  175. With Selection.Interior
  176. .ColorIndex = 44
  177. .Pattern = xlSolid
  178. End With
  179. Range("D1") = "PATIENCE, LA DISPARITION DE CE MESSAGE INDIQUE QUE LA CREATION EST TERMINEE"
  180. ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  181.  
  182. .cAddPrintjob ("E:\Dossiers Clients\Modèles de documents\Raccordements\" & Sheets("Renseignements machine").Range("j5").Value & ".ps")
  183. Do Until pdfjob.cCountOfPrintjobs = 10 'attent que l'impression soit dans la file d'attente de pdf créator
  184. DoEvents
  185. Loop
  186.  
  187. .cCombineAll 'fusion de tous les documents dans l'ordre d'arrivée
  188. Do Until pdfjob.cCountOfPrintjobs = 1 'attent que la fusion des feuilles est complète
  189. DoEvents
  190. Loop
  191.  
  192. .cPrinterStop = False
  193. Do Until pdfjob.cCountOfPrintjobs = 0 'attent que "l'impression" soit terminée
  194. DoEvents
  195. Loop
  196.  
  197. .cClearCache
  198. .cDefaultPrinter = False
  199. .cClose
  200. End With
  201.  
  202. Sheets("Renseignements machine").Select
  203. ActiveSheet.Unprotect
  204. Range("D1:F8").Select
  205. Selection.ClearContents
  206. Selection.Interior.ColorIndex = xlNone
  207. With Selection
  208. .HorizontalAlignment = xlGeneral
  209. .VerticalAlignment = xlCenter
  210. .WrapText = True
  211. .Orientation = 0
  212. .AddIndent = False
  213. .IndentLevel = 0
  214. .ShrinkToFit = False
  215. .ReadingOrder = xlContext
  216. .MergeCells = True
  217. End With
  218. Selection.UnMerge
  219. ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  220. Application.ActivePrinter = "HP Deskjet 5900 Series sur Ne03:"
  221. Application.StatusBar = ""
  222. Application.DisplayAlerts = True
  223. MsgBox "CREATION DU RAPPORT ELECTRONIQUE TERMINEE", vbOKOnly, sPDFName
  224. Range("B5").Select
  225.  
  226. fin:
  227. End Sub


c'est peut être toujours pas très beau, mais ça fonctionne, et donne le résultat que je voulais
Expert Programmation

Oulala, que ce code est laid. Pouah !
Salut Ludo. C'est moi qui t'ai appris à faire ça ?

Tant de Select :pfff: 
Et de fonctions différentes qui se mélangent :pfff: 

Qu'importe.

Ta question, c'est donc, comment assembler des fichiers différents dans une seule impression finale. C'est ça ?

Ben, c'est simple, il te suffit d'imprimer tous les documents que tu veux à la suite, entre la ligne
  1. cPrinterStop = True
et les lignes
  1. cCombineAll
  2. ..
  3. cPrinterStop = False


Hein !? Tu ne sait pas imprimer un document quelconque ? C'est pourtant facile. On demande à Windows de le faire. [:spamafote]
On utilise pour ce faire l'API ShellExecute :
  1. Private 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
  2.  
  3. Dim rc As Long
  4. rc = ShellExecute(0, "print", fichier, "", "", 0)
  5. If 1 < rc And rc <= 32 Then Debug.Print "Un truc c'est mal passé"
Expert Programmation

Cadeau :
  1. Option Explicit
  2.  
  3. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
  4. ByVal hWnd As Long, _
  5. ByVal lpOperation As String, _
  6. ByVal lpFile As String, _
  7. ByVal lpParameters As String, _
  8. ByVal lpDirectory As String, _
  9. ByVal nShowCmd As Long) As Long
  10.  
  11. Function FileExists(ByVal sFileName As String) As Boolean
  12. Dim FSO
  13. Set FSO = CreateObject("Scripting.FileSystemObject")
  14. FileExists = FSO.FileExists(sFileName)
  15. End Function
  16.  
  17. Function WorksheetExists(ByVal Name As String, Optional wb As Workbook) As Boolean
  18. Dim ws As Worksheet
  19.  
  20. WorksheetExists = False
  21. If wb Is Nothing Then Set wb = ActiveWorkbook
  22.  
  23. For Each ws In wb.Worksheets
  24. If ws.Name = Name Then
  25. WorksheetExists = True
  26. Exit For
  27. End If
  28. Next
  29. End Function
  30.  
  31. Function GetFilePath(ByVal FileName As String) As String
  32. Dim i As Integer
  33.  
  34. For i = Len(FileName) To 1 Step -1
  35. Select Case Mid(FileName, i, 1)
  36. Case ":": GetFilePath = Left(FileName, i): Exit For
  37. Case "\": GetFilePath = Left(FileName, i - 1): Exit For
  38. End Select
  39. Next
  40. End Function
  41.  
  42. Function GetFileName(ByVal FileName As String) As String
  43. Dim i As Integer
  44.  
  45. GetFileName = FileName
  46. For i = Len(FileName) To 1 Step -1
  47. If Mid(FileName, i, 1) = ":" Or _
  48. Mid(FileName, i, 1) = "\" _
  49. Then
  50. GetFileName = Mid(FileName, i + 1)
  51. Exit For
  52. End If
  53. Next
  54. End Function
  55.  
  56. Sub CollateVariousSourcesToPDF(ByVal PDFname As String, ParamArray prm())
  57. Dim pdf As PDFCreator.clsPDFCreator
  58. Dim ws As Worksheet
  59. Dim closepdf As Boolean
  60. Dim i As Integer
  61. Dim counter As Integer
  62. Dim rc As Long
  63.  
  64. Set pdf = New PDFCreator.clsPDFCreator
  65.  
  66. closepdf = pdf.cStart("/NoProcessingAtStartup")
  67. pdf.cDefaultPrinter = True
  68. pdf.cOption("UseAutosave") = 1
  69. pdf.cOption("UseAutosaveDirectory") = 1
  70. pdf.cOption("AutosaveDirectory") = GetFilePath(PDFname)
  71. pdf.cOption("AutosaveFilename") = GetFileName(PDFname)
  72. pdf.cOption("AutosaveFormat") = 0
  73. pdf.cClearCache
  74.  
  75. For i = LBound(prm) To UBound(prm)
  76. Select Case TypeName(prm(i))
  77. Case "Worksheet"
  78. prm(i).PrintOut
  79. Do: DoEvents: Loop Until pdf.cCountOfPrintjobs >= i + 1
  80. Case "Integer"
  81. Worksheets(prm(i)).PrintOut
  82. Do: DoEvents: Loop Until pdf.cCountOfPrintjobs >= i + 1
  83. Case "String" '// Nom de feuille ou nom de fichier ?
  84. If WorksheetExists(prm(i)) Then
  85. prm(i).PrintOut
  86. Do: DoEvents: Loop Until pdf.cCountOfPrintjobs >= i + 1
  87. Else
  88. If FileExists(prm(i)) Then
  89. rc = ShellExecute(0, "print", prm(i), "", "", 0)
  90. If 1 < rc And rc <= 32 Then
  91. Debug.Print "Un truc c'est mal passé avec l'impression."
  92. Else
  93. Do: DoEvents: Loop Until pdf.cCountOfPrintjobs >= i + 1
  94. End If
  95. Else
  96. Debug.Print "Bizarre : '" & prm(i) & "' non trouvé."
  97. End If
  98. End If
  99. Case Default
  100. Debug.Print "Bizarre : Le type '" & TypeName(prm(i)) & "' a été utilisé."
  101. End Select
  102. Next
  103.  
  104. ' // Assemblage
  105. pdf.cCombineAll
  106. For i = 0 To 1000: DoEvents: Next
  107. Do: DoEvents: Loop Until pdf.cCountOfPrintjobs <= 1
  108.  
  109. ' // C'est parti
  110. pdf.cPrinterStop = False
  111. For i = 0 To 1000: DoEvents: Next
  112. Do: DoEvents: Loop Until pdf.cCountOfPrintjobs = 0
  113.  
  114. ' // Mr Propre
  115. pdf.cClearCache
  116. If closepdf Then pdf.cClose
  117. End Sub
  118.  
  119. Sub Test_PDF()
  120. CollateVariousSourcesToPDF "C:\Documents and Settings\Ludovic 500\Mes Documents\test.pdf", Worksheets(1), 2, "C:\Documents and Settings\Ludovic 500\Mes Documents\Page_de_fin.pdf"
  121. End Sub

Bonjour Zeb, je savais que tu allais dire ça ;) 

non, non, ce code, ce n'est pas toi qui m'a appris à faire ça, :lol: , il vient pour partie d'une macro enregistrée par excel (pour l'impression des onglets) retravaillée pour imprimer sur pdfcreator, et de différentes recherche sur le net (google) pour la partie utilisation de pdfcreator, et le principal pour moi, c'est que ça fonctionne.

je te remercie pour ton aide précieuse, je ne vais pas recopier bêtement le code que tu m'as fourni, mais essayer de comprendre ce qu'il fait, et si j'ai besoin, je te fais signe pour plus d'explications.

je me rends compte que j'ai oublié de préciser que dans ma macro, la chaîne qui fait appel au nom du fichier pdf qui doit être joint et fusionné à la fin de l'impression des différents onglets est "racc".

autre précision, pour le pdf final, il ne faut pas que j'imprime tous les onglets, mais seulement ceux qui servent à établir le rapport de contrôle final envoyé au client ; je ne sais pas, pour le moment, si ça a une importance avec le code que tu m'offres.

à nouveau merci pour ton aide, je te tiens au courant de mes avancés, ou difficultés :sweat: 

juste une question, ton code peut s'appliquer aux macros excel? je demande ça car rien qu'avec le petit code que tu me donnes en premier, j'ai une erreur de compilation qui s'affiche sur ShellExecute : n'y a-t-il pas une référence à activer dans les outils de VBA? j'ai beau chercher,je ne trouve pas d'API Windows ShellExecute :sweat: 

je ne comprends pas le fonctionnement de ton code zeb, quand je lance la macro, il veux en appeler une autre? [:spamafote]

je me suis donc débrouillé en bricolant, mon truc, très certainement très laid pour un puriste, fonctionne.

cependant, j'ai un soucis lors de la fusion complète des fichiers en un seul avant création du pdf, arrivé à peu près à 70% de la fusion, excel affiche une boite informant qu'il "attend la fin de l'exécution OLE d'une autre application", et je me suis aperçu qu'il ne faut pas cliquer sur OK tant que pdfcreator n'a pas terminé la fusion des files d'attente, sinon il y a perte de file d'attente justement, et en plus le fichier final n'est pas créé.

j'ai tenté de multiplier les boucle "doevents", ou encore d'insérer des temporisations, rien n'y fait.

comment faire pour que l'attente d'excel soit allongée pendant l'exécution d'un OLE, ou encore que le temps imparti à un OLE soit plus long avant la "reprise en main" d'excel?

bon j'ai résolu mon soucis ci-dessus à force de chercher (merci google), et c'était ton c** comme soluce (enfin ça fonctionne pour mon cas) :

  1. Application.DisplayAlerts = False


me reste plus qu'à revenir sur le code de Zeb pour comprendre le fonctionnement ;) 
Lassé par la pub ? Créez un compte