Macro envoimail associer à fonction SI

sylvain974

XLDnaute Nouveau
Bonjour,

Suite à plusieurs recherches infructueuses je me permet de vous demandez comment associer ma macro d'envoi de mail à ma fonction Si.
le contexte est le suivant: Lorsque une date arrive à échéance un envoi de mail est envoyé par ma fonction SI.

Function Mail_Workbook_1()
Dim OutApp As Object
Dim OutMail As Object

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

On Error Resume Next

With OutMail
.To = "<mon adresse"
.CC = ""
.BCC = ""
.Subject = "Fin de validité"
.Body = "Bonjour La date de validité du controle technique arrive à terme, n'oubliez pas de l'actualiser"
.Send
End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing
End Function

Je voudrais l'associer à :

=SI(G4>=AUJOURDHUI()-7;"attention:arrive à échéance";"ok") et donc remplacer attention:arrive à échéance à un envoi de mail

Merci pour vos futurs réponses
 

Staple1600

XLDnaute Barbatruc
Re : Macro envoimail associer à fonction SI

Re

sylvain974
Faut pas être susceptible...
Tu n'as pas vu les emoticones qui parsèment mes messages... alors cool, raoul ;), tranquille, émile ;)
J'essaie juste de t’expliquer qu'un syntaxe de ce type : Function nommacro() (dans une macro) n'est pas correcte.
Pour t'en convaincre, essaie lancer la macro mB
Puis lances la macro mA
NB: Ce ne sont que des macros d'illustrations et pas des solutions/améliorations à ta question.
Code:
Sub mA()
envoiemail
End Sub
Sub mB()
Function envoiemail()
End Sub
Private Function envoiemail()
MsgBox "Bonjour " & Application.UserName & ", il est " & Time, vbInformation, "Tic,tac,tic,tac"
End Function
 

sylvain974

XLDnaute Nouveau
Re : Macro envoimail associer à fonction SI

C'est juste que je suis fatiguer de chercher les anomalies et une fois une comprise je tombe sur une notre, c'est un cercle vicieux ! :p

Je viens de test ton code ça ne marche pas que ce soit mB ou mA , ça dit erreur de compilation: nom ambigu détecté envoiemail

GRrrrrrrr
 

Staple1600

XLDnaute Barbatruc
Re : Macro envoimail associer à fonction SI

Bonsoir à tous

sylvain974
Un peu de lecture avant de se coucher ;)
tutoriel Fonctions et procédures​
Ci-dessous, une autre macro (juste à titre d'illustration) pour voir les différents moyens de lancer une macro dans VBA.
NB: Pour tester:
1) dans un classeur vierge, insères un module standard (donc Module1)
2) copies-y le code dans un module standard (donc Module1)
3) enregistre ce classeur sous le nom sylvain974bis.xlsm
4) enfin lance la macro nommée: SyntaxesAppelsMacro

VB:
Sub SyntaxesAppelsMacro()
'//////| syntaxes OK |\\\\\
Application.Run "'sylvain974bis.xlsm'!Module1.envoiemail"
Application.Run "'sylvain974bis.xlsm'!envoiemail"
Application.Run "envoiemail"
Call envoiemail
envoiemail
'//////| syntaxes PAS OK |\\\\\
'Pour génerer l'erreur:
'Supprimes le guillemet devant cette ligne: 'Function envoiemail()
'puis relances la macro nommée : SyntaxesAppelsMacro

'Function envoiemail()
End Sub
Private Function envoiemail()
MsgBox _
        "Il est " & Time, 64, _
        "Bonjour," & Application.UserName
End Function
NB: Ce matin ,je testerai au boulot avec Outlook, le vrai envoi d'un mail avec la function Semd_Mail
et je te redis ce qu'il en sera en fin d’après-midi.
(car à domicile, je n'utilise pas Outlook comme client de messagerie)
 

Staple1600

XLDnaute Barbatruc
Re : Macro envoimail associer à fonction SI

Bonsoir à tous

sylvain974
NB: Ce matin ,je testerai au boulot avec Outlook, le vrai envoi d'un mail avec la function Semd_Mail
et je te redis ce qu'il en sera en fin d’après-midi.
(car à domicile, je n'utilise pas Outlook comme client de messagerie)
Donc comme promis, j'ai testé la function Send_MAIL et cela fonctionne comme le montre la copie d'écran ci-dessous.
Regarde la pièce jointe 937959
Ci-dessous le code tel que je l'ai testé au boulot.
NB: Il faut juste avant de tester remplacer "monadresse" par une adresse mail valide.
(PS: j'ai testé en ayant une session Oulook ouverte sur mon poste avant de lancer la macro depuis Excel)
VB:
Sub TestduIF()
Dim datesTest, i As Byte
datesTest = Array(1, 3, 7, 9, 11)
For i = LBound(datesTest) To UBound(datesTest)
Range("G4") = _
DateAdd("d", CDbl(datesTest(i)), Date - 15)
AlerteECHEANCE
Next
End Sub
Public Sub AlerteECHEANCE()
If Range("G4") > Date - 7 Then
MsgBox "Arrive à échéance.", 16, "Attention!"
Send_Mail
Else
MsgBox "ok"
End If
End Sub
Public Function Send_Mail()
Dim Message As String
Message = "Bonjour," & vbCr
Message = Message & "La date de validité de contôle technique arrive à terme." & vbCr
Message = Message & "N'oubliez pas de l'actualiser."
On Error Resume Next
With CreateObject("Outlook.Application").CreateItem(0)
.To = "mon adresse"
.Subject = "Fin de validité": .Body = Message: .Display: .Send
End With
MsgBox Message
On Error GoTo 0
End Function
 

Pièces jointes

  • image01.jpg
    image01.jpg
    62.6 KB · Affichages: 51
Dernière édition:

sylvain974

XLDnaute Nouveau
Re : Macro envoimail associer à fonction SI

Bonjour,

Oui j'ai bien tester et une simple erreur d'orthographe suffit pour mettre tous en vrac :/

Ensuite j'ai repris ton Send-mail ça marche aussi mais le mien aussi marchait :p ma question était plus en amont ...

Donc la je reprend ton dernier code j'enlève la macro Test du If ? et dans feuille 1 je met Private Sub Worksheet_Change(ByVal Target As Range) ??

Encore merci pour ton partage de connaissance :eek:
 

sylvain974

XLDnaute Nouveau
Re : Macro envoimail associer à fonction SI

Bonsoir,

Voila j'ai tout fait dans les normes je t'envoi la pièce jointe (en jaune les dates arrivée à échéance) .
Peux-tu me faire ton retour?
Pour ma part il envoi un mail alors qu'il devrait me mettre ok. est-ce ton cas aussi ?
 

Staple1600

XLDnaute Barbatruc
Re : Macro envoimail associer à fonction SI

Bonsoir à tous

sylvain974
Voici le code présent dans Feuil1 tel qu'il est dans ton dernier fichier joint
Code:
​Private Sub Worksheet_Change(ByVal Target As Range)
If Range("G4") > Date - 7 Then
MsgBox "attention:arrive à échéance", vbCritical
Function Send_Mail()
Else
MsgBox "ok"
End If
End Sub
Donc je t'invite à relire les messages #14 et #16 pour voir ce qui cloche...:rolleyes:

NB: Il serait sans doute utile que tu sois plus attentif à ce que j'écris dans mes messages, sinon à chaque nouveau post de ta part, je risque de te renvoyer dans mes précédents messages parce que tu auras zappé certaines de mes précédentes explications. ;)
 
Dernière édition:

sylvain974

XLDnaute Nouveau
Re : Macro envoimail associer à fonction SI

Bonjour,

J'ai suivi lors te ton message #21
Bonjour à tous

sylvain974
Ta dernière question a déjà sa réponse dans le message #2, sans oublier les précisions du message #4, non ...

Donc je t'invite à regarder ton message #2 ou il est écrit :
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("G4") > Date - 7 Then
MsgBox "attention:arrive à échéance", vbCritical
Function Send_Mail
Else
MsgBox "ok"
End If
End Sub

Si je relis tous t'es messages il manque dans ton code End Function non ?
Ensuite j'ai essayé avec Private et Public mais aucun changement de toute façon je peut essayé n'importe quoi je retourne toujours sur ma question #22 ...

PS: J'ai beau être attentif si je te pose la question c'est que je ne m'en sort pas :/ , mais merci de me faire réfléchir ...
 

Staple1600

XLDnaute Barbatruc
Re : Macro envoimail associer à fonction SI

Bonjour à tous

sylvain974

Re
sylvain974
J'essaie juste de t’expliquer qu'un syntaxe de ce type : Function nommacro() (dans une macro) n'est pas correcte.
Pour t'en convaincre, essaie lancer la macro mB
Puis lances la macro mA
NB: Ce ne sont que des macros d'illustrations et pas des solutions/améliorations à ta question.
Cela semble explicite, non ?
Or dans le code, de ta dernière PJ, ta syntaxe ne tient pas compte de ce que je t’expliquais (exemples à l'appui)

Nouvelle exemple avec en 1) la bonne syntaxe et en 2) une syntaxe qui génére une erreur .
C'est le pourquoi de mon précédent message)
(celle précédemment évoquée ... :rolleyes: dans mes précédents messages)

1) La syntaxe correcte
Code:
Sub testSyntaxeLeRetour()
toto
End Sub
Code:
Function toto()
MsgBox Now
End Function

2) La syntaxe erronée (que tu utilises malgré tout:confused: )
Code:
Sub testSyntaxeLeRetour()
Function toto() 'ici VBA n'aime pas et le signale
End Sub
Code:
Function toto()
MsgBox Now
End Function

[digression mais pas que]
Si j'étais moi, je te conseillerai de relire posément tous mes messages depuis le but du fil en présence d'une tasse de café, avec à droite de ta soucoupe, deux, trois carrés d'un chocolat de grande qualité.
La nicotine qu'elle soit fumée, vapotée ou gommée peut être un plus.
On veillera également à avoir en fond sonore, un peu de musique.
Tout ceci évidemment doit permettre une concentration et un esprit des plus affuté pour naviguer dans le monde de VBA ;)

Pour ce qui me concerne, mon environnement actuel est le suivant:
vapoteuse au bec, tasse fumante de rooibos, une pleine coupelle de palets au chocolat et entre les oreilles FIP.
[/digression mais pas que]
 
Dernière édition:

sylvain974

XLDnaute Nouveau
Re : Macro envoimail associer à fonction SI

Re,

Ah !!!!! :eek: j'ai enfin compris Send_mail= Function Send_mail dans le module il va le chercher en-faite !

Donc voila le rectifié après temps de tentatives :
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("H4") > Date - 7 Then
MsgBox "attention:arrive à échéance", vbCritical
Send_Mail
Else
MsgBox "ok"
End If
End Sub

Mais tu sais que j'arrive toujours pas à le faire tourné. :mad:

J'aimerai bien mais que je soit au boulot ou à la maison je suis pas sur que cela changera la qualité de mes codes VBA (j'ai tout essayé)

PS :Ton environnement permettant une bonne productivité je me permet de te dire : PETIT CHANCEUX !!
 

Pièces jointes

  • TABLEAU LOCATIERS ..xlsm
    24.3 KB · Affichages: 29
  • TABLEAU LOCATIERS ..xlsm
    24.3 KB · Affichages: 31
  • TABLEAU LOCATIERS ..xlsm
    24.3 KB · Affichages: 33

Staple1600

XLDnaute Barbatruc
Re : Macro envoimail associer à fonction SI

Bonsoir à tous

sylvain974
Pour ce soir, je ne peux guère t'aider
(cf le NB: dans le message #18)
Ou juste ceci simplement pour tester le If/Else/End If
(J'ai ajouté un test pour que la macro ne s'exécute qui si la cellule active est H4, donc ma macro ne lance au moindre changement sur la feuille)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$H$4" Then
If Range("H4") > Date - 7 Then
MsgBox "attention:arrive à échéance", vbCritical
'Send_Mail
Else
MsgBox "ok"
End If
End If

Pour ce qui est de l'envoi du mail, espérions que d'autres membres du forum utilisant Outlook viennent faire un tout dans ton fil pour te filer un coup de main ;)
 

sylvain974

XLDnaute Nouveau
Re : Macro envoimail associer à fonction SI

Bonjour,

As-tu essayé ? il y a peut être un soucis pourtant dans le code :
If Range("H4") > Date - 7 Then

C'est bien la date d'aujourd'hui -7 jours ? car à chaque activation la macro devrait me dire OK , or il m'envoi le mail et me dit arriver à échéance ...

Sinon le verrouillage sur la cellule marche merci :)