Transformation d'un fichier excel en PDF par macro

Fermé
lebeaujo Messages postés 4 Date d'inscription samedi 20 février 2016 Statut Membre Dernière intervention 24 février 2016 - 21 févr. 2016 à 09:53
 lebeaujo - 3 mars 2016 à 17:36
Bonjour,

Voila, j'utilise le code si dessous qui a été fourni par Mike 31 pour une autre utilisateur que moi.
Cela fonctionne impec, mais le seul souci que j'ai, est que j'utilise ce code pour des commande de mazout pour différents engins ferrovières et je voudrais pouvoir garder une preuve de commande.
J'ai supprimé la ligne "Kill..............., le fichier PDF reste bien dans un dossier, mais quand je lance une nouvelle commande ce fichier est remplacé par le fichier de la nouvelle commande, comment pourrais-je faire pour garder tous les fichiers automatiquement
D'avance je vous remercie

la feuille Devis est créée en extension PDF, Envoyée et supprimée.
coller ce code dans un module et l'associer à un bouton ou verra plus tard de l'associer à un activeX
renseigner cette ligne du code en remplaçant les xxxx par l'adresse mail du destinataire
objMessage.To = "xxx.xxxxx@free.fr"
et éventuellement objMessage.From = "adresse mail expéditeur" ou simplement un "Nom" entre guillemet
mettre à jour le SMTP qui est celui de votre fournisseur d'accès


Sub Envoi_Feuil_Excel_en_PDF()
Dim messageHTML
On Error GoTo errorHandler
'on cré le fichier PDFdans le même dossier que le fichier source
Sheets("Devis").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ActiveWorkbook.Path & "\" & "Devis.pdf"

Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Sujet du Message"
objMessage.From = "xxx.xxxxxx@free.fr" 'adresse mail de l'expéditeur n'est pas obligatoire
objMessage.To = "xxx.xxxxx@free.fr" 'Email du destinataire doit-être correct ici
objMessage.TextBody = "Bonjour," & vbCrLf & "Veuillez trouver en piéce jointe votre facture" & vbCrLf & "en votre aimable réglement"
piece_jointe = ActiveWorkbook.Path & "\" & "Devis.pdf"
''piece_jointe = "C:\Documents and Settings\Les Lagouanère\Bureau\0917_001.pdf" 'chemin du fichier à envoyer en piéce-jointe
'piece_bis = "C:\Documents and Settings\Les Lagouanère\Bureau\Cligno.xls" ' Si on souhaite envoyer plusieurs pièces les déclarer
messageHTML = "Ceci est un message en HTML"

objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.free.fr"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update

objMessage.AddAttachment (piece_jointe) 'On ajoute la piéce jointe, il est possible d'envoyer plusieurs pièces
'objMessage.AddAttachment (piece_bis) 'dans ce cas on ajoute un objMessage.AddAttachement () par pièce
objMessage.Send
MsgBox "Le mail a été bien envoyé !"
'la feuille PDF créée est est supprimée après l'envoi
Kill ActiveWorkbook.Path & "\" & "Devis.pdf"
'si erreur on sort de la procédure
Exit Sub
errorHandler:
'description de l'erreur survenue
MsgBox Err.Description
End Sub



A voir également:

4 réponses

tyranausor Messages postés 3545 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 1 avril 2022 2 031
22 févr. 2016 à 19:22
Bonjour, je vois que passes par CDO pour envoyer ton mail, je penses donc que tu n'as pas de logiciel de messagerie type Outlook ou Thundebird
0
lebeaujo Messages postés 4 Date d'inscription samedi 20 février 2016 Statut Membre Dernière intervention 24 février 2016
24 févr. 2016 à 19:43
Bonjour,
Si au travail sur le PC j'ai Outlook
0
tyranausor Messages postés 3545 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 1 avril 2022 2 031
27 févr. 2016 à 19:42
Bonjour, en effet, en testant le code le fichier pdf est remplacé par le plus récent. Et avec la commande Kill il est supprimé après l'envoie.

Pour ton problème d'historisation (garder une copie), la solution est donnée ici.

Il faudrait, pour différencier les pdf que tu leur attribue un nom personnalisé qu'un générique. Je pense plus à Devis Truc pour l'entreprise Truc.
0
Oui, cela je sais mais je ne sais pas ou je doit mettre la référence de la cellule qui contient le n° de l'engin ainsi que la date de livraison dans le cote
0
tyranausor Messages postés 3545 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 1 avril 2022 2 031
28 févr. 2016 à 21:53
Bonjour, c'est la propriété filename qui contiendra la variable.

Admettons que la cellule A1 contienne le nom de la société (ex : "Truc"), le contenu de A1, donc sa valeur, sera ma variable (par exemple nom).

Donc
filename:= ActiveWorkbook.Path & "" & "Devis " & nom & ".pdf"


ce qui donne

Sheets("Devis").ExportAsFixedFormat Type:=xlTypePDF, Filename:= ActiveWorkbook.Path & "\" & "Devis " & nom & ".pdf"
0
Merci, cela fonctionne.
Sans abuser, j'ai le même problème avec un fichier Excel
J'ai créé une macro toujours pour une commande et une macro pour l'envoi par mail et sauvegarde.
La macro pour commande impec
La macro pour l'envoi me donne une erreur comme quoi il ne trouve pas le fichier
Ces macros se trouve dans un serveur au boulot car différente personnes pourraient l'utiliser.
La sauvegarde du fichier peux rester dans le dossier émetteur et comme référence une cellule cette cellule serait le B30 qui contiendrai le N° de machine ainsi que la date de livraison.
Pourriez vous me donner un code pour cela.
Encore un très grand merci
0
tyranausor Messages postés 3545 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 1 avril 2022 2 031
3 mars 2016 à 00:23
Bonjour, admettons que tu utilises la même macro pour enregistrer la feuille Devis en pdf et pour envoyer celle-ci, il te suffit d'ajouter le chemin donné précédemment.

Cependant, ton message me laisse penser que tu as deux macros, une pour l'enregistrement et une autre pour l'envoi.
Pour la seconde, indiques juste dans le chemin de la pièce jointe l'endroit exact où ton fichier se trouve. En reprenant mon exemple, si ton fichier Excel se trouvait sur le bureau, le fichier pdf "Devis Truc.pdf" doit se trouver sur ton bureau. Donc il faut que la macro trouve ce fichier pdf sachant que son nom est variable. Je te propose un peu de lecture sur les variables. Dans Excel, tu importes donc le code d'envoi par mail mais il faut le mettre dans le même module sinon ta variable ne sera pas gardée (tu met ton curseur dessus pour voir)
0
Je te remercie beaucoup, car maintenant cela fonctionne impec.
Vu l'heure que tu as envoyé le message, n'oublie pas de te reposer quand même.
Encore merci.
Encore une petite question, mais cela ne presse pas
Dans une cellule de ma commande je dois donner une adresse de livraison suivant ou la machine ce trouve ex: CLI Luttre ou CLI Mons ou CLI Tournai .....
Pour cela j'ai fait : Tapez 1 pour CLI Luttre; Tapez 2 pour CLI Mons ....etc
et dans mon fichier Excel suivant le N° tapez je fais une recherche verticale
Ma question: serait il possible de faire cela avec une macro ?
0