FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Macro Excel : enregistrer feuille en PDF et envoi pièce jointe
 

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

Il y a 327 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Macro Excel : enregistrer feuille en PDF et envoi pièce jointe
 
Plus d'informations

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.

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......

G.M.G.V.S.O.
Profil : Modo matériel
Plus d'informations

Peut etre avec office2007 vu qu'il génére des PDF directement maintenant :)


---------------
SPAM & WAREZ = Ban!
Ultimate Boot CD | Memtest+
Mon bar préféré à Lyon ! | Bijoux Fantaisie de Créateur !
Plus d'informations

Oui, mais je n'ai que Office2003. Ca fait cher juste pour pouvoir faire une macro !

zeb
Profil : Modérateur libre
Plus d'informations

En passant, la ligne 4, tu peux l'écrire comme ça ;) :

Jour = Format(Now(), "ddmmyyyy" )

 

PDF n'est pas géré par Office2003. Il te faut une application externe. Une astuce consiste à installer une "imprimante PDF". Va voir ce que la catégorie "Le monde de Windows" ( http://www.presence-pc.com/forum/p [...] ujet-1.htm ) te propose.


Message édité par zeb le 10-06-2007 à 15:11:47

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

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.

Plus d'informations

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

Voilà la dernière version de ma macro :

Code :
  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.

Plus d'informations

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.

Code :
  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. Private Function CopyMira() As Variant
  21.     On Error GoTo sortie_erreur
  22.    
  23.     Dim system      As Object
  24.     Dim file        As Object
  25.     Dim sname      As Variant
  26.    
  27.     'K_REP_PDF & K_SHEET_TEMP & ".xls.pdf"
  28.     sname = Null
  29.     Set system = CreateObject("Scripting.FileSystemObject" )
  30.     Set file = system.GetFile(K_REP_PDF & K_SHEET_TEMP & ".pdf" )
  31.     If system.FolderExists(K_REP_MIRA) Then
  32.         sname = K_REP_MIRA & Format(Now, "dd-mm-yy" ) & "_Dashboard_v2.pdf"
  33.         file.Copy sname, True
  34.         ' 12-12-06_Dashboard_Bayplans_LARA_v2.pdf
  35.         system.DeleteFile K_REP_PDF & K_SHEET_TEMP & ".pdf", True
  36.     Else
  37.         MsgBox "Impossible de trouver le répertoire de destination.", vbCritical
  38.     End If
  39.    
  40. sortie:
  41.     CopyMira = sname
  42.     Exit Function
  43. sortie_erreur:
  44.     MsgBox Err.Description
  45.     Resume sortie
  46. 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


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

Oui, mais ça ne fonctionne pas avec Acrobat malheureusement.

Plus d'informations

C'est bien ce que je t'explique dans l'exemple. Si c'est sauvegarde dans mes docs, et bien tu le laisse faire puis tu le copies la ou tu désires.


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

Dans ce cas là, je préfère passer par le bouton Acrobat de la barre d'outils.

Merci


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Macro Excel : enregistrer feuille en PDF et envoi pièce jointe
 

Annonces Google
Publicité