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   -
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/


A voir également:

3 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 714
 
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+
0
01001101 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   2
 
Bonjour,

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
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 714 > 01001101 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
Re,

code a mettre dans le VBA de ThiWorbook:

se lance a l'ouverture du classeur avec boucle sur la colonne I

Private Sub Workbook_Open()
    Dim Plage As Range, cel As Range
    
    With Worksheet("baseA")
        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


A+
0
01001101 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   2
 
Je viens de faire l'essai.

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 :)
0
Mike-31 Messages postés 18406 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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
0
01001101 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   2
 
Je test tout cela , je vous tiens au courant.


je ne connait pas CDO (apparemment c'est un terme pour la suite microsoft),
Je test le code
Merci
0
Mike-31 Messages postés 18406 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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.
0