Envoi email automatique dès changement d'état de la cellule
J
Hello la team !
Je bloque sur un problème.
Dès qu'une valeur apparait dans la colonne G "Gestionnaire", j'aimerai qu'un mail soit envoyé automatiquement à l'adresse mail qui apparait dans la colonne B, avec dans le corps du mail les infos des colonnes D et E.
Mais je sèche..
Y a t'il quelqu'un pour un tuyau svp.
Merci beaucoup !
Bonjour,
Une solution possible.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Dim cel As Range
Dim OutApp As Object
Dim OutMail As Object
Dim MailSubject As String
Dim MailBody As String
' Définir la feuille de calcul
Set ws = ThisWorkbook.Sheets("NomDeVotreFeuille") ' Remplacez par le nom de votre feuille
' Vérifier si une modification a été apportée dans la colonne G "Gestionnaire"
If Not Intersect(Target, ws.Range("G:G")) Is Nothing Then
' Itérer à travers les cellules modifiées
For Each cel In Target
If cel.Value <> "" Then ' Vérifier si la cellule n'est pas vide
' Récupérer les informations des colonnes D et E
MailSubject = "Sujet du courriel" ' Remplacez par le sujet souhaité
MailBody = "Informations : " & cel.Offset(0, -3).Value & vbCrLf & _
"Plus d'infos : " & cel.Offset(0, -2).Value
' Créer une application Outlook
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0) ' Type 0 correspond à un nouveau message
' Remplacer "AdresseEmailDestinataire" par la colonne B du gestionnaire
With OutMail
.To = cel.Offset(0, -5).Value ' Adresse email du destinataire
.Subject = MailSubject
.Body = MailBody
.Display ' Afficher le courriel (pour vérification) ou .Send pour l'envoyer directement
End With
' Libérer les objets Outlook
Set OutMail = Nothing
Set OutApp = Nothing
End If
Next cel
End If
End Sub
Bonjour le fil et le Forum,
comme l'instruction est exécutée suite à un événement sur une feuille particulière, il n'est pas nécessaire qu'elle soit définie dans le code. On n'as pas non plus besoin d'une boucle.
Dans le module de la feuille (pas dans un module standard, voir ici pour en savoir plus https://www.excel-pratique.com/fr/vba/evenements_feuille), voici le code mis à jour
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
'Dim cel As Range
Dim OutApp As Object
Dim OutMail As Object
Dim MailSubject As String
Dim MailBody As String
' ' Définir la feuille de calcul
' Set ws = ThisWorkbook.Sheets("NomDeVotreFeuille") ' Remplacez par le nom de votre feuille
' Vérifier si une modification a été apportée dans la colonne G "Gestionnaire"
If Not Intersect(Target, Range("G:G")) Is Nothing Then
' Itérer à travers les cellules modifiées
' For Each cel In Target
If Target.Value <> "" Then ' Vérifier si la cellule n'est pas vide
' Récupérer les informations des colonnes D et E
MailSubject = "Sujet du courriel" ' Remplacez par le sujet souhaité
MailBody = "Informations : " & Target.Offset(0, -3).Value & vbCrLf & _
"Plus d'infos : " & Target.Offset(0, -2).Value
' Créer une application Outlook
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0) ' Type 0 correspond à un nouveau message
' Remplacer "AdresseEmailDestinataire" par la colonne B du gestionnaire
With OutMail
.To = Target.Offset(0, -5).Value ' Adresse email du destinataire
.Subject = MailSubject
.Body = MailBody
.Display ' Afficher le courriel (pour vérification) ou .Send pour l'envoyer directement
End With
' Libérer les objets Outlook
Set OutMail = Nothing
Set OutApp = Nothing
End If
'Next cel
End If
End Sub