Envoi email suivant ligne selectionné
Bonjour a tous,
Je me permets de vous contactez pour une aide concernant l'envoi d'email.
J'ai un fichier Excel regroupant des devis ( exemple ci-dessous)
| A1 | B1 | C1 | D1 | E1 | F1 |
| N°1 | Désignation | Nom document | Fournisseur | Emplacement du fichier | A envoyer par Email |
| N°2 | tata1 | test1 | F1 | c:/ document/ | lien Email |
| N°3 | tata2 | test1 | F2 | c:/ document/ | lien Email |
et je voudrais que dès l'appuie de la cellule "F1-N°1", un email se lance avec les données correspondants (B1,C1,D1 en corps de mail ) et que celle-ci soit automatique à chaque ligne sélectionner.
Quelqu'un peut-il m'aider?
Je vous remercie
Bonjour,
La première chose à connaître c'est la messagerie que vous utilisez
Cordialement
Bonjour
Le mieux est de sélectionner la cellule Fx, puis d'utiliser un bouton pour envoyer le mail car si vous cliquez par erreur dans la colonne F cela peut envoyer le mail alors que vous ne le vouliez pas....
Sur cette base et ne sachant pas vérifier (Je n'ai pas outlook) essayez ce code à placer dans un module dans l'éditeur VBA
Sub EnvoiMail()
Dim oMsgApp As Outlook.Application
Dim oMsg As Outlook.MailItem
Set oMsgApp = New Outlook.Application
Set oMsg = oMsgApp.CreateItem(olMailItem)
With oMsg
.To = Range("F" & ActiveCell.Row) 'votre adresse mail
.Subject = "Devis"
.Body = "Veuillez trouver ci-joint le devis." & Chr(10) & Chr(13) & _
Range("B" & ActiveCell.Row) & Chr(10) & Chr(13) & _
Range("C" & ActiveCell.Row) & Chr(10) & Chr(13) & _
Range("D" & ActiveCell.Row) & Chr(10) & Chr(13) & _
"Bonne journée"
.Send
End With
Set oMsgApp = Nothing
Set oMsg = Nothing
MsgBox "Mail envoyé"
End SubEnsuite créez un bouton et affecter le à cette macro (click droite sur le bouton et choisir "Affecter une macro" dans les options
Pour envoyer le devis, positionnez-vous sur la cellule de la colonne F, puis cliquez sur le bouton
Si ok et terminé pensez à cloturer le fil
Crdlt
Merci Dan pour ton retour.
j'ai reussi à trouvé une solution mais c'est au double clic.
L'action est au double clic de la cellule se trouvant à droite du tableau.
voici le code
Private Sub worksheet_beforedoubleclick(ByVal Target As Range, cancel As Boolean)
' déclaration des variables
Dim Text, Dossier, Fichier, PieceJoint As String
Dim NomDestinataire, NomSociété, DemandeType, NumDevis As String
' déclaration des données
NomDestinataire = ""
NomSociété = ActiveCell.Offset(0, -7).Value
DemandeType = ActiveCell.Offset(0, -5).Value
NumDevis = ActiveCell.Offset(0, -2).Value
Dossier = ThisWorkbook.Path & "\" & ActiveCell.Offset(0, -1).Value 'répertoire de l'éventuelle PJ
Fichier = NumDevis & ".pdf" 'nom de l'éventuelle PJ
PieceJoint = Dossier & Fichier
' code
If Not Intersect(Target, Range("L:L")) Is Nothing Then 'si la target se trouve en colonne D
If Target.Offset(0, -1).Value <> "" Then 'si la cellule à gauche de la target est pas null
Sujet = "[Envoi Devis] société: " & NomSociété & " Devis: " & NumDevis 'sujet reprenant la colonne "société" et la colonne " devis"
Text = "Bonjour," & "<br><br>" & _
"Vous trouverez en PJ le devis : " & "<B>" & NumDevis & "</B>" & "<br><br>" & _
"de la société : " & "<B>" & NomSociété & "</B><br><br>" & _
"concernant la: " & " <B> " & DemandeType & "</B><br><br>" & _
"Cordialement" & "<br><br><br><br>" & _
"<i><FONT size=2>" & " NB: Email envoyé en Automatique" & "</FONT><i>"
Call EnvoyerEmail(NomDestinataire, Sujet, Text, PieceJoint) 'exécuter macro EnvoyerMail
End If
End Ifavec la fonction :
Sub EnvoyerEmail(ByVal Destinataire As String, ByVal Sujet As String, ByVal ContenuEmail As String, Optional ByVal PieceJointe As String)
On Error GoTo EnvoyerEmailErreur
'définition des variables
Dim oOutlook As Outlook.Application
Dim oMailItem As Outlook.MailItem
'vérification si le Contenu du mail n'est pas vide. Si oui, email n'est pas envoyé. Si vous voulez pouvoir envoyer les email vides, mettez en commentaire les 4 lignes de code qui suivent.
If Len(ContenuEmail) = 0 Then
MsgBox "Mail non envoyé car vide", vbOKOnly, "Message"
Exit Sub
End If
'préparer Outlook
PreparerOutlook oOutlook
Set oMailItem = oOutlook.CreateItem(0)
'création de l'email
With oMailItem
.To = Destinataire
.Subject = Sujet
'CHOIX DU FORMAT
'----------------------
'email formaté comme HTML (aussi par défaut)
.BodyFormat = olFormatHTML
.HTMLBody = "<html><p>" & ContenuEmail & "</p></html>"
'OU
'email formaté comme simple texte sans formats
'.BodyFormat = olText
'.Body = ContenuEmail
'OU
'email formaté comme texte riche (= avec formats)
'.BodyFormat = olFormatRichText
'.Body = ContenuEmail
'----------------------
If PieceJointe <> "" Then .Attachments.Add PieceJointe
.Display '<- affiche l'email (si vous ne voulez pas l'afficher, mettez cette ligne en commentaire)
'.Save '<- sauvegarde l'email avant l'envoi (pour ne pas le sauvegarder, mettez cette ligne en commentaire)
'.Send '<- envoie l'email (si vous voulez seulement préparer l'email et l'envoyer manuellement, mettez cette ligne en commentaire)
End With
'nettoyage...
If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing
Exit Sub
EnvoyerEmailErreur:
If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing
MsgBox "Le mail n'a pas pu être envoyé...", vbCritical, "Erreur"
End Sub
Private Sub PreparerOutlook(ByRef oOutlook As Object)
'------------------------------------------------------------------------------------------------
'Ce code vérifie si Outlook est prêt à envoyer des emails... Et s'il ne l'est pas, il le prépare.
'------------------------------------------------------------------------------------------------
On Error Resume Next
'vérification si Outlook est ouvert
Set oOutlook = GetObject(, "Outlook.Application")
If (Err.Number > 0) Then 'si Outlook n'est pas ouvert, une instance est ouverte
Err.Clear
Set oOutlook = CreateObject("Outlook.Application")
If (Err.Number > 0) Then
MsgBox "Une erreur est survenue lors de l'ouverture de Outlook..."
Exit Sub
Else
End If
Else 'si Outlook est ouvert, l'instance existante est utilisée
End If
End SubBonjour,
C'est une manière différente (il suffisait d'appeler le Sub de Dan dans l'évènement beforedoubleclick) mais si cela vous a permis d'apprendre c'est aussi important. N'oubliez pas de clôturer votre post.
Re
Merci Dan pour ton retour.
j'ai reussi à trouvé une solution mais c'est au double clic.
Plus compliqué là ...
Comme sabok12617 me suit sur ce que j'ai posté, voyez sa réponse
Pensez à cloturer ...
Crdlt.