Envoi de mail avec plage dans le corps

Bonjour à tous!

Je reviens sur ce forum car j'ai repris un élément de macro sur lequel je bossais il y a quelques temps afin de l'appliquer à mon nouveau projet.

Le souci que je rencontre est dans la dernière partie de mon code :

L'envoi de mail automatique via Outlook.

Il s'agit de quelque chose que je sais faire et que j'ai déjà appliqué à différents sujets, mais là, le cumul de différents critères fait que je n'arrive pas à en voir le bout.

Je m'explique.

Je cherche à envoyer un mail automatiquement à un fournisseur (que j'irai chercher dans une cellule) qui contiendrait dans le corps du texte, deux plages de cellules variables en nombre de lignes ainsi que ma signature par défaut.

Thev m'avait aidé dans le précédent sujet en me donnant l'astuce du rng qui me permet de copier coller la plage dans le mail après ouverture de celui-ci.

Il restait cependant un problème. Avec cette astuce, je perds la possibilité de changer l'adresse mail émettrice.

Je crois avoir essayé tout ce que je pouvais pour la changer, mais impossible. J'ai dans mon entreprise une boîte personnelle et une boîte générique utilisé par mes collègues et moi-même. Le but étant ici d'envoyer le mail à partir de la boîte générique afin que les réponses des fournisseurs arrivent dessus et pas sur la boîte perso de la personne qui utilisera la macro.

Quelqu'un aurait-il une astuce? Le mail actuel est parfait, je n'ai plus qu'à ajouter quelques variables et de la mise en forme mais ce que j'ai actuellement me convient parfaitement. Le seul souci est cette adresse mail.

Voici mon code (censuré bien sûr) :

Sub SendMail()

    ' Déclarer des variables
    Dim PlageFeuilleComp As Range
    Dim PlageFeuillePart As Range
    Dim DerLigMailComp As Long
    Dim DerColMailComp As Long
    Dim DerLigMailPart As Long
    Dim DerColMailPart As Long
    Dim DerLigDest As Long

' Définition des variables
    Dim OL As Object, myItem As Object, wDoc As Object, rng As Object

    '// assignation application Outlook
    Set OL = CreateObject("Outlook.Application")

                DerLigMailComp = Workbooks("Transit.xlsx").Sheets("Complètes").Cells(Rows.Count, 1).End(xlUp).Row
                DerColMailComp = Workbooks("Transit.xlsx").Sheets("Complètes").Cells(1, Columns.Count).End(xlToLeft).Column
                DerLigMailPart = Workbooks("Transit.xlsx").Sheets("Partielles").Cells(Rows.Count, 1).End(xlUp).Row
                DerColMailPart = Workbooks("Transit.xlsx").Sheets("Partielles").Cells(1, Columns.Count).End(xlToLeft).Column

                ' plage feuille à envoyer
                Set PlageFeuilleComp = Workbooks("Transit.xlsx").Sheets("Complètes").Range(Cells(1, 1).Address, Cells(DerLigMailComp, 11).Address)
                Set PlageFeuillePart = Workbooks("Transit.xlsx").Sheets("Partielles").Range(Cells(1, 1).Address, Cells(DerLigMailPart, 11).Address)

                ' Assignation des objets
                Set myItem = OL.CreateItem(olMailItem): Set wDoc = myItem.GetInspector.WordEditor

                ' Création Email et envoi
                With myItem

                    ' Expéditeur, Destinataire, Sujet

                   .SentOnBehalfOfName = "monmailgénérique@entreprise.fr" 'Adresse qui doit remplacer mon adresse perso
                    .To = Workbooks("Transit.xlsx").Sheets("Complètes").Cells(2, 10).Value 'A adapter de façon à ce que ça fonctionne avec complète ou partielle
                    .Subject = "Relance AR du " & Date & " " & Workbooks("Transit.xlsx").Sheets("Complètes").Cells(2, 4).Value 'A adapter de façon à ce que ça fonctionne avec complète ou partielle
                    .Display

                    Set rng = wDoc.Content

                    ' Corps du mail
                    rng.InsertParagraphBefore
                    rng.Move 4, -1
                    rng.InsertAfter "Bonjour," & vbNewLine
                    rng.InsertAfter vbNewLine & "Nous vous invitons à trouver ci-dessous les commandes pour lesquelles nous attendons une confirmation d'un ou plusieurs postes." & vbNewLine
                    rng.InsertAfter vbNewLine & "Dans l'attente d'une réponse de votre part dans les meilleurs délais, vous avez la possibilité de nous signaler une anomalie à l'aide de la case commentaire (attention, cette case ne fait pas acte d'AR)." & vbNewLine
                    rng.InsertAfter vbNewLine & "Commandes complètes :" & vbNewLine

                    ' Copie de la plage
                    rng.InsertParagraphAfter
                    rng.Move 4, 1
                    PlageFeuilleComp.Copy
                    rng.Paste
                    rng.Move 4

                    rng.InsertAfter vbNewLine & "Commandes partielles :" & vbNewLine

                    ' Copie de la plage
                    rng.InsertParagraphAfter
                    rng.Move 4, 1
                    PlageFeuillePart.Copy
                    rng.Paste
                    rng.Move 4

                    rng.InsertAfter vbNewLine & vbNewLine & "Si vous n'êtes pas concerné par ce message, merci de nous le signaler et de nous transmettre les coordonnées de la personne qui gère cette activité." & vbNewLine
                    rng.InsertAfter vbNewLine & "Restant à votre disposition pour toute information complémentaire,"

                    ' Police du corps du mail
                    With rng.Font
                        .Name = "Helvetica"
                        .Size = 11
                        .Color = 10050863
                    End With

                    ' Envoi
                    '.Send

                End With

                ' désassignation des objets
                Set myItem = Nothing: Set wDoc = Nothing

    '// désassignation application Outlook
    Set OL = Nothing

End Sub

Ce que je veux faire mais qui ne fonctionne pas, c'est le "SentOnBehalfOfName...".

Ne faites pas attention si le code n'est pas opti, c'est encore une ébauche et quelques variables sont inutiles (je pense à mes DerCol notamment) et je ferai les vérifications lorsque j'aurai un code qui fonctionne à 100%.

Merci d'avance pour votre aide!

Bonjour,

as-tu (tu=le compte avec lequel ta macro se connecte à outlook) les autorisations pour envoyer par délégation avec l'identifiant de cette boite mail partagée ?

Bonjour h2so4!

Pas de souci de ce côté-là.

Je suis admin sur la boîte partagée et plusieurs de mes codes permettant d'envoyer des mails automatiquement fonctionnent parfaitement.

Celui-là par exemple :

Sub SendMail()

'Mail auto avec boucle jusqu'à ce que A2 soit vide

    Sheets("ZE2N").Select

    Do

Dim OutApp As Object
    Dim OutMail As Object
    Dim Corps As String
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    Corps = "<span style=""color:#2F5D99""><font size=3><font face=Helvetica>Bonjour,<br/><br/>" & "Votre demande" & "<span style=""color:#E23232"">" & Range("B2").Offset(0, 2).Value & "</span>" & " a bien été prise en compte par notre service le " & "<span style=""color:#E23232"">" & Range("B2").Offset(0, 4).Value & "</span>" & ".<br/><br/>" & "Elle est enregistrée sous le numéro de commande " & "<span style=""color:#E23232"">" & Range("B2").Offset(0, -1).Value & "</span>" & " (plusieurs commandes peuvent être rattachées à une même demande).<br/><br/>" & "Le fournisseur retenu pour cette commande est : " & "<span style=""color:#E23232"">" & Range("B2").Offset(0, 1).Value & "</span>" & ".<br/><br/><br/>" & "Restant à votre disposition pour toute information complémentaire,<br/><br/><font/><font/></span>"

    On Error Resume Next
    With OutMail
        .SentOnBehalfOfName = "mailgénérique@entreprise.fr"
        .To = Range("B2").Value
        .Display
        .BCC = "mailosef@entreprise.fr"
        .Subject = "Confirmation de prise en compte de la demande " & Range("B2").Offset(0, 2).Value
        .HTMLBody = Corps & .HTMLBody
        .Send
    End With
    On Error GoTo Oups
    Set OutMail = Nothing
    Set OutApp = Nothing
Oups: Resume Next

    Range("2:2").Delete
    Loop While Range("A2") <> ""

    Call Réinitialiser
    MsgBox ("Les confirmations de commandes ont été envoyées avec succès.")

End Sub

Seul ce code ne veut pas...

Bonjour,

Je reviens finalement vers vous car j'ai trouvé solution à mon problème...

En fait, il n'y avait aucun problème!

Il s'avère que j'avais simplement pris trop de précautions en faisant mon code et en me rendant compte que le .display de mon mail m'affichait un mail avec le mauvais expéditeur je m'étais bloqué là-dessus en me disant qu'il y avait un souci.

Aujourd'hui, n'ayant toujours pas trouvé de solutions, j'ai simplement essayé de modifier les mails dans mon exemple par des fictifs (le mien et celui de mes collègues) et j'ai enlevé l'apostrophe de mon '.send afin de le rendre fonctionnel, chose que je n'osais pas faire car trop focalisé sur l'expéditeur qui n'était pas bon en display.

Et puis voilà, que dire... ça fonctionne...

Il s'avère donc que l'action de changement d'expéditeur se fait à l'envoi et non à l'affichage!

Bref, merci à tous ceux qui ont pu m'aider jusqu'à maintenant, le problème est résolu!

A bientôt

Bonjour,

merci de ton retour.

Rechercher des sujets similaires à "envoi mail plage corps"