VBA envoi MAIL+PJ

Bonjour,

Etant totalement novice dans la maîtrise du VBA je vous demande un coup de pouce.

Je souhaite créer une macro VBA me permettant d'envoyer en un clic via Outlook la feuille ( feuille active) en PJ. Un bouton sera créer dans la feuille afin de déclencher la macro.

Etant donné qu'il y a un grand nombre de destinataires, les adresses mails de ces derniers seront reprises dans la colonne A de la feuille 2 de mon doc excel. La macro doit ainsi utilisée le répertoire d'adresse présent en colonne A de la feuille 2.

J'aimerais également en utilisant je suppose la fonction "range" ( je n'arrive pas à la faire marcher...) émettre une condition :

Si la cellule "E10" est inférieur à 94% la macro s'active et envoi automatiquement la feuille 1 en PJ aux adresses mails mentionnées dans la colonne B de la feuille 2 de mon classeur Excel. ( Mail qui sera envoyé qu'à une seule reprise lorsque le seuil est atteint).

Pour chacun des envois, une boite de dialogue doit apparaître afin d'alerter l'utilisateur de l'action de la macro et avec un OUI/NON lui laisser le choix d'envoyer ou non le mail.

AccuseReception = True

'Nom de la feuille (remplacer Recap par celui de la Feuille à envoyer)

ThisWorkbook.Sheets("Recap").Copy

ActiveWorkbook.SendMail Destinataires, Sujet, AccuseReception

ActiveWorkbook.Close False

End Sub

Le code ci-dessus permet cela = il fonctionne chez moi.

Ci-joint une ébauche de mon code. Cependant, il est incomplet et présente quelques doublons et anomalies...

Sub EnvoiPage()

Dim AccuseReception As Boolean

Dim ListeDest()

Dim i As Long

Dim oMsgApp As Outlook.Application

Dim oMsg As Outlook.MailItem

Dim sListDest As String

Dim sFichier As String

While i < 94

If Range("E10&i") < 94 Then

envoi mail

'au dessus j'éssaye tant bien que mal d'intégrer ma condition siE10<94% envoyer un mail aux adresses mail situées

'sur la colonne B de la feuille 2 du classeur".

Set oMsgApp = New Outlook.Application

ListeDest() = Range("tblase[Mail]")

'C'est au dessus pour la ListeDest que j'ai besoin de préciser que ma liste de destinaitaire se trouve

'colonne A de la feuille 2'

Set oMsg = oMsgApp.CreateItem(olMailItem)

With oMsg

.To = sListeDest

.Attachments.Add sFichier

.Subject = "Rapport"

.Body = "Bonjour," & Chr(10) & Chr(13) & "Ci-joint le Rapport"

.Send

AccuseReception = True

'Nom de la feuille (remplacer Recap par celui de la Feuille à envoyer)

ThisWorkbook.Sheets("Recap").Copy

ActiveWorkbook.SendMail Destinataires, Sujet, AccuseReception

ActiveWorkbook.Close False

End With

oMsgApp.Quit

Set oMsgApp = Nothing

Set oMsg = Nothing

End Sub

Voilà donc une ébauche de mon code VBA. Est-il possible de me le compléter et corriger car malheureusement j'arrive à ma limite de compétence... je stagne depuis très longtemps dessus.

Autre question, faut-il faire 2 macros, une pour l'envoi du rapport via le bouton et une autre pour l'envoi automatique lorsque la cellule E10 est inférieur à 94%?

Je vous remercie par avance !

Cordialement

Manque justement la PJ ici, enfin un embryon de fichier excel ...

La pièce jointe à envoyer, c'est en excel ou en pdf ?

La pièce jointe à envoyer sera au format excel

As-tu ...

Steelson a écrit :

un embryon de fichier excel ...

J'ai réussi a générer ce code qui fonctionne sans problème. Il envoi comme convenu en PJ pdf la feuille active ( feuille 1) de mon classeur excel par mail à l'adresse présente en cellule [B95].

Comme évoqué dans mon premier message, j'aimerais que mon mail s'envoi à toutes les adresses présentes dans la feuille"Mails" ( je n'arrive toujours à trouver comment...).

De plus, lorsque la valeur de la cellule "H15" passe sous le seuil des 94%, je souhaite qu'un mail soit envoyé automatiquement à une liste de destinataires présente dans la feuille"Mails2".

Ci-joint mon code:

SubSendWithAtt()

' Nécessite la référence : Microsoft Outlook 1x Object Library

Dim olApp As Outlook.Application

Dim OLmail As MailItem

Dim CurFile As String

Set olApp = New Outlook.Application

Set OLmail = olApp.CreateItem(olMailItem)

' "C:\Users\Thierry\AppData\Local\Temp\MaFeuille.pdf "

CurFile = ThisWorkbook.Path& "\" & "RapportJournalier.Pdf"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CurFile, _

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

OpenAfterPublish:=False

WithOLmail

.To = [B95]

.CC = ""

.Subject = "Rapport Journalier T4"

.Body = "Bonjour," & Chr(10) & Chr(13) & "Ci-joint le Rapport Journalier du " &Format(Date, "dd/mm/yy") & Chr(10) & Chr(13) & "Bonne réception," & Chr(10) & Chr(13) & "Cordialement"

.Attachments.AddCurFile

'.Attachments.Add "c:\My Documents\book.doc"

.Send

End With

MsgBox "Merci de vérifier que le message apparait dans -messages envoyés- dans votre messagerie OUTLOOK."

' Effacer les variables objets

Set OLmail = Nothing

Set olApp = Nothing

End Sub

Par avance merci.

Je joint également un fichier excel vierge ( mon doc étant confidentiel). Je pourrais transposer sans problème.

toujours pas de fichier excel rempli a minima ...

spike29 a écrit :

liste de destinataires présente dans la feuille"Mails2".

quelles cellules ?
Dim idest As Integer
With Sheets("Mails2")
    ' destinataires en colonne A depuis 2
    For idest = 2 To .[A1].End(xlDown).Row
        ' ton code debut
        .To = .Cells(idest, "A").Value
        ' ton code suite
    Next idest
End With
spike29 a écrit :

cellule "H15"

quelle feuille ?

Bonjour Steelson,

si je peux me permettre une petite correction

Dim idest As Integer
With Sheets("Mails2")
    ' destinataires en colonne A depuis 2
   For idest = 2 To .[A1].End(xlDown).Row
        ' ton code debut
       .To =.To &  .Cells(idest, "A").Value & ";"
        ' ton code suite
   Next idest
End With

Merci H2SO4

Pour ma part, j'avais interprété comme un envoi séparé à chacun.

Tu proposes (plus justement sans doute) un envoi groupé.

Bonjour Steelson,

effectivement je ne l'avais pas interprété comme toi

Merci à vous pour le coup de main, je vais tester ces codes au travail.

Steelson, je te joint l'embryon de mon fichier vierge de données

Pour ma liste de destinataires présente dans la feuille "MAIL", sont concernées toutes les cellules de la colonne A de "A1:A199" par exemple, de sorte à me laissez de marge en quantité d’adresse...

L'envoi de mon mail sera bien un envoi groupé ( une sorte de liste de diffusion).

Concernant la Cellule H10 de la Feuille1 lorsqu'elle passe sous le seuil des 94%, je souhaite qu'un mail soit envoyé automatiquement + PJ de la feuille active à une liste de destinataires présente dans la feuille"MAIL" destinataires = cellules de la colonne B "B1:B199" par exemple.

Auriez-vous un code permettant l'envoi automatique de mail + Pj de la feuille active une fois ce seuil de 94% atteint ?

Merci d'avance !

37test-vba.xlsx (13.99 Ko)

je doute fort que ce soit la copie de ton code !!

recopie le bien dans un module et tu verras apparaître les erreurs liées aux manques d'espaces

et indente le afin d'y voir clair !

SubSendWithAtt()

' Nécessite la référence : Microsoft Outlook 1x Object Library
Dim olApp As Outlook.Application
Dim OLmail As MailItem
Dim CurFile As String

Set olApp = New Outlook.Application
Set OLmail = olApp.CreateItem(olMailItem)
' "C:\Users\Thierry\AppData\Local\Temp\MaFeuille.pdf "
CurFile = ThisWorkbook.Path& "\" & "RapportJournalier.Pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CurFile, _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
WithOLmail
.To = [B95]
.CC = ""
.Subject = "Rapport Journalier T4"
.Body = "Bonjour," & Chr(10) & Chr(13) & "Ci-joint le Rapport Journalier du " &Format(Date, "dd/mm/yy") & Chr(10) & Chr(13) & "Bonne réception," & Chr(10) & Chr(13) & "Cordialement"
.Attachments.AddCurFile
'.Attachments.Add "c:\My Documents\book.doc"
.Send
End With
MsgBox "Merci de vérifier que le message apparait dans -messages envoyés- dans votre messagerie OUTLOOK."

' Effacer les variables objets
Set OLmail = Nothing
Set olApp = Nothing
End Sub

bon je vais te renvoyer quelque chose de plus sain

A tester ...

31test-vba.xlsm (24.68 Ko)

des news ?

Oui, j'ai testé aujourd'hui les deux formules et ça ne fonctionne malheureusement pas chez moi.

J'ai le code erreur suivant qui apparaît : "Erreur 5 : Argument ou appel de procédure incorrect".

et visiblement cette formule pose problème chez moi: .To = .To & .Cells(idest, "A").Value & ";"

ça fonctionnait bien chez vous ?

Je n'arrive pas à identifier clairement d'où vient le problème...

essaie ceci ...

40test-vba.xlsm (27.87 Ko)

J'ai testé le premier des 2 codes VBA => envoi PJ fichier pdf à une liste de destinataires.

Ce code fonctionne parfaitement ! Un grand merci à toi Steelson.

Je vais tester le second code aujourd'hui ( envoi automatique avec condition) je te tiens informé.

Parfait

En effet comme je n'ai plus accès à Outlook je ne pouvais pas tester. J'avais fait en aveugle d'où mon erreur de débutant !

Bonjour Steelson,

Le 2ème code VBA celui concernant la condition : If [alerte] <> "" Or Sheets("RAPPORT").[H10] > 0.94 Then Exit Sub ne fonctionne pas chez moi.

Lorsque j'active la macro, j'ai plusieurs messages d’erreurs qui apparaissent:

" erreur compilation => fonction ou variable attendue et " If [alerte] <> " ainsi que [alerte] = Now semblent impliqués.

De plus, j'ai également le message " dépassement de capacité" qui apparaît".

A l'ouverture du document le message d'erreur : erreur5 argument ou appel de procédure incorrect apparaît.

Autant te dire qu'avec cette macro malgré quelques tentatives d'ajustement, je suis dépassé à 100%...

Désolé, l'erreur vient du fait qu'il n'y avait qu'une seule adresse en colonne B

J'ai modifié le programme pour en tenir compte

61test-vba.xlsm (28.62 Ko)
Rechercher des sujets similaires à "vba envoi mail"