Création de mail avec une adresse expéditrice différente
Bonjour,
En gestion de bien immobilier, je me suis amusé à créer un fichier excel qui va me générer chaque mois les factures pour les différents clients et me créer un brouillon d'adresse mail contenant cette facture pour vérification avant envoi.
Seulement voila, cette activité étant une activité secondaire, je souhaiterai expédier ces mails via une adresse @gmail.com. Celle-ci est connecté sur outlook mais n'est pas le compte principal (le compte principal étant celui d'une autre activité relié à un compte microsoft office 365 business).
J'ai essayé plusieurs manière, y compris avec l'aide de Chat GPT mais à chaque fois l'adresse mail expéditrice est celle de mon compte principal et non celle que je souhaiterai utiliser. Pour l'heure je me suis résigné à faire la manip de changer l'adresse expéditrice en manuel à chaque fois, mais me connaissant, j'ai peur d'une fois ne plus y penser et envoyer ces factures avec la mauvaise adresse. Je vous donne mon code ici :
Sub GenererFacturesEtEnregistrerPDF()
Dim wsBDD As Worksheet
Dim wsFacture As Worksheet
Dim i As Long
Dim LastRow As Long
Dim SavePath As String
Dim NomFichier As String
Dim numeroFacture As String
Dim lot As String
Dim moisSuivant As Integer
Dim outlookApp As Object
Dim outlookNamespace As Object
Dim outlookMail As Object
Dim outlookAccount As Object ' Représente un compte de messagerie Outlook
' Définir les feuilles de calcul
Set wsBDD = ThisWorkbook.Sheets("BDD Clients")
Set wsFacture = ThisWorkbook.Sheets("Facture")
' Initialiser l'application Outlook
On Error Resume Next
Set outlookApp = CreateObject("Outlook.Application")
On Error GoTo 0
If outlookApp Is Nothing Then
MsgBox "Outlook n'est pas disponible sur cet appareil.", vbExclamation
Exit Sub
End If
' Obtenir l'objet Namespace d'Outlook
Set outlookNamespace = outlookApp.GetNamespace("MAPI")
' Identifier le compte de messagerie spécifié
Dim defaultAccount As Object
For Each defaultAccount In outlookNamespace.Accounts
If defaultAccount.SmtpAddress = "@ADRESSE MAIL QUE JE SOUHAITE UTILISER" Then
' Utiliser ce compte comme compte par défaut
Set outlookAccount = defaultAccount
Exit For
End If
Next defaultAccount
' Vérifier si le compte a été trouvé
If outlookAccount Is Nothing Then
MsgBox "Le compte ADRESSE MAIL QUE JE SOUHAITE UTILISER n'a pas été trouvé dans Outlook.", vbExclamation
Exit Sub
End If
' Boucle à travers les lignes de la base de données des clients
LastRow = wsBDD.Cells(wsBDD.Rows.Count, "A").End(xlUp).Row
For i = 2 To LastRow ' Commencer à la ligne 2 pour éviter les titres
' Copier les données du client sur la feuille de facture
wsFacture.Range("F3").Value = wsBDD.Cells(i, 1).Value ' Entreprise qui facture
wsFacture.Range("B17").Value = wsBDD.Cells(i, 2).Value ' Objet
wsFacture.Range("B18").Value = wsBDD.Cells(i, 3).Value ' Lieu
wsFacture.Range("F12").Value = wsBDD.Cells(i, 4).Value ' Nom du client
wsFacture.Range("A22").Value = wsBDD.Cells(i, 8).Value ' Produit 1
wsFacture.Range("F22").Value = wsBDD.Cells(i, 9).Value ' Unité produit 1
wsFacture.Range("G22").Value = wsBDD.Cells(i, 10).Value ' Prix produit 1
wsFacture.Range("A23").Value = wsBDD.Cells(i, 11).Value ' Produit 2
wsFacture.Range("F23").Value = wsBDD.Cells(i, 12).Value ' Unité produit 2
wsFacture.Range("G23").Value = wsBDD.Cells(i, 13).Value ' Prix produit 2
wsFacture.Range("A24").Value = wsBDD.Cells(i, 14).Value ' Produit 3
wsFacture.Range("F24").Value = wsBDD.Cells(i, 15).Value ' Unité produit 3
wsFacture.Range("G24").Value = wsBDD.Cells(i, 16).Value ' Prix produit 3
' Générer le numéro de facture
lot = wsBDD.Cells(i, 17).Value ' Récupérer la valeur de la colonne "Lot"
moisSuivant = Month(DateAdd("m", 1, Date)) ' Mois suivant
If Not IsEmpty(lot) Then
numeroFacture = lot & Year(Date) & " - " & moisSuivant
Else
numeroFacture = Year(Date) & " - " & moisSuivant
End If
' Enregistrer le numéro de facture dans la feuille de facture
wsFacture.Range("C11").Value = numeroFacture
' Enregistrer la facture au format PDF
SavePath = "T:\Immobilier\Test" ' Chemin d'enregistrement des PDF
NomFichier = wsFacture.Range("F12").Value & "_" & wsFacture.Range("B17").Value ' Nom du fichier PDF
wsFacture.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=SavePath & "\" & NomFichier & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
' Créer le brouillon de courrier électronique dans Outlook
Set outlookMail = outlookApp.CreateItem(0) ' Créer un nouveau brouillon
With outlookMail
.SendUsingAccount = outlookAccount ' Utiliser le compte spécifié pour envoyer le courrier
.To = wsBDD.Cells(i, 7).Value ' Adresse e-mail du client (colonne G)
.Subject = NomFichier ' Objet du courrier
.Body = "Bonjour," & vbCrLf & _
"Vous trouverez ci-joint votre facture concernant le loyer du mois suivant." & vbCrLf & _
"Cordialement," & vbCrLf & _
"MON NOM" & vbCrLf & _
"MON ENTREPRISE" & vbCrLf & _
"Tél : MON NUMERO"
' Ajouter le fichier PDF comme pièce jointe
.Attachments.Add SavePath & "\" & NomFichier & ".pdf"
.Display ' Ouvrir le brouillon pour envoyer manuellement
End With
Next i
' Nettoyer les objets
Set wsBDD = Nothing
Set wsFacture = Nothing
MsgBox "Les factures ont été générées et les brouillons de courrier électronique ont été créés avec succès !", vbInformation
End Sub- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
cette instruction serait meilleure :
Set .SendUsingAccount = outlookAccount ' Utiliser le compte spécifié pour envoyer le courrierJe pense avoir trouver la solution sur un topic qui traite déjà du sujet :
https://forum.excel-pratique.com/excel/comment-changer-l-expediteur-d-un-e-mail-en-vba-171724
Désolé pour le doublon et merci d'avoir jeter un coup d'oeil