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

Rechercher des sujets similaires à "vba boucle worksheet pdf outlook"