VBA : Envoie de mail automatique

Bonjour à tous et toutes,

Tout d’abord je vous remercie, de nouveau, pour l’existence de ce forum.

Aussi je vous explique mon sujet.
J’ai une liste excel qui 'incrémente automatiquement lors du remplissage de formulaire « Userform ».
Dans mon classeur j’ai une colonne « Formateurs » et j’ai enregistrer un code VBA pour envoyer un mail dés lors que le nom du formateur apparaît.
J’ai mis ce code :

Sub mail_auto()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String
    Dim L As Long

    With Worksheets("PowerBi")    'adaptez le nom de feuille
        derlig = Range("J" & Rows.Count).End(xlUp).Row
        For L = 1 To derlig
            strbody = ""
            If Range("J" & L) = "Vincent" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("X" & L)
                'On Error Resume Next
                With OutMail
                    .To = "mail"
                    .CC = ""
                    .BCC = ""
                    .Subject = "Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
            End If
            Set OutMail = Nothing
            Set OutApp = Nothing
        Next L
    End With
End Sub

Le souci c’est que dès que j’enregistre une formation au nom de Vincent alors ca envoie bien un mail mais ca lui envoie tous les mails précédents … Est-il possible de n’envoyé qu’un seul mail sur la derniere ligne enregistrer dans excel ?

Merci beaucoup,

Bonjour,
Il faut changer :

en

For L = derlig To 2 Step -1

Ensuite au lieu de:

ajouter Exit Sub:

End With
On Error goto 0
Exit Sub

Cordialement
Will-Fread

1 « J'aime »

Bonjour,

Un grand merci :slight_smile: !!

Cependant, ça ne fonctionne pas de cette manière, ça n’envoie pas de mail :frowning:

Aussi, je constate une autre anomalie :

  • Même avec le code précédent, je ne peux envoyer un mail automatique que si a l’instant ou je clique sur le bouton « Mail » je suis sur la feuille « PowerBi » et que je mon classeur est ouvert (Ce que je ne veut pas) je veux passer que par des « UserForm ».

Merci de ton aide , je peux te joindre mon fichier su nécéssaire ?

Julien

Bonjour,

Oui ca n’envoyait pas de mail automatique car il faut appeler la macro à chaque fois que vous changer de personne.
Il faut faire un évènement sur la liste déroulante de votre Userform des noms :

Supposons que votre liste deroulante se nomme ComboBox1

Private Sub ComboBox1_Change()
Call mail_auto
End Sub

Le fichier complet nous aidera mieux.

Cordialement

1 « J'aime »

Merci encore pour ta réponse,

Je te transmets mon fichier !

L’idée est d’envoyer un mail auto lorsque je clique sur Quit de mon userform

Merci beaucoup,

Démo - Copie.xlsm (161,0 Ko)

1 « J'aime »

Re,
A tester
Démo - Copie.xlsm (147,2 Ko)
NB :

  .to = "MAil@MAil"

MAil@MAil est censé être le mail de Vincent
Donc si vous n’avez pas le mail de la personne en valeur, il va y avoir des erreurs

Cordialement

1 « J'aime »

Oui oui le Mail@mail c’est remplacé par la mail de Vincent !

je ne l’ai juste pas mis pour évité de donner des infos persos.

Mais comme je vous l’ai expliqué je « But » …

  • Obligé d’être sur la page ouverte de « excel » pour envoyer
  • Ça envoie autant de mail que de fois que le prénom Vincent et dans la colonne « J »

Encore merci pour votre aide !
Très belle soirée,

PS1 : Je vais tester je n’avais pas vu le fichier :confused: :slight_smile:

PS2: A priori même problématique il faut que mon excel soit ouvert sur la feuille « PowerBi » avant de cliquer sur « Envoie »… je vais essayer de d’inclure le Call mailfor dans la fermeture du thisworkbook

Edit : Bon j’ai mis cette fonction :
Private Sub CommandButton6_Click()
Worksheets(« PowerBi »).Activate
Call mailfor
ThisWorkbook.Application.Visible = False
End Sub

Ca semble fonctionner !

Encore Merci !!

1 « J'aime »

Re Bonjour,

Bon alors tout fonctionne (Ou presque).
Désormais il me reste une chose à régler dont je n’arrive pas !!

J’arrive à envoyer un mail au premier formateur (Colonne J et dernière formation) TOP !!
Mais je n’arrive pas lorsque j’ajoute un formateur sur la colonne K ou L a leur envoyer un mail aussi …

Auriez-vous une astuce pour ajouter :
Si formateur de la derniere ligne enregistrer dans la colonne J ou J et K alors envoyer un mail au nom du formateur enregistré sur la derniere ligne de la derniere formation enregistré !!

Merci par avance,
Julien

1 « J'aime »

Bonjour,

Est-ce que le repère de la colonne J sera toujours « Vincent » (Formateur 1) ?

Cordialement

Bonjour,
Non en fait chaque colonne « J » « K » et « L » s’incrémente en fonction d’une listbox sur userform avec 12 formateurs dont « Vincent ». J’ai réussi à faire pour la Colonne « J » (première colonne obligatoirement renseignée) un envoie de mail au « Formateur » inscrit. Mais si je décline avec un nouveau Module VBA sur la Colonne « K » et « L » ca envoie des mails mais pas sur les bons formateurs (Qui doivent etre meme ligne que la colonne « J »)

Sub mailforK()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String
    Dim Z As Long
    Dim Y As Long

    With Worksheets("PowerBi")    'adaptez le nom de feuille
        derlig = Range("J" & Rows.Count).End(xlUp).Row
        For Z = derlig To 2 Step -1
            strbody = ""
            If Range("J" & Z) = "Vincent" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "MailVincent"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
             If Range("J" & Z) = "Julien_K." Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "Mail Julien"
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
            If Range("J" & Z) = "Alexandre" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "MAilAlex"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
             If Range("J" & Z) = "Cédric" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "Mail cedric"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
             If Range("J" & Z) = "Arnaud" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "Mail Arnaud"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
            If Range("J" & Z) = "Cyril" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "Mail Cyril"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
            If Range("J" & Z) = "Gabriel" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "Mail Gabriel"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
             If Range("J" & Z) = "Guillaume" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "Mail Guillaume"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
            If Range("J" & Z) = "Jérôme" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "Mail jerome"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
            If Range("J" & Z) = "Julien_L." Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "Mail julien L"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
            If Range("J" & Z) = "Pierre-William" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = Mail Pierre"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
            If Range("J" & Z) = "Xavier" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "Mail Xavier"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
             If Range("J" & Z) = "Yohan" Then
                Set OutApp = CreateObject("Outlook.Application")
                Set OutMail = OutApp.CreateItem(0)
                strbody = .Range("AD" & Z)
                'On Error Resume Next
                With OutMail
                    .To = "Mail Yohan"
                    .CC = ""
                    .BCC = ""
                    .Subject = "(EN PHASE DE TEST)Message du Pôle formation 'PACT'"
                    .Body = strbody
                    '.Display 'visu @Mail
                    .Send       ' pour l'envoi du @mail
                End With
                On Error GoTo 0
                Exit Sub
            End If
            Set OutMail = Nothing
            Set OutApp = Nothing
        Next Z
    End With
End Sub

Si les formateurs sont ajouter à partir d’une variable, cela pourrait être facile,
S’ils sont tous dans une même organisation, l’extension de leur mail pourrait être semblable.

Exemple :

Sub test()
dim texte as string
Liste_deroulante = valeur 'dans un Userform

texte  = "@poleformation.fr"
'dont la valeur peut être Vincent, Yohan ou bien Xavier
'supposons que l_extension du mail est "@poleformation.fr" alors le mail peut être écrit du genre : 
.To = valeur & texte

'blablabla

End sub

Will-Fread

Bon, J’ai testé plusieurs possibilités mais je crois que je n’ai pas les bonnes bases !

Colonne J aucun souci si j’ajoute un formateur va encoie le mail … nickel
Si je passe à la colonne K ca n’envoie pas du tout au niveau de la derniere ligne J enregistrée comme pour la colonne J …

Si tu as une idée du module à incorporer car je crois que c’est un peu l’usine à gaz la formule que j’utilise !!

Merci beaucoup,

1 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.