RESOLU! créer pdf, envoyer par mail et enregistrer sous grâce à 1 seul bouton.....

pnlop

XLDnaute Occasionnel
Bonjour le Forum,
Je reviens avec mon projet qui touche à sa fin, mais il me reste une chose à régler.
Je joint mon fichier, plus qu'alléger, vu qu'il n'y a que la feuille concernée...
J'ai un classeur avec plusieurs feuilles dont certaines servent de BD, un UserForm etc.
J'ai réussi à ce que les données soient rassemblées dans la feuille "visualisation" selon un formatage bien précis. (plus tard, je bloquerai les modif. de cette feuille.)
Mon idée:
Lorsque l'utilisateur clique sur le bouton "valider l'offre", il doit dès lors s'effectuer les actions suivantes:
créer un document pdf à partir de la feuille "visualisation", enregistrement de ce pdf dans un chemin précis (toujours le même) puis envoi par email de ce pdf (toujours la même adresse) puis message de choix: fermer l'application ou nouveau document...
Je crois que c'est tout simplement au dessus de mes moyens!
Il y aurait-il qqn pour m'aider?
Merci
Pnlop
 

Pièces jointes

  • demo nouv form copie .xlsm
    80.9 KB · Affichages: 167
Dernière édition:

sousou

XLDnaute Barbatruc
Re : créer pdf, envoyer par mail et enregistrer sous grâce à 1 seul bouton.....

Bonjour
Dans un premier temps, voici au plus simple comment envoyer un message avec outlook
Prendre soin de donner le chemin entier pour le fichier attaché

Sub envoimessage(sujet, message, adresse, document)

Set c = Outlook.GetNamespace("MAPI")
Set mess = Outlook.CreateItem(olMailItem)
mess.Body = message
mess.Subject = sujet
mess.To = adresse
mess.Attachments.Add document
mess.Send

End Sub
 

pnlop

XLDnaute Occasionnel
Re : créer pdf, envoyer par mail et enregistrer sous grâce à 1 seul bouton.....

Ok merci sousou.
Mais y a t-il un moyen avant ça de creer un pdf juste avec la feuille "visualisation" de ce classeur? pour ensuite povoir envoyer ce pdf et l'enregistrer sous?
Merci
a +
Pnlop
 

pnlop

XLDnaute Occasionnel
Re : créer pdf, envoyer par mail et enregistrer sous grâce à 1 seul bouton.....

Bonjour le forum,
J'ai peut-être une idée... mais le point de départ commence très mal!
Avec ce code, je souhaite sélectionner la plage de cellules qui sera traitée (pdf, envoi etc)
Donc les colonnes sont fixes (A à E) mais les lignes variables.. Il doit prendre chercher la dernière cellule pleine depuis le bas en A et à partir de là, sélectionner les cellules de cette lignes et les précédentes, sur les colonnes A à E seulement..... (en résumé, si la dernière cellule pleine est A70, cela revient à sélectionner A1:E70)
Mais suis pas encore au point dur les variables...
With Worksheets("visualisation")
Dim i&, j&, x&, fin&

fin = .Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To fin
For a = 1 To 5
.Cells(i, a).Select
Next a
Next i

End With
End Sub

Ensuite, je voulais essayer quelque chose avec: Fichier - Enregistrer et envoyer - créer document PDF/XPS... en pratique ça pourrait fonctionner, mais de la à le mettre en vba depuis un bouton......!
 

pnlop

XLDnaute Occasionnel
Re : créer pdf, envoyer par mail et enregistrer sous grâce à 1 seul bouton.....

Youpiiiiii!!!
En cherchant sur internet, j'ai trouvé la solution!
PS: lien pour ceux que ça intéresse: Impression automatique feuille Excel en PDF - Forum des professionnels en informatique

MAIS... (il y a toujours un mais, sinon c'est pas drôle!!!:rolleyes:)
Voici mon code qui est dans le bouton "VALIDER L'OFFRE" et dont le fonctionnement joue, puisqu'après contrôle, j'ai bien la feuille active enregistrée en pdf au bon endroit avec le bon nom et qu'une boîte mail s'ouvre avec en PJ le pdf en question (j'ai fait les modif dans les options de pdf.creator comme indiqué dans le lien...)

Private Sub CommandButton3_Click()

With Worksheets("Accueil")
.Range("D4:D8").ClearContents
.Range("D12:D16").ClearContents
.Range("D20:D24").ClearContents
.Range("G7:H7").ClearContents
.Range("G15:H15").ClearContents
.Range("G23:H23").ClearContents
.Range("H5").ClearContents
.Range("H13").ClearContents
.Range("H21").ClearContents
.CheckBox19 = False
.TextBox1 = Null
.CheckBox8 = False
.CheckBox7 = False
.CheckBox6 = False
.CheckBox5 = False
.CheckBox4 = False
.CheckBox3 = False
.CheckBox2 = False
.CheckBox1 = False
.Range("J5:J8").ClearContents
.Range("J13:J16").ClearContents
.Range("J21:J24").ClearContents
End With

With UserForm10
.ListBox2.Clear
.ListView1.ListItems.Clear
.TextBox1 = Null
End With


Dim a As Worksheet
Dim sc As Workbook
Dim nouveauNom As String

Application.ScreenUpdating = False

Set a = ActiveSheet
nouveauNom = "form.offre" & " " & Range("A2") & " " & Range("E1")
Set sc = Workbooks.Add(xlWBATWorksheet)
sc.SaveAs (nouveauNom & ".xls")
a.Copy Before:=sc.Sheets(1)
ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"

Workbooks(nouveauNom & ".xls").Close savechanges:=False
Kill nouveauNom & ".xls"

Application.ScreenUpdating = True

End Sub


Le problème est le suivant: Dans toutes les cellules qui n'ont pas reçu une donnée (via autres code...) il y a "VRAI"............ Donc esthétiquement, c'est franchement pas top et rend le doc illisible!
Ou est l'erreur? tout en sachant que je n'ai rien modifier dans mes autres codes, seulement dans celui qui concerne ce bouton...
HELP PLEASE pour que je puisse finir et faire pêter le champagne!
Merci
pnlop
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou