Microsoft 365 Envoi mail avec image et PJ "en boucle"

ExcLnoob

XLDnaute Occasionnel
Bonjour Le Forum,

J'aurai besoin de votre aide svp.
Je bloque sur la dernière étape d'une macro....

J'ai trouvé un code qui me permet d'envoyer un mail via Excel avec l'image de mon onglet dans le corps de mon mail, le fichier et une PJ que je peux selectionner au choix en attachement du même mail.
Jusque là tout va bien, la macro fonctionne via mon bouton, le mail part et tout y est.
Le problème c'est que plus j'utilise le bouton sans enregistrer ou quitter le fichier plus la macro me cumule de PJ dans l'envoi de mes mails.
Du coup, sachant que j'ai 2 PJ à chaque envoi, si j'envoie 10 mails, je vais avoir 20 PJ au au dixième email au lieu de 2.

Je souhaiterai insérer une ligne de code dans cette macro pour la "mette à jour" après chaque envoi mais je sèche.
Pourriez-vous m'aider svp ? (J'espère avoir été clair...)

Par avance merci!!

Le macro en question :

Private Sub envoi_mail_PJ_image ()
fileToOpen = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")

ActiveSheet.Range("B2:M29").Select
ActiveWorkbook.EnvelopeVisible = True

With ActiveSheet.MailEnvelope
.Introduction = "xxxxxxxxx"
.Item.to = "xxxx.xxx@xxx.com"
.Item.CC = "xxxxxxxx"
.Item.Attachments.Add ActiveWorkbook.FullName
.Item.Attachments.Add fileToOpen
.Item.Subject = "xxxxxxxxxxx"
.Item.Send
End With
MsgBox "xxxxxxx"
End Sub
 
Solution
VB:
Option Explicit
Dim fileToOpen As String
Private Sub envoi_mail_PJ_image()
fileToOpen = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")

ActiveSheet.Range("B2:M29").Select
ActiveWorkbook.EnvelopeVisible = True

With ActiveSheet.MailEnvelope
    .Introduction = "xxxxxxxxx"
    With .Item
        .to = "xxxx.xxx@xxx.com"
        .CC = "xxxxxxxx"
         While .Attachments.Count > 0
            .Attachments.Remove 1
         Wend
        .Attachments.Add ActiveWorkbook.FullName
        .Attachments.Add fileToOpen
        .Subject = "xxxxxxxxxxx"
        .Send
    End With
End With
MsgBox "xxxxxxx"
End Sub
Il n'y a pas de méthode Attachments.Clear, alors on fait avec Remove.

Cordialement,
--
LR

laurent3372

XLDnaute Impliqué
VB:
Option Explicit
Dim fileToOpen As String
Private Sub envoi_mail_PJ_image()
fileToOpen = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")

ActiveSheet.Range("B2:M29").Select
ActiveWorkbook.EnvelopeVisible = True

With ActiveSheet.MailEnvelope
    .Introduction = "xxxxxxxxx"
    With .Item
        .to = "xxxx.xxx@xxx.com"
        .CC = "xxxxxxxx"
         While .Attachments.Count > 0
            .Attachments.Remove 1
         Wend
        .Attachments.Add ActiveWorkbook.FullName
        .Attachments.Add fileToOpen
        .Subject = "xxxxxxxxxxx"
        .Send
    End With
End With
MsgBox "xxxxxxx"
End Sub
Il n'y a pas de méthode Attachments.Clear, alors on fait avec Remove.

Cordialement,
--
LR
 

ExcLnoob

XLDnaute Occasionnel
VB:
Option Explicit
Dim fileToOpen As String
Private Sub envoi_mail_PJ_image()
fileToOpen = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")

ActiveSheet.Range("B2:M29").Select
ActiveWorkbook.EnvelopeVisible = True

With ActiveSheet.MailEnvelope
    .Introduction = "xxxxxxxxx"
    With .Item
        .to = "xxxx.xxx@xxx.com"
        .CC = "xxxxxxxx"
         While .Attachments.Count > 0
            .Attachments.Remove 1
         Wend
        .Attachments.Add ActiveWorkbook.FullName
        .Attachments.Add fileToOpen
        .Subject = "xxxxxxxxxxx"
        .Send
    End With
End With
MsgBox "xxxxxxx"
End Sub
Il n'y a pas de méthode Attachments.Clear, alors on fait avec Remove.

Cordialement,
--
LR

Re-Bonjour laurent3372,
J'ai marqué résolu car mon problème est effectivement réglé.
Petite question cependant, pour ma compréhension personnelle...

J'ai intégré cette macro dans une autre macro donnant à une forme la capacité de réagir comme un bouton.
De ce fait lorsque j'ai implémenté votre solution je n'ai pas mis :
Option Explicit
Dim fileToOpen As String

Pourtant cela fonctionne sans problème. Du coup, je me demande à quoi servent ces 2 lignes svp ?

Je suis apprenti sorcier vba et j'aime bien comprendre ce que je fais...
Merci.
 

laurent3372

XLDnaute Impliqué
Option Explicit sert à dire au compilateur que toutes les variables doivent être déclarées explicitement. Du coup, si tu supprimes l'option, le compilateur de signale pas que la variable fileToOpen n'a pas été déclarée.
C'est une bonne habitude que de mettre systématiquement Option Explicit en tête de tous les modules. Ca évite pas mal d'erreurs de codage ou de programmation.
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 123
Membres
112 666
dernier inscrit
Coco0505