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 ?
Cependant, ça ne fonctionne pas de cette manière, ça n’envoie pas de mail
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 ?
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
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
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
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é !!
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
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 !!