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

  • Auteur de la discussion hyperion66
  • Date de début

hyperion66

Expert
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.
[cpp]Sub Enregistrement()
Dim Chemin1$, Chemin2$, Client$, Fichier$, Numfact$, Jour$
Chemin1 = "D:\Gestion\Factures\"
Chemin2 = "H:\Zerobug backup\Factures\"
Jour = Format(Day(Now()), "00") & Format(Month(Now()), "00") & Year(Now)
Client = Range("G4")
Numfact = Range("H12")
Fichier = Jour & "_" & Numfact & ".xls"
If Dir(Chemin1 & Client, 16) = "" Then MkDir Chemin1 & Client
ActiveWorkbook.SaveAs Chemin1 & Client & "\" & Fichier
If Dir(Chemin2 & Client, 16) = "" Then MkDir Chemin2 & Client
ActiveWorkbook.SaveAs Chemin2 & Client & "\" & Fichier
End Sub[/cpp]
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......
 

boub popsyteam

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

hyperion66

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

zeb

Modérateur
En passant, la ligne 4, tu peux l'écrire comme ça ;) : [fixed]Jour = Format(Now(), "ddmmyyyy")[/fixed]

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" ( ) te propose.
 

hyperion66

Expert
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 :
[fixed] Application.ActivePrinter = "Adobe PDF sur Ne03:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"Adobe PDF sur Ne03:", Collate:=True[/fixed]
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.
 

hyperion66

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

Voilà la dernière version de ma macro :
Code:
Sub Enregistrement()
Dim Chemin1$, Chemin2$, Client$, Fichier$, Numfact$, Jour$, F$, N$
Chemin1 = "H:\Zerobug backup\Factures\"
Chemin2 = "D:\Gestion\Factures\"
Jour = Format(Now(), "ddmmyyyy")
Client = Range("H7")
Numfact = Range("I15")
Fichier = Jour & "_" & Numfact & ".xls"
If Dir(Chemin1 & Client, 16) = "" Then MkDir Chemin1 & Client
ActiveWorkbook.SaveAs Chemin1 & Client & "\" & Fichier
If Dir(Chemin2 & Client, 16) = "" Then MkDir Chemin2 & Client
ActiveWorkbook.SaveAs Chemin2 & Client & "\" & Fichier
N = Jour & "_" & Numfact
F = Application.GetSaveAsFilename(N, "fichier pdf,*.pdf")
    Application.ActivePrinter = "Adobe PDF sur Ne03:"
    SendKeys N & "{ENTER}", False
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
                                         "Adobe PDF sur Ne03:"
  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.
 

Freeman23

Expert
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:
Private Function GenererPDF() As Boolean
    On Error GoTo sortie_erreur
    
    GenererPDF = False
    Application.ActivePrinter = "PDFCreator sur Ne00:"
    wb_file.Sheets(K_SHEET_TEMP).PrintOut
    While UCase(Dir(K_REP_PDF & K_SHEET_TEMP & ".pdf")) <> UCase(K_SHEET_TEMP & ".pdf")
        DoEvents
    Wend
    If UCase(Dir(K_REP_PDF & K_SHEET_TEMP & ".pdf")) = UCase(K_SHEET_TEMP & ".pdf") Then
        GenererPDF = True
    End If
   
sortie:
    Exit Function
sortie_erreur:
    MsgBox Err.Description
    Resume sortie
End Function

Private Function CopyMira() As Variant
    On Error GoTo sortie_erreur
    
    Dim system      As Object
    Dim file        As Object
    Dim sname       As Variant
    
    'K_REP_PDF & K_SHEET_TEMP & ".xls.pdf"
    sname = Null
    Set system = CreateObject("Scripting.FileSystemObject")
    Set file = system.GetFile(K_REP_PDF & K_SHEET_TEMP & ".pdf")
    If system.FolderExists(K_REP_MIRA) Then
        sname = K_REP_MIRA & Format(Now, "dd-mm-yy") & "_Dashboard_v2.pdf"
        file.Copy sname, True
        ' 12-12-06_Dashboard_Bayplans_LARA_v2.pdf
        system.DeleteFile K_REP_PDF & K_SHEET_TEMP & ".pdf", True
    Else
        MsgBox "Impossible de trouver le répertoire de destination.", vbCritical
    End If
    
sortie:
    CopyMira = sname
    Exit Function
sortie_erreur:
    MsgBox Err.Description
    Resume sortie
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
 

hyperion66

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

Freeman23

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

hyperion66

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

Merci
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 122
Messages
6 717 718
Membres
1 586 356
Dernier membre
TommyStam
Partager cette page
Haut