Pdf joint a email

Bonjour'

je suis assez nul avec VBA mais j'essaye d'apprendre en utilisant des exemples trouvés sur le web.. Mais je n'ai pas trouvé de réponse après plusieurs heures passées à chercher sur le web

J'ai un document exemple (ci-joint) que je souhaite modifier:

1/ où puis je mettre à jour les rangées et colonnes qui doivent apparaitre dans le document PDF qui est généré? Pour l'instant il n'y a que la zone en jaune qui apparait dans le PDF que je génère, et je veux rajouter d'autres zones...

2/ comment faire pour que le fichier PDF ne se sauvegarde pas sur l'ordinateur, mais soit joint automatiquement à un email qui s'ouvre (avec Outlook), avec comme nom de fichier PDF la valeur de la cellule A1 , avec comme destinataire l'email de la cellule B3, et avec comme sujet de l'email également la valeur de la cellule A1 ?

Je sais que je demande beaucoup, mais ça m'aiderait bien.

Merci par avance!!

Eric

Bonjour,

Pour la première question

modifie dans ton code

Set rng = [Zone_d_impression]

au lieu de

Set rng = [PDFRange]

pour la 2 ème question, farfouille un peu dans le forum, il y a des exemples en pagaille

avec un test à voir

Merci!

J'ai le fichier que tu m'as envoyé tout marche, mais dans le mien, lorsque je le copie dans mon fichier (dans un nouveau module), je reçois cette erreur:

error

et aussi:

dans mon fichier il y a plusieurs onglets- il y a seulement un onglet ouvert à la fois (les autres sont "hidden", invisibles).

Par quoi je dois remplacer le nom du fichier à enregistrer ?

sNomFic = Sheets("sheet1").Range("A1").Value & ".pdf"

J'ai essayé d'écrire à la place "activesheet.range("A1").Value etc.. mais ça donne une erreur...

Re,

Dans ton classeur d'origine, dans la définition des Noms, tu as "PDF Range" qui est la plage en jaune,

tu as aussi un Noms "Zone d'impression" qui définit la zone d'impression , mais aussi la plage à prendre en compte pour le PDF

Si dans le classeur sur lequel tu travailles, la plage n'est pas défini çà marche pas

Ensuite pour le chgt d'onglet, (chose non précisées au départ) il faut créer une boucle sur les onglets existant en mettant une variable sur le sNomFic ,

Mais si tu ne le précises pas au départ, "moi peut pas savoir"

je ne comprends rien du tout

ça veut dire quo définir une plage ?

en ce qui concerne les onglets, la macro doit transformer en PDF toujours l'onglet visible actif. Il n'y a pas quelque chose de plus simple qu'une boucle ?

Sub Mail()

Dim FileExtStr As String

Dim FileFormatNum As Long

Dim Sourcewb As Workbook

Dim destwb As Workbook

Dim TempFilePath As String

Dim TempFileName As String

Dim OutApp As Object

Dim OutMail As Object

Dim S As Shape

Dim sNomFic As String, sRep As String, WshShell As Object

With Application

.ScreenUpdating = False

.EnableEvents = False

End With

' Créer une instance Windows Script pour retrouver le chemin du bureau

Set WshShell = CreateObject("WScript.Shell")

sRep = WshShell.SpecialFolders("Desktop")

Set WshShell = Nothing

' Définit le nom du fichier à enregistrer

sNomFic = Sheets("nom onglet").Range("A1").Value & ".pdf"

' Enregistrer la feuille en PDF

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:=sRep & "\" & sNomFic, _

Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _

OpenAfterPublish:=False

Set OutApp = CreateObject("outlook.application")

Set OutMail = OutApp.CreateItem(0)

With OutMail

.To = Sheets("nom onglet").Range("C8").Value (destinataire du mail selon adresse écrite dans cellule C8 de l'onglet actif)

.Cc = "xyz@gmail.com"

.Attachments.Add (sRep & "\" & sNomFic)

.Subject = Sheets("nom onglet").Range("A1").Value

.Display

End With

OutMail.send

With Application

.ScreenUpdating = True

.EnableEvents = True

End With

Kill (sRep & "\" & sNomFic) (effacer le fichier pdf de là où il a été sauvegardé, une fois qu'il a été joint à l'email et envoyé.)

End Sub

Re,

Dans le premier classeur ou dans celui que je t'ai envoyé

depuis le menu FORMULES / Gestionnaire de noms clic sur "PDFRange" puis dans la barre "Fait référence à:"

tu verras que ce qui est entouré correspond à ce que tu avais sur ton premier montage

recommence l'opération avec "Zone d'impression" et là tu verras que la plage n'est pas la même

Donc, comme tu reprends le code pour le mettre dans un autre classeur et que la PLAGE n'est pas défini dans le gestionnaire de nom, avec le même nom "Zone d'impression" pour l'exemple, c'est sur çà marche pas

Je te conseille un peu de lecture sur le site d'Office

https://support.office.com/fr-fr/article/D%C3%A9finir-et-utiliser-des-noms-dans-les-formules-4d0f13ac-53b7-422e-afd2-abd7ff379c64#bmquickly_name_a_cell_or_range_of_cells

Ensuite pour les autres onglets, à savoir que "ACTIVESHEET" c'est la feuille (ou onglet) actif, dans ce cas tu devras lancer la macro depuis le dévellopeur, ou mettre un bouton sur chaque feuille

Alors qu'avec un onglet d'accueil et une liste de choix (pour les onglets présents sur le classeur) tu choisis et tu lances

j'ai compris pour la définition de la plage.

J'ai ajouté dans chaque onglet la définition avec "Print_Area" ..

Maintenant pour que la macro fonctionne je dois la mettre dans le code de chaque onglet et l'adapter avec son nom?

Est ce que je laisse "activesheet" dans le code ou il faut le changer par autre chose?

Re,

Pourquoi t'emme.... à mettre le code dans chaque page, alors qu'avec une simple page d'accueil, tu pourrais choisir l'onglet voulu dans une liste déroulante et lancer le mail

c trop complique pour moi.....

la macro ne marche toujours pas

Re,

Regarde, en étant sur le développeur, depuis le menu OUTILS/Références,

cocher la référence 'Microsoft Outlook xx.x Object Library.

c'est fait mais marche toujours pas

Je recois ce message d'erreur:

run-time error

Automation error. The filename, directory name or volume label syntax is incorrect.

Re

Place ton classeur sans données confidentielles

ca veut dire quoi? je ne comprends pas ce que je dois faire?

Re,

Tu le places en PJ sur ton prochain post

j'abandonne,

vous ne comprendrez rien car tout le document est en langue etrangere non latine donc pas possible de joindre le document.

merci quand meme...

Re,

Regarde avec ce que j'ai monté, et tente de le mettre à ta sauce en espérant que mon original fonctionne chez toi


Au cas où il fonctionne

Regarde, en étant sur le développeur, depuis le menu OUTILS/Références,

les références

et dans le classeur que tu monteras, coche les mêmes

apres de longues heures a essayer d'adapter le code, je n'ai pas reussis

tant pis.

je vais abandonner l'idee

merci quand meme

Rechercher des sujets similaires à "pdf joint email"