VBA boucle worksheet=>PDF=>outlook
Bonjour à tous et merci de venir voir mon souci
Je n'ai pas un grand niveau et m'inspire de ce que je trouve sur divers forum pour mes codes (je ne mesure pas toujours la portée du code que j'utilise!).
Je souhaite utiliser un fichier excel pour présenter des données avec un onglet par site que je souhaiterai envoyer en une manipulation à l'ensemble des destinataires (un onglet différent => un destinataire différent) au format PDF.
J'arrive à générer autant de mail que d'onglets, et malgré des noms de fichiers corrects, le contenu du PDF est toujours celui du premier onglet :
Activité1.pdf contient activité1, Activité2.pdf contient activité1...
Dans le cas présent, je dispose donc d'un classeur contenant des onglets dont la plupart des noms commence par un "_" mais pas tous.
Je souhaite effectuer une boucle pour que dés que la macro trouve un onglet débutant par "_", il en fasse un PDF, puis envois un mail en insérant le PDF qui vient d'être généré, puis passe à l'onglet suivant. N'étant pas en production je préfère pour le moment rester à la visualisation et ne pas envoyer directement le mail : j'utiliserai l'option SEND telle que décrite dans le code quand je serai un peu plus avancé.
Vous remerciant par avance de vos lumières
Excel 2013 et composant outlook installé
Option Explicit
Sub EnvoisPDF()
'
' PDF Macro
'
'Création onglet en PDF pour envois par mail
Dim Ws As Worksheet
For Each Ws In Worksheets
If Ws.Name Like "_*" Then
Dim nom As String
nom = (Ws.Range("W2").Value & ".pdf")
'J'ai donc une cellule dans l'onglet qui contient le chemin complet
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nom
'envoyer fichier PDF par courriel
Dim ol As New Outlook.Application
Dim olmail As MailItem
Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = Ws.Range("W1").Value 'adresse destinataire en cellule W1 de chaque onglet
.Subject = ("Activité " & Ws.Range("w4").Value) 'ici le sujet la cellule W4 de chaque onglet contient le nom du site
'email formaté comme HTML
.BodyFormat = olFormatHTML
.HTMLBody = "<html><p>Bonjour,</p><p>Veuillez trouver ci-joint l’activité de votre Centre .</p><p>Bien cordialement,</p><p></p><p> Tartampion</p><p>Responsable des travaux finis</p><p>123456</p><p>adresse</p><p>Tél </p></html>"
'----------------------
.Attachments.Add nom 'ici la pièce jointe
.Display '.Display /Send : Display correspond à l'affichage du message / Send demande un envoi direct
'nettoyage...
If (Not (olmail Is Nothing)) Then Set olmail = Nothing
If (Not (ol Is Nothing)) Then Set ol = Nothing
End With
nom = Empty
End If
Next Ws
End Sub
Bonjour,
à tester,
Sub EnvoisPDF()
Dim Ws As Worksheet
Dim nom As String
For Each Ws In Worksheets
If Ws.Name Like "_*" Then
nom = Ws.Range("W2").Value & ".pdf"
'J'ai donc une cellule dans l'onglet qui contient le chemin complet
Ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nom 'modification fait ici
'envoyer fichier PDF par courriel
Dim ol As New Outlook.Application
Dim olmail As MailItem
Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = Ws.Range("W1").Value 'adresse destinataire en cellule W1 de chaque onglet
.Subject = ("Activité " & Ws.Range("w4").Value) 'ici le sujet la cellule W4 de chaque onglet contient le nom du site
'email formaté comme HTML
.BodyFormat = olFormatHTML
.HTMLBody = "<html><p>Bonjour,</p><p>Veuillez trouver ci-joint l’activité de votre Centre .</p><p>Bien cordialement,</p><p></p><p> Tartampion</p><p>Responsable des travaux finis</p><p>123456</p><p>adresse</p><p>Tél </p></html>"
'----------------------
.Attachments.Add nom 'ici la pièce jointe
.Display '.Display /Send : Display correspond à l'affichage du message / Send demande un envoi direct
'nettoyage...
If Not olmail Is Nothing Then Set olmail = Nothing
If Not ol Is Nothing Then Set ol = Nothing
End With
nom = Empty
End If
Next Ws
End Sub
Rhaaa merci Isabelle
Deux petites lettres
Un grand merci à toi et à la communauté.