OVH Cloud OVH Cloud

Macro alerte !

12 réponses
Avatar
ELDER
Bonjour à tous,

Je souhaiterais créer une macro qui enverrais un mail automatiquement
lorsque le résultat d'une cellule devient supérieur à10%. En langage excel
cela donne :

SI A1 supérieur à 10% envoie mail.

Seulement ça je sais le faire avec la commande SENDMAIL mais il faut que
l'envoi ne se fasse qu'une fois. La macro se met ensuite en veille pour se
réenclencher si la valeur repasse de nouveau les 10% ( a la limite renvoi
d'un mail pour indiquer le passage sous les 10% ). Dans le cas ou la valeur
repasse au dessus des 10% renvoi d'un mail. L'autre problème c'est que le
fichier est ouvert est fermé plusieurs fois par jour ( pour mettre à jour
les liaisons" il faut donc éviter l'envoie du mail à chaque ouverture.

En gros

A1 supérieur à 10% ----> envoi d'un mail
blocage de la macro tant que la valeur et au dessus de 10%, même si le
fichier est fermé puis réouvert ( pour éviter l'envoie du mail d'alerte 10
fois de suite)

A1 inférieur à 10% -----> envoi d'un autre mail
et remise en fonction de l'alerte +10%


Ca à l'air compliqué ( surtout pour mois qui débute ) mais je suppose qu'il
y a une solution.

Merci

2 réponses

1 2
Avatar
ELDER
On avance, on avance !!! Pour outlook si tu as un message du style ' vous
essayer d'envoyer xxxxxx' c'est que Outlook est configurer pour prévenir si
un message est envoyé en fonction caché. J'ai cherché pendant plus d'une
semaine pour trouver et finalement c'est très simple il suffit d'ouvrir
Outlook et sélectionner Option dans le menu Outils et là tu sélectionnes
l'onglet sécurité. Tu décoches ensuite m'avertir lorsque d'autres
application essai d'envoyer un mail de ma part' ET Hop les fichiers sont
envoyé discrètement.
Pour le reste du code je vais tester ce week-end, je te tiens au courant.


Merci



"Nicolas B." a écrit dans le message de
news:u9$
Essaye ceci (attention aux retours à la ligne) :

Sub Alerte()

Dim i As Integer

For i = 1 To 10 'Si les feuilles à tester sont les dix premières
xfichier = Sheets(i).[B2]
If Sheets(i).[I23] >= 0.1 And Sheets(i).[J9] <> "mail envoyé" Then
ActiveWorkbook.SendMail Recipients:="",
Subject:="Alerte

" & xfichier
Sheets(i).[J9] = "mail envoyé"
End If
If Sheets(i).[I23] < 0.1 And Sheets(i).[J9] = "mail envoyé" Then
ActiveWorkbook.SendMail Recipients:="", Subject:="Fin
d'alerte " & xfichier
Sheets(i).[J9] = ""
End If
Next

End Sub

Dans cette macro, il n'y a qu'un seul destinataire (dans le cas de yoyo),
mais qui peut recevoir plusieurs alertes (une alerte par feuille au
maximum).
Chez moi, ActiveSheet.SendMail plante, alors j'ai remplacé par
ActiveWorkbook, mais il y a un message de confirmation d'envoi d'Outlook
que

je n'arrive pas à supprimer.

Pour lancer la macro à chaque modification dans une feuille, va dans
ThisWorkbook (dans la fenêtre de l'explorateur de projets) et colle ta
macro

en la nommant comme suit :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)

'Place ici le code de la macro
End Sub


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Bonjour Nicolas,

J'ai lancé la macro et j'ai une boucle, excel ne me rends pas la main
et envoi quantité de message. Comme je n'y connaît pas grand chose je
voudrais aussi que cette macro soit active au démarrage (enfin quand
le problème de boucle sera réglé ) sur les feuilles 1 à 10.

Pour la liste d'adresse, il n'y a pas besoin de les déclaré, s'il y
en a plusieurs c'est juste avec une fonction Array qu'on règle le
problème ( ligne Sendmail )

Voilà la macro rentré sur excel ( sauf l'adresse mail ;-) ):

Sub Alerte()
' il faudrait que la macro soit active sur les feuilles 1 à 10
' je ne sais pas activer une macro sur tel ou tel feuille
If [I23] >= 0.1 And [J9] <> "mail envoyé" Then
For Ligne = 2 To 50 ' je pense que c'est là que ça ne va pas
xfichier = [B2] 'donne un nom dans le sujet du mail
ActiveSheet.SendMail Recipients:="", Subject:=" Alerte " &
xfichier & " "
'l'envoie du mail se fait avec l'adresse à coté de Recipients
Next
End If
If [I23] < 0.1 And [J9] = "mail envoyé" Then
[J9] = ""
For Ligne = 2 To 50
ActiveWorkbook.SendMail Recipients:Îlls(Ligne, 1), Subject:="Fin
d'alerte " & xfichier & " "
Next
End If
End Sub

Le test doit être fait non pas une fois mais tout le temps, c'est
l'envoie du mail qui doit être fait une seul fois ( pour éviter de
remplir la BAL du destinataire) Parceque le fichier est ouvert 20h
par jour mais le chiffre en I23 varie plusieurs fois par jour.

Voilà on en est là ! Merci pour ta patience







Avatar
ELDER
Encore,

C'est normale qu'ActiveSheet.Sendmail etc... plante dans ma macro c'est bien
ActiveWorkbook qui est utilisé. Désolé c'est de ma faute !!


"Nicolas B." a écrit dans le message de
news:u9$
Essaye ceci (attention aux retours à la ligne) :

Sub Alerte()

Dim i As Integer

For i = 1 To 10 'Si les feuilles à tester sont les dix premières
xfichier = Sheets(i).[B2]
If Sheets(i).[I23] >= 0.1 And Sheets(i).[J9] <> "mail envoyé" Then
ActiveWorkbook.SendMail Recipients:="",
Subject:="Alerte

" & xfichier
Sheets(i).[J9] = "mail envoyé"
End If
If Sheets(i).[I23] < 0.1 And Sheets(i).[J9] = "mail envoyé" Then
ActiveWorkbook.SendMail Recipients:="", Subject:="Fin
d'alerte " & xfichier
Sheets(i).[J9] = ""
End If
Next

End Sub

Dans cette macro, il n'y a qu'un seul destinataire (dans le cas de yoyo),
mais qui peut recevoir plusieurs alertes (une alerte par feuille au
maximum).
Chez moi, ActiveSheet.SendMail plante, alors j'ai remplacé par
ActiveWorkbook, mais il y a un message de confirmation d'envoi d'Outlook
que

je n'arrive pas à supprimer.

Pour lancer la macro à chaque modification dans une feuille, va dans
ThisWorkbook (dans la fenêtre de l'explorateur de projets) et colle ta
macro

en la nommant comme suit :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)

'Place ici le code de la macro
End Sub


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Bonjour Nicolas,

J'ai lancé la macro et j'ai une boucle, excel ne me rends pas la main
et envoi quantité de message. Comme je n'y connaît pas grand chose je
voudrais aussi que cette macro soit active au démarrage (enfin quand
le problème de boucle sera réglé ) sur les feuilles 1 à 10.

Pour la liste d'adresse, il n'y a pas besoin de les déclaré, s'il y
en a plusieurs c'est juste avec une fonction Array qu'on règle le
problème ( ligne Sendmail )

Voilà la macro rentré sur excel ( sauf l'adresse mail ;-) ):

Sub Alerte()
' il faudrait que la macro soit active sur les feuilles 1 à 10
' je ne sais pas activer une macro sur tel ou tel feuille
If [I23] >= 0.1 And [J9] <> "mail envoyé" Then
For Ligne = 2 To 50 ' je pense que c'est là que ça ne va pas
xfichier = [B2] 'donne un nom dans le sujet du mail
ActiveSheet.SendMail Recipients:="", Subject:=" Alerte " &
xfichier & " "
'l'envoie du mail se fait avec l'adresse à coté de Recipients
Next
End If
If [I23] < 0.1 And [J9] = "mail envoyé" Then
[J9] = ""
For Ligne = 2 To 50
ActiveWorkbook.SendMail Recipients:Îlls(Ligne, 1), Subject:="Fin
d'alerte " & xfichier & " "
Next
End If
End Sub

Le test doit être fait non pas une fois mais tout le temps, c'est
l'envoie du mail qui doit être fait une seul fois ( pour éviter de
remplir la BAL du destinataire) Parceque le fichier est ouvert 20h
par jour mais le chiffre en I23 varie plusieurs fois par jour.

Voilà on en est là ! Merci pour ta patience







1 2