Alertes mail sous Excel / VBA "Je suis une quiche"
01001101
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
Mike-31 Messages postés 18406 Date d'inscription Statut Contributeur Dernière intervention -
Mike-31 Messages postés 18406 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je me torture le cerveau depuis ce matin à lire dans tout le web comment ajouter un code VBA pour faire ce qui suit :
Je dispose d'un classeur Excel 2007.
La première feuille; "Base A"; possède un tableau avec des données et un résultat (conforme ou arrive à échéance).
La seconde feuille; "mails"; possède les mails pour destinataire.
J'ai besoin d'un code qui soit en mesure de contrôler le résultat des cellules sus-mentionnées.
Dans le cas ou le résultat ce nomme : arrive à échéance, envoyer un mail automatiquement aux destinataires.
Avec un Objet : exemple : Attention un produit arrive à échéance, merci de contrôler le fichier Excel
En corps de message : "ajouter le lien de fichier dans le corps du message".
j'ajoute en PJ le fichier test pour que cela soit plus claire.
lien : https://www.fichier-xls.fr/2015/03/30/classeur-test-alertes/
Je me torture le cerveau depuis ce matin à lire dans tout le web comment ajouter un code VBA pour faire ce qui suit :
Je dispose d'un classeur Excel 2007.
La première feuille; "Base A"; possède un tableau avec des données et un résultat (conforme ou arrive à échéance).
La seconde feuille; "mails"; possède les mails pour destinataire.
J'ai besoin d'un code qui soit en mesure de contrôler le résultat des cellules sus-mentionnées.
Dans le cas ou le résultat ce nomme : arrive à échéance, envoyer un mail automatiquement aux destinataires.
Avec un Objet : exemple : Attention un produit arrive à échéance, merci de contrôler le fichier Excel
En corps de message : "ajouter le lien de fichier dans le corps du message".
j'ajoute en PJ le fichier test pour que cela soit plus claire.
lien : https://www.fichier-xls.fr/2015/03/30/classeur-test-alertes/
A voir également:
- Alertes mail sous Excel / VBA "Je suis une quiche"
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Windows live mail - Télécharger - Mail
3 réponses
Bonjour,
Que connaissez-vous reelement en VBA excel ??
L'envoi doit-il se faire a l'ouverture du classeur et si le classeur reste ouvert (mise a jour des infos qui permettent de declancher l'alerte) ou seulement classeur ouvert ??
Envoi via Outlook ou ......????
A+
Que connaissez-vous reelement en VBA excel ??
L'envoi doit-il se faire a l'ouverture du classeur et si le classeur reste ouvert (mise a jour des infos qui permettent de declancher l'alerte) ou seulement classeur ouvert ??
Envoi via Outlook ou ......????
A+
Bonjour,
Teste ce code en CDO plus rapide et qui utilise simplement ton SMTP, pour tester, feuille "baseA" cellule P2 saisi l'adresse mail expéditeur, en P3 ton SMTP exemple si ton fournisseur d'accès est orange saisir SMTP.orange.fr ou SMTP.free.fr si free etc ...
colle ce code dans un module
Option Explicit
'--------------- Avec l'Option Explicit est en entête de module déclaration de toutes les variables
Dim messageHTML, objMessage As Variant
Dim ol As Object, myItem As Object
Dim x As Integer
Sub Envoi_Mail()
For x = 2 To 100 ' Concerne les lignes de 2 à 100
If Cells(x, 10).Value = "arrive à échéance" And Cells(x, 11).Value = "" Then
Call Mail
End If
Next x
End Sub
Sub Mail()
On Error GoTo errorHandler
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Attention un produit arrive à échéance"
objMessage.From = [P2] '"xxx.xxxxxx@free.fr" 'Adresse mail de l'expéditeur ou cellule le contenant (facultatif)
objMessage.To = Sheets("mails").[A2] & ";" & Sheets("mails").[A3] & ";" & Sheets("mails").[A4] & ";" & Sheets("mails").[A5] & ";" & Sheets("mails").[A6] & ";" & Sheets("mails").[A6]
'ou
'objMessage.CC = "xxxx.xxxxxxxx@free.fr" 'Adresse mail du destinataire ou cellule le contenant
'ou
'objMessage.BCC = "xxxx.xxxxxxxx@free.fr" 'Cci ou Bci devient BCC en Englais (mode adresse destinataire masquée), adresse mail de l'expéditeur ou cellule le contenant
'--------------- Corps du message fait référence à des cellules ou saisir dans le code
objMessage.TextBody = "Bonjour," & vbCrLf & vbCrLf & "Attention un produit arrive à échéance, merci de contrôler le fichier Excel " & vbCrLf & vbCrLf & "fichier classeur-test-alertes-2.xlsm"
'objMessage.TextBody = "Bonjour," & vbCrLf & vbCrLf & "Comment pourais-je oublier ce jour " & vbCrLf & vbCrLf & "Bon anniversaire " & Cells(x, 2) & vbCrLf & vbCrLf & "Les Lagouanère"
messageHTML = "Ceci est un message en HTML"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = [P3] 'ou saisir "smtp.free.fr" 'SMTP du fournisseur d'accés (smtp.orange.fr ou smtp.sfr.fr etc ...)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
objMessage.Send
'--------------- Confirmation de l'envoi (facultatif)
MsgBox "Un mail a été bien envoyé à "
Cells(x, 11) = "Envoyé"
'--------------- si erreur on sort de la procédure
Exit Sub
errorHandler:
'--------------- description de l'erreur survenue
MsgBox Err.Description
End Sub
et associe la macro "Envoi_Mail" à un bouton
clic sur ce bouton créé
j'ai ajouté un détecteur d'envoi en colonne K pour que le fichier ne soit envoyé qu'une fois, pour retester, effacer "Envoyé" de la colonne K
Teste ce code en CDO plus rapide et qui utilise simplement ton SMTP, pour tester, feuille "baseA" cellule P2 saisi l'adresse mail expéditeur, en P3 ton SMTP exemple si ton fournisseur d'accès est orange saisir SMTP.orange.fr ou SMTP.free.fr si free etc ...
colle ce code dans un module
Option Explicit
'--------------- Avec l'Option Explicit est en entête de module déclaration de toutes les variables
Dim messageHTML, objMessage As Variant
Dim ol As Object, myItem As Object
Dim x As Integer
Sub Envoi_Mail()
For x = 2 To 100 ' Concerne les lignes de 2 à 100
If Cells(x, 10).Value = "arrive à échéance" And Cells(x, 11).Value = "" Then
Call Mail
End If
Next x
End Sub
Sub Mail()
On Error GoTo errorHandler
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Attention un produit arrive à échéance"
objMessage.From = [P2] '"xxx.xxxxxx@free.fr" 'Adresse mail de l'expéditeur ou cellule le contenant (facultatif)
objMessage.To = Sheets("mails").[A2] & ";" & Sheets("mails").[A3] & ";" & Sheets("mails").[A4] & ";" & Sheets("mails").[A5] & ";" & Sheets("mails").[A6] & ";" & Sheets("mails").[A6]
'ou
'objMessage.CC = "xxxx.xxxxxxxx@free.fr" 'Adresse mail du destinataire ou cellule le contenant
'ou
'objMessage.BCC = "xxxx.xxxxxxxx@free.fr" 'Cci ou Bci devient BCC en Englais (mode adresse destinataire masquée), adresse mail de l'expéditeur ou cellule le contenant
'--------------- Corps du message fait référence à des cellules ou saisir dans le code
objMessage.TextBody = "Bonjour," & vbCrLf & vbCrLf & "Attention un produit arrive à échéance, merci de contrôler le fichier Excel " & vbCrLf & vbCrLf & "fichier classeur-test-alertes-2.xlsm"
'objMessage.TextBody = "Bonjour," & vbCrLf & vbCrLf & "Comment pourais-je oublier ce jour " & vbCrLf & vbCrLf & "Bon anniversaire " & Cells(x, 2) & vbCrLf & vbCrLf & "Les Lagouanère"
messageHTML = "Ceci est un message en HTML"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = [P3] 'ou saisir "smtp.free.fr" 'SMTP du fournisseur d'accés (smtp.orange.fr ou smtp.sfr.fr etc ...)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
objMessage.Send
'--------------- Confirmation de l'envoi (facultatif)
MsgBox "Un mail a été bien envoyé à "
Cells(x, 11) = "Envoyé"
'--------------- si erreur on sort de la procédure
Exit Sub
errorHandler:
'--------------- description de l'erreur survenue
MsgBox Err.Description
End Sub
et associe la macro "Envoi_Mail" à un bouton
clic sur ce bouton créé
j'ai ajouté un détecteur d'envoi en colonne K pour que le fichier ne soit envoyé qu'une fois, pour retester, effacer "Envoyé" de la colonne K
Re,
récupère ton fichier, feuille "baseA" cellule P2 comme dit précédemment saisir l'adresse mail de l'expéditeur, en P3 le SMTP
sur ta feuille "mails" cellule A2 à A7 des adresses mails valides
et clic sur le bouton
on verra plus tard l'automatisation d'envoi à l'ouverture
https://www.cjoint.com/c/ECFoTsQK7Ej
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
récupère ton fichier, feuille "baseA" cellule P2 comme dit précédemment saisir l'adresse mail de l'expéditeur, en P3 le SMTP
sur ta feuille "mails" cellule A2 à A7 des adresses mails valides
et clic sur le bouton
on verra plus tard l'automatisation d'envoi à l'ouverture
https://www.cjoint.com/c/ECFoTsQK7Ej
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
L'envoi ce fera seulement à l'ouverture du classeur.
oui passage via outlook.
J'ai commencer à ajouter un peu de macro, celle d'envoi de mail fonctionne correctement.
Mais sur la seconde je fait un contrôle de cellule qui marche parfaitement, mais je voudrais pouvoir contrôler la colonne complète (erreur de syntaxe).
voici ou j'en suis :
le module de contrôle qui appel le module envoi_mail (selon le résultat)
Sub controle()
If Range("i2").Value = 0 Then
On Error Resume Next
Application.EnableEvents = False
Envoi_mail
Application.EnableEvents = True
End If
End Sub
le module Envoi_mail :
Sub Envoi_mail()
Dim Maille As String
Dim Sujet As String
Maille = "papi@resistance.org; toto@titi.fr"
Sujet = "Blablabla"
Message = "Un ou plusieurs blablabla arrivent à échéance !t"
Set OL = CreateObject("Outlook.Application")
Set MyItem = OL.CreateItem(olMailItem)
With MyItem
.To = Maille
.Subject = Sujet
.Body = Message
.Categories = "Banking-Info"
.OriginatorDeliveryReportRequested = False
.ReadReceiptRequested = False
.Send
End With
MsgBox "Alerte transmise", vbInformation, "Envoi des alertes"
End Sub
tout cela fonctionne très bien (en dehors de la sélection de colonne pour le contrôle).
Mais actuellement je doit démarrer la macro "controle" manuellement, et mon intérêt étant qu'elle ce lance à l'ouverture du classeur :)
Merci de ton temps
code a mettre dans le VBA de ThiWorbook:
se lance a l'ouverture du classeur avec boucle sur la colonne I
A+
A l'ouverture du classeur j'ai une erreur :
Erreur de compilation:
Sub ou Function non définie
Private Sub Workbook_Open() <<<< Ceci est surligner en jaune
Dim Plage As Range, cel As Range
With Worksheet("baseA") Worksheet Surligner en Bleu
derlig = .Range("I" & Rows.Count).End(xlUp).Row
Set Plage = .Range("I2:I" & derlig)
For Each cel In Plage
If cel.Value <= 0 Then
Call Envoi_Mail
End If
Next cel
End With
End Sub
Donc il ce lance bien, mais erreur dans le potage :)