Se connecter avec
S'enregistrer | Connectez-vous

Macro Excel : enregistrer feuille en PDF et envoi pièce jointe

Dernière réponse : dans Programmation

Et oui, encore moi avec mes macros.
Pour ma future activité, je crée une facture sous Excel. J'ai créé une macro qui permet d'enregistrer la facture dans un dossier portant le nom du client, le fichier étant automatiquement nommé avec la date et le numéro de facture. Voilà le code.
  1. Sub Enregistrement()
  2. Dim Chemin1$, Chemin2$, Client$, Fichier$, Numfact$, Jour$
  3. Chemin1 = "D:\Gestion\Factures\"
  4. Chemin2 = "H:\Zerobug backup\Factures\"
  5. Jour = Format(Day(Now()), "00") & Format(Month(Now()), "00") & Year(Now)
  6. Client = Range("G4")
  7. Numfact = Range("H12")
  8. Fichier = Jour & "_" & Numfact & ".xls"
  9. If Dir(Chemin1 & Client, 16) = "" Then MkDir Chemin1 & Client
  10. ActiveWorkbook.SaveAs Chemin1 & Client & "\" & Fichier
  11. If Dir(Chemin2 & Client, 16) = "" Then MkDir Chemin2 & Client
  12. ActiveWorkbook.SaveAs Chemin2 & Client & "\" & Fichier
  13. End Sub

Maintenant, je cherche à ce que ma feuille soit automatiquement générée en PDF avec le même nom et, si possible, qu'un mail soit automatiquement ouvert avec le fichier au format PDF en pièce jointe.
Si quelqu'un peut m'aider......
Lassé par la pub ? Créez un compte

Oui, mais j'ai Acrobat qui installe une imprimante PDF !
Sinon, merci pour la ligne 4, ça simplifie pas mal en effet.
Sinon, comme macro pour le PDF, j'ai déjà ça comme début :
Application.ActivePrinter = "Adobe PDF sur Ne03:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"Adobe PDF sur Ne03:", Collate:=True

A rajouter à la suite de me première macro.
Mais je veux que le fichier soit automatiquement enregistré dans le bon dossier (Then MkDir Chemin1 & Client) et avec le bon nom (Jour & "_" & Numfact), sans que j'ai la moindre action à faire....et c'est là que je coince.

Bon, ça progresse doucement, mais toujours pas au point.

Voilà la dernière version de ma macro :
  1. Sub Enregistrement()
  2. Dim Chemin1$, Chemin2$, Client$, Fichier$, Numfact$, Jour$, F$, N$
  3. Chemin1 = "H:\Zerobug backup\Factures\"
  4. Chemin2 = "D:\Gestion\Factures\"
  5. Jour = Format(Now(), "ddmmyyyy")
  6. Client = Range("H7")
  7. Numfact = Range("I15")
  8. Fichier = Jour & "_" & Numfact & ".xls"
  9. If Dir(Chemin1 & Client, 16) = "" Then MkDir Chemin1 & Client
  10. ActiveWorkbook.SaveAs Chemin1 & Client & "\" & Fichier
  11. If Dir(Chemin2 & Client, 16) = "" Then MkDir Chemin2 & Client
  12. ActiveWorkbook.SaveAs Chemin2 & Client & "\" & Fichier
  13. N = Jour & "_" & Numfact
  14. F = Application.GetSaveAsFilename(N, "fichier pdf,*.pdf")
  15. Application.ActivePrinter = "Adobe PDF sur Ne03:"
  16. SendKeys N & "{ENTER}", False
  17. ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
  18. "Adobe PDF sur Ne03:"
  19. End Sub

Donc, ça m'enregistre bien mon fichier XLS avec le bon nom et dans le bon dossier (nom et prénom du client qui fait référence à la cellule H7), ça me lance ensuite "l'impression" PDF via l'imprimante Acrobat, avec là aussi le bon nom. Mais je dois sélectionner le dossier de destination, et même en sélectionnant le bon dossier de destination, il l'enregistre dans C:\Mes Documents (qui fait référence au port de l'imprimante PDF). Vous me direz bien que le plus simple serait de modifier le port de l'imprimante, mais vu que chaque PDF est enregistré dans un dossier différent, ça ne me convient pas.
Je rappelle que j'utilise Acrobat 7.

Merci à l'âme charitable qui pourrait venir me donner un coup de main.

Salut,

J'ai déjà fait ce genre de chose, pour créer le pdf on a un logiciel appelé PDFCreator qui simule une imprimante, par contre il faut régler le logiciel pour qu'il créé automatiquement la sauvegarde dans un répertoire paramétré.
Ensuite tu fais boucler le programme jusqu'à que la création soit fini et la tu le copie dans le répertoire voulu.

Voilà ce que ca donne dans mon programme.

  1. Private Function GenererPDF() As Boolean
  2. On Error GoTo sortie_erreur
  3.  
  4. GenererPDF = False
  5. Application.ActivePrinter = "PDFCreator sur Ne00:"
  6. wb_file.Sheets(K_SHEET_TEMP).PrintOut
  7. While UCase(Dir(K_REP_PDF & K_SHEET_TEMP & ".pdf")) <> UCase(K_SHEET_TEMP & ".pdf")
  8. DoEvents
  9. Wend
  10. If UCase(Dir(K_REP_PDF & K_SHEET_TEMP & ".pdf")) = UCase(K_SHEET_TEMP & ".pdf") Then
  11. GenererPDF = True
  12. End If
  13.  
  14. sortie:
  15. Exit Function
  16. sortie_erreur:
  17. MsgBox Err.Description
  18. Resume sortie
  19. End Function
  20.  
  21. Private Function CopyMira() As Variant
  22. On Error GoTo sortie_erreur
  23.  
  24. Dim system As Object
  25. Dim file As Object
  26. Dim sname As Variant
  27.  
  28. 'K_REP_PDF & K_SHEET_TEMP & ".xls.pdf"
  29. sname = Null
  30. Set system = CreateObject("Scripting.FileSystemObject")
  31. Set file = system.GetFile(K_REP_PDF & K_SHEET_TEMP & ".pdf")
  32. If system.FolderExists(K_REP_MIRA) Then
  33. sname = K_REP_MIRA & Format(Now, "dd-mm-yy") & "_Dashboard_v2.pdf"
  34. file.Copy sname, True
  35. ' 12-12-06_Dashboard_Bayplans_LARA_v2.pdf
  36. system.DeleteFile K_REP_PDF & K_SHEET_TEMP & ".pdf", True
  37. Else
  38. MsgBox "Impossible de trouver le répertoire de destination.", vbCritical
  39. End If
  40.  
  41. sortie:
  42. CopyMira = sname
  43. Exit Function
  44. sortie_erreur:
  45. MsgBox Err.Description
  46. Resume sortie
  47. End Function

Les constantes sont
K_REP_PDF : répertoire de création automatique du PDF
K_REP_MIRA : répertoire de destination finale du fichier
K_SHEET_TEMP : nom de l'onglet et donc du fichier créé.

Bon courage
Lassé par la pub ? Créez un compte