Envoyer un mail avec les données de différentes cellules d'une même ligne

Bonjour,

Novice en la matière, j'appelle à vos lumières pour répondre à ma demande...

Je pense qu'il y a déjà pas mal de questions à ce sujet mais je n'ai pas réussi à trouver...

Bref, j'ai un tableau avec plusieurs lignes pour différentes affaires.

Pour ces affaires j'ai la même suite d'actions à réaliser pour pouvoir avancer dessus.

A un certain stade, je dois effectuer une demande, via mail.

J'aimerais pouvoir envoyer un mail avec l'adresse, la description des travaux etc (qui diffèrent pour chaque ligne).

J'ai tenté de passer par la fonction hypertexte mais malheureusement limitée à 255 caractères...

P.S: J'utilise Outlook pour la messagerie.

Voilà, en espérant avoir été clair et vous lire très vite.

Je suis certain que c'est un coup facile...

voir la réponse d'Eric dans le sujet suivant https://forum.excel-pratique.com/excel/lien-hypertexte-d-une-adresse-mail-vers-outlook-qui-n-est-pas...

Dans la partie Body, adapter le code ci-dessous pour ajouter les valeurs des cellules qui vous intéressent (par exemple après trouver", ajouter & " le devis " & A2 & " la description des travaux " & B2

où A2 et B2 correspondent aux valeurs du devis et des travaux de la ligne 2

.Body = "Madame, Monsieur, " & Chr$(13) & Chr$(13) & "Je vous prie de trouver"

Bonjour et merci pour votre retour.

Cependant je n'ai pas bien saisi...

Je me permet de joindre le code utilisé avec les infos que je voudrais voir apparaitre...

En vous remerciant infiniment

capture d ecran 2023 04 25 150239

Et accessoirement, un fois le mail envoyé, remplir la colonne X avec la date du jour...

Une suggestion pour la lisibilité de vos questions, utilisez les icones de format, pour votre dernier envoi l'icone </> correspondant à du code VBA.

Un complément pour récupérer vos infos manquantes :

Ajouter 3 paramètres à la procédure qui contiendront :

- le destinataire

- le sujet

- le corps du mail

Exemple :

Sub EnvoiMail(ByVal pDestinataire As String, ByVal pSujet As String, ByVal pCorps as string)

que vous récupérer ensuite dans le code EnvoiMail

et pour appeler la procédure EnvoiMail vous codez (par exemple)

EnvoiMail  "toto@gmail.com", "le Sujet", <variable correspondant au corps du sujet>

où la variable sera une concaténation de parties fixes et des valeurs de cellules (exemple Corps = "Bonjour Monsieur " & Q3 & "je vous envoie ...")

Je pense que vous avez suffisamment d'éléments pour adapter le code

Tout cela s'apparente à du chinois pour moi...

Merci quand même!

C'est difficile aussi pour ceux qui essaient d'apporter des réponses, d'estimer le niveau de connaissance d'excel de la personne qui poste un sujet, même si vous avez bien précisé être novice. Disposer de peu d'éléments ne facilite pas la tâche, Par exemple, un fichier excel en pj aurait été bienvenu.

Je comprends aussi qu'étant novice, vous ne sachiez pas ce qui est nécessaire.

Le lien ici peut aider : https://forum.excel-pratique.com/excel/a-lire-avant-de-poster-charte-du-forum-et-informations-utiles...

Je veux bien joindre mon fichier excel mais il est vierge donc je ne sais pas si cela serait bien utile...

En gros, c'est un tableau de suivi d'affaires.

Il y a une affaire par ligne dans mon tableau.

Chaque affaire est une suite d'événements à accomplir que je viens cocher dès que c'est fait.

Il y a des étapes où je dois envoyer des mails pour faire des demandes.

J'aimerais avoir un bouton qui envoie un mail à un destinataire avec des infos de certaines cellules. (en l’occurrence l'adresse, le code postal, la commune et la description des travaux, toutes ces infos sont dans des cellules différentes mais sur la même ligne).

L'idée, est d'avoir un bouton au dessus du tableau, dans la colonne correspondant au moment où je dois effectuer cette demande, qui, du fait d'appuyer dessus, enverrait un mail avec les infos de la ligne sur laquelle je me trouve.

c'est toujours utile.
mettez des valeurs bidons dans les cellules utiles

Voici le fichier vierge...

En pj une proposition de solution avec les remarques suivantes :
j'ai déplacé les colonnes adresses ... pour être en phase avec les colonnes que vous signalez.
Ci-dessous le code que vous retrouverez dans le fichier.
Il y aura des adaptations à faire :
Vous allez devoir Activer un outil Excel (Microsoft Outlook 16.0 Object Library) Voir https://www.tutoderien.com/envoyer-un-mail-outlook-avec-excel-vba/
- pour l'adresse destinataire qui serait peut-être à récupérer dans une cellule
- remplacer le "XXXXXXX" par votre compte,
- le corps du mail Body = ... (Ne touchez pas au & vbCrLf & _ qui permettent simplement de passer à la ligne suivante)
modifiez uniquement ce qui est entre " " comme par exemple "Ci-après une nouvelle affaire ....... entreprise :"

Sur la feuille Travaux

Private Sub BoutonMail_Click()
    ProcedureMail
End Sub

Dans le Module 1

Sub ProcedureMail()
' ici on prépare le mail
Dim Destinataire As String
Dim Sujet As String
Dim Body As String
Dim Ligne As Integer
    Ligne = Selection.Row
    Destinataire = "toto@gmail.com" 'à voir si doit être récupéré ailleurs
    Sujet = "Demande d'affectation d'entreprise"
    Body = "Bonjour Romain," & vbCrLf & _
            "Ci-après une nouvelle affaire ....... entreprise :" & vbCrLf & _
            Range("Q" & Ligne) & vbCrLf & _
            Range("T" & Ligne) & vbCrLf & _
            "Votre signature"
    'Debug.Print Body
    EnvoiMail Destinataire, Sujet, Body
    Range("X" & Ligne) = Now
End Sub
Sub EnvoiMail(ByVal pDestinataire As String, ByVal pSujet As String, ByVal pBody As String)
' envoi du mail avec les paramètres remplis en entrée
Dim OlApp As Outlook.Application
Dim OlMail As Outlook.MailItem
Dim oAccount As Outlook.Account

    Set OlApp = CreateObject("Outlook.Application")
    For Each oAccount In OlApp.Session.Accounts
        If oAccount.DisplayName = "XXXXXXX" Then  ' Le nom de votre compte
           Debug.Print oAccount.DisplayName
           Set OlMail = OlApp.CreateItem(olMailItem)
            With OlMail
                 .SendUsingAccount = oAccount
                 .Subject = pSujet
                 .Body = pBody
                 .To = pDestinataire
                 .Display
            End With
        End If
    Next
    Set OlMail = Nothing: Set OlApp = Nothing

End Sub

N'ayant pas Outlook, je n'ai pas pu tester l'envoi de mail mais le reste (formatage du message et date en colonne X fonctionne correctement.

Wooooh, merci beaucoup. Je vais tester ça demain.

Je ne pensais pas à ce que le code soit si complexe...

Pour le coup j'essaierai d'adapter ce code à des étapes ultérieures dans le suivi de l'affaire.

Je vous tiendrai du bon fonctionnement avec Outlook demain.

En tous cas, merci encore !!!

Bonjour,

je vous envoie un nouveau fichier avec un certain niveau de paramétrage et des contrôles :
- L'expéditeur, Le destinataire et le sujet sont dans la feuille (ce sont des cellules nommées, je pourrai vous expliquer si vous ne connaissez pas)
- Pour le test ici, "Avec Envoi (O/N)" permet de tester sans faire d'envoi, on affiche juste un message avec le contenu du mail.

Le code est dans le module VBA "Module1". ALT + F11 pour afficher le Code. Je vous invite à voir les explications duCours VBA https://www.excel-pratique.com/fr/vba/introduction

Le code actuel affiche le mail sans le sauver ni l'envoyer qui donc devront être fait manuellement.
Pour le faire automatiquement il faut décommenter la ligne ('supprimer l'apostrophe en début de la ligne concernée).
Voici tout le code du module1

Sub ProcedureMail()
' ici on prépare le mail
Dim Expediteur As String
Dim Destinataire As String
Dim Sujet As String
Dim Body As String
Dim Ligne As Integer
    Ligne = Selection.Row
    If Ligne < Range("ENTETE").Row + 1 Then
        MsgBox "Ligne Sélectionnée (" & Ligne & ") Incorrecte !"
        Exit Sub
    End If
    Expediteur = Range("EXPEDITEUR")
    Destinataire = Range("DESTINATAIRE")
    Sujet = Range("SUJET")
    Body = "Bonjour Romain," & vbCrLf & _
            "Ci-après une nouvelle affaire pour laquelle il faudrait affecter une entreprise :" & vbCrLf & _
            Range("O" & Ligne) & " " & Range("P" & Ligne) & " " & Range("Q" & Ligne) & vbCrLf & _
            Range("T" & Ligne) & vbCrLf & vbCrLf & _
            "Votre signature"

    ' pour le test, si "Avec Envoi (O/N) ne vaut pas o ou O, on n'envoie pas le mail
    If LCase(Range("T11")) <> "o" Then
         MsgBox "Expediteur : " & Expediteur & vbCrLf & _
        "Destinataire : " & Destinataire & vbCrLf & _
        "Sujet : " & Sujet & vbCrLf & _
        "Body : " & Body
        Exit Sub
    End If
    EnvoiMail Expediteur, Destinataire, Sujet, Body
    Range("X" & Ligne) = Now
End Sub
Sub EnvoiMail(ByVal pExpediteur As String, ByVal pDestinataire As String, ByVal pSujet As String, ByVal pBody As String)
' envoi du mail avec les paramètres remplis en entrée
Dim OlApp As Outlook.Application
Dim OlMail As Outlook.MailItem
Dim OAccount As Outlook.Account
Dim ListeExpediteur As String
Dim Trouve As Boolean

    ListeExpediteur = ""
    Trouve = False

    Set OlApp = CreateObject("Outlook.Application")
    For Each OAccount In OlApp.Session.Accounts
        'Debug.Print OAccount.SmtpAddress
        ListeExpediteur = ListeExpediteur & OAccount.SmtpAddress & vbCrLf
        'If oAccount.DisplayName = pExpediteur Then  ' Le nom de votre compte
           ''''Debug.Print oAccount.DisplayName
        If OAccount.SmtpAddress = pExpediteur Then
            Trouve = True
            Set OlMail = OlApp.CreateItem(olMailItem)
            With OlMail
                 .SendUsingAccount = OAccount
                 .Subject = pSujet
                 .BodyFormat = olText
                 .Body = pSujet
                 .To = pDestinataire
                 .Display   ' on affiche le mail
                 '.Save     ' on sauvegarde le mail
                 '.Send     ' on envoie le mail
            End With
        End If
    Next

    ' Affichage de la liste des comptes dans OutLook
    If Trouve = False Then
        MsgBox "Aucun compte dans Outlook (Liste ci-dessous) ne correspond à l'expéditeur " & pExpediteur & vbCrLf & ListeExpediteur
    End If

    Set OlMail = Nothing: Set OlApp = Nothing

End Sub

J'essaie de voir de mon côté comment faire le test avec Outllook (que je n'ai pas)

Bonjour,

Pourriez-vous veiller à mettre votre version Excel dans le profil de votre compte (2016, 2019, 365 ?.... Mac 2011, Mac 2016 ??). C'est plus facile pour celui qui répond à vos demandes

Pour rappel, les fichiers postés ne doivent pas contenir de données sensibles (adresse mail, noms de personnes, société..)
Merci de votre participation.

Je laisse Clr s'occuper de votre souci mais à titre d'info, un petit lien intéressant (réalisé par BrunoM45) --> https://www.excel-pratique.com/fr/telechargements/utilitaires/pdf-email-vba-excel-no508

Cordialement

Pour NiniBobo,

J'ai testé mes modifications : çà fonctionne.

Juste une correction à faire

.Body = pSujet

à remplacer par

.Body = pBody

Pour Dan,

effectivement, Des sujets proposent des solutions complètes, mais qui demandent peut-être un minimum de connaissance pour être adaptées, ce qui ne semble pas être le cas de NiniBobo.

Pour clr,

effectivement, Des sujets proposent des solutions complètes, mais qui demandent peut-être un minimum de connaissance pour être adaptées, ce qui ne semble pas être le cas de NiniBobo.

Effectivement, c'est aussi une raison d'être du forum et surtout quand le demandeur se perd ou ne trouve pas de solution malgré son fichier ou ses recherches

Bonjour,

Merci pour vos retours à tous les deux.

J'ai réussi à adapter le code de clr avec ce que j'vais déjà concernant la messagerie, ça a l'air de fonctionner.

J'ai avancé sur mon document du coup alors c'est top! Merci!

Maintenant, je cherche a créer des dossier portant le nom de plusieurs cellules de la même ligne.

Je pensais piocher les mêmes lignes de code mais le Range("Q" & Ligne) n'a pas l'air de fonctionner dans le nom de dossier à créer...

Je vais creuser ça!

Bonjour NiniBobo,

pour votre nouveau problème, essayez de faire es recherches sur le forum ou les cours VBA ...
si non trouvé, créez un nouveau sujet.

N'oubliez pas de passez celui-ci à résolu.

Rechercher des sujets similaires à "envoyer mail donnees differentes meme ligne"