Envoi de mail automatique de Excel vers Outlook (suite)

Bonjour,

Je fais suite à mon sujet résolu (et fichier test) par SabV : https://forum.excel-pratique.com/post549916.html#p549916

Voici les codes :

> Feuil1

Private Sub Worksheet_Change(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("G:G"))
If Not isect Is Nothing Then
   If Target = "X" Then Call MacroMail1(Target.Row)
End If
End Sub

> This Workbook

Private Sub Workbook_BeforeClose(Cancel As Boolean)
MacroMail2
End Sub

> Module 1

Public nbr As Integer

    Sub MacroMail1(rw As Long)
    Dim sh
    Dim sTO As String, sObjet As String, sMessage As String
    Set sh = Sheets("ADAPTATION")
    nbr = nbr + 1

    For i = 1 To 11
    m = m & sh.Cells(rw, i) & Chr(10)
    Next

    sTO = "adresse@domaine.com"  'detinataire TO à adapter
    sObjet = "Message d'alerte "
    sMessage = "MESSAGE D'ALERTE POUR LE: " & m              'numero de commande

    Envoyer_Mail_Outlook sTO, sObjet, sMessage
    End Sub

Function Envoyer_Mail_Outlook(destTO As String, objet As String, message As String)
'Nécessite d'activer la référence "Microsoft Outlook Library"
Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim Nom_Fichier As String

    Set ObjOutlook = New Outlook.Application
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)

   Nom_Fichier = fich
    If objet = "" Then Exit Function
     With oBjMail
       .To = destTO
       .Subject = objet
       .Body = message
'       .Display  '   vérification avant d'envoyer
       .Send      'envoi du message
    End With

    Set oBjMail = Nothing
    Set ObjOutlook = Nothing
End Function

Sub MacroMail2()
Dim sh
Dim sTO As String, sObjet As String, sMessage As String

sTO = "adresse@domaine.com"  'detinataire TO à adapter
sObjet = "Message d'alerte "
sMessage = Date & " nombre d'alerte envoyé: " & nbr

Envoyer_Mail_Outlook sTO, sObjet, sMessage
nbr = 0
End Sub

Le code en lui-même fonctionne très bien lorsqu'on met un "X" dans une des cellules de la colonne G, une alerte est bien envoyée par mail.

Toutefois, j'ai créé une formule qui selon certaines conditions indique "X" dans les cellules de la colonne G. Lorsque c'est la formule qui place un "X" l'envoi du mail ne se fait pas. Que faudrait-il modifier dans le code pour que l'envoi se fasse ?

Bien cordialement,

Baptiste.

Bonjour Baptiste,

C’est difficile de choisir le bon événement qui exécutera la macro « MacroMail1 » sans connaitre toute le processus.

Il faudrait voir la formule, et aussi comment sont modifier les données qui font que la formule se recalcule

Bonjour SabV,

J'ai repris notre fichier test et j'ai ajouté la formule qui déclenche l'alerte dans la colonne "I". Lorsque la formule est vraie, elle met "X" dans la cellule, ce qui doit déclencher l'envoi du mail, dans le cas contraire la cellule est vide et aucun mail n'est envoyé.

Bien cordialement,

Baptiste.

Bonjour,

de quel façon sont renseignées les colonnes F et J ?

Bonsoir SabV,

Les colonnes F et J :

F est remplie grâce à un calendrier en userform pour choisir la date (VBA) mais si c'est plus simple on peut le faire en manuel également.

J est remplie manuellement.

Bonjour Baptiste,

étant donnée que la formule utilise la fonction "AUJOURDHUI()" il est impossible de savoir à l'avance sur quel ligne un changement se produira. donc il faudrait passer en revue toutes cellules de la colonne des x.

cette macro pourrait être mit dans la macro Workbook_Open() ou activer par un bouton.

Sub Vérif_si_x()
Dim LastRw As Long, i As Long
LastRw = Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To LastRw
  If Sheets("Feuil1").Cells(i, 9) = "x" Then
  MacroMail1 i
  Sheets("Feuil1").Cells(i, 10) = "OK le " & Format(Date, "yyyy-mm-dd")
Next
End Sub

Merci SabV,

Alors j'ai testé avec workbook_open, en appelant le code que tu m'as fourni (mis dans un module), et j'ai un message d'erreur au lancement du fichier : "If sans For".

Voici le code :

 Sub Vérif_si_x()
    Dim LastRw As Long, i As Long
    LastRw = Sheets("ADAPTATION").Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To LastRw
      If Sheets("ADAPTATION").Cells(i, 25) = "x" Then
      MacroMail1 i
      Sheets("ADAPTATION").Cells(i, 26) = "OK le " & Format(Date, "yyyy-mm-dd")
    Next
    End Sub

J'ai rajouté un END IF avant le NEXT et je n'ai plus d'erreur.

J'ai modifié Cells(i, 25) : 25 numéro de colonne qui contient les X de mon fichier de travail.

Par contre, lorsque je déclenche une alerte je n'ai pas de mail qui s'envoie. A l'apparition de l'alerte et lors d'une fermeture/réouverture du fichier. La seule alerte qui s'envoie est le récap journalier.

J'ai également testé avec un bouton ActiveX à la place de workbook_open et rien ne se passe.

Merci de ton aide.

Baptiste.

essai avec le X en majuscule

If Sheets("Feuil1").Cells(i, 25) = "X" Then

Pas de changement de mon côté.

Si on prend le problème autrement : il est peut-être possible de déclencher l'envoi du mail en traduisant la formule qui affiche le "X" en VBA ?

Qu'en penses-tu ?

malheureusement cela n'engendre pas un événement,

comme je l'ai déjà dit: étant donnée que la formule utilise la fonction "AUJOURDHUI()" il est impossible de savoir à l'avance sur quel ligne un changement se produira. donc il faudrait passer en revue toutes cellules de la colonne des x.

cette macro pourrait être mit dans la macro Workbook_Open() ou activer par un bouton.

dans cette exemple, la macro est activer par un bouton.

Bonjour SabV,

Cette fois-ci tout fonctionne parfaitement

Une dernière chose avant de conclure ce sujet : lorsque le mail est envoyé il m'affiche les heures sous leur format de nombre décimal. Est-il possible d'afficher les heures telles qu'elles apparaissent dans Excel ?

Merci d'avance.

Baptiste.

les heures sont sur quel colonne ?

il y a eu plusieurs version du fichier, sur la version que j'ai présentement il n'y a pas d'heure

horusbk a écrit :

Une dernière chose avant de conclure ce sujet : lorsque le mail est envoyé il m'affiche les heures sous leur format de nombre décimal. Est-il possible d'afficher les heures telles qu'elles apparaissent dans Excel ?

Format(MaCellule, "h:m:s")

https://msdn.microsoft.com/fr-fr/library/office/gg251755.aspx

Bonjour SabV

Dans le fichier test, les heures sont dans les colonnes C et E.

Bonjour SabV,

Une question dans les mails qui sont envoyés de part l'alerte :

    Sub MacroMail1(rw As Long)
    Dim sh
    Dim sTO As String, sObjet As String, sMessage As String
    Set sh = Sheets("ADAPTATION")
    nbr = nbr + 1

    For i = 1 To 11
    m = m & sh.Cells(rw, i) & Chr(10)
    Next

    sTO = "exemple@gmail.com"  'destinataire TO à adapter
    sObjet = "Message d'alerte "
    sMessage = "MESSAGE D'ALERTE POUR LE: " & m  'numero de commande

    Envoyer_Mail_Outlook sTO, sObjet, sMessage
    End Sub

et plus particulièrement pour ce bout de code qui écrit dans le mail :

MESSAGE D'ALERTE POUR LE : (numéro de commande)

    sMessage = "MESSAGE D'ALERTE POUR LE: " & m  'numero de commande

Actuellement ce sont les cellules de la colonne A qui s'inscrivent en tant que numéro de commande. Comment faire pour que ça soit la celles de la colonne C ?

Merci d'avance.

Rechercher des sujets similaires à "envoi mail automatique outlook suite"