envoyer un mail si valeur >20

Le
Jean Tiendeux
Bonjour,

Je cherche à savoir s'il est possible d'envoyer un e-mail lorsqu'une cellule
dépasse un certain seuil.

C'est pour le boulot : je dois détecter les heures supplémentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salarié a
son classeur excel, avec le décompte manuel par mois (un mois par feuille)
et dans le même classeur (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) un
récapitulatif sur l'année. C'est dans ce récapitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (supérieur à 20 par exemple).

La question, c'est à quel moment le mail pourrait se déclencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir pénibles. Peut-on les
lancer à partir de la sauvegarde du fichier ou mieux à sa fermeture ?

En bonus, si possible, avec un niveau d'alerte gradué (genre alerte verte
pour >20, orange entre 20 et 40 et rouge pour >40

Cdlt, JT2 (otez maj. si réponse perso).
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Corto
Le #5000001
Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et à la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le numéro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(DécalageDeLaColonne) = (XXX > 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub

Corto

Bonjour,

Je cherche à savoir s'il est possible d'envoyer un e-mail lorsqu'une cellule
dépasse un certain seuil.

C'est pour le boulot : je dois détecter les heures supplémentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque sala rié a
son classeur excel, avec le décompte manuel par mois (un mois par feu ille)
et dans le même classeur (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) un
récapitulatif sur l'année. C'est dans ce récapitulatif que je vou drais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (supérieur à 20 par exemple).

La question, c'est à quel moment le mail pourrait se déclencher ? C ar, en
cas de mauvaise saisie, les mails pourraient devenir pénibles. Peut-o n les
lancer à partir de la sauvegarde du fichier ou mieux à sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradué (genre alerte v erte
pour >20, orange entre 20 et 40 et rouge pour >40...

Cdlt, JT2 (otez maj. si réponse perso).





Jean Tiendeux
Le #4998541
Merci drôlement pour ta réponse ! J'ai pas encore testé mais ça soulève
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) mais les
données des heures sont en ligne (en non en colonnes). ça change quelque
chose ?


- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
dépassement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si >20 alors affiche "Alerte" sinon "OK"... Est-ce bien ça ?

- Questions subsidiaires : peut-on contrôler l'envoi du mail ? Par exemple,
je sais pas moi avec une boîte de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre méthode ?...) serait utilisée pour envoyer ce
mail ? (ça transite par la boîte d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je précise ma config : Excel 2003 sous XP sur un poste en réseau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la réception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie différente (sous Outlook 2003 aussi, mais avec une
adresse différente, le smtp est aussi : smtp.orange.fr)...


"Corto"
Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et à la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le numéro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(DécalageDeLaColonne) = (XXX > 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

Bonjour,

Je cherche à savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule dépasse un certain seuil.

C'est pour le boulot : je dois détecter les heures supplémentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salarié
a son classeur excel, avec le décompte manuel par mois (un mois par
feuille) et dans le même classeur (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) un
récapitulatif sur l'année. C'est dans ce récapitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (supérieur à 20 par exemple).

La question, c'est à quel moment le mail pourrait se déclencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir pénibles. Peut-on les
lancer à partir de la sauvegarde du fichier ou mieux à sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradué (genre alerte verte
pour >20, orange entre 20 et 40 et rouge pour >40...

Cdlt, JT2 (otez maj. si réponse perso).


Corto
Le #4998221
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
<pre wrap="">Bonjour Jean Tiendeux,
Non, je n'avais pas vu ton fichier.
La premi&egrave;re proc&eacute;dure n'est pas utile car les valeurs sont d&eacute;j&agrave; test&eacute;es par ta formule en ligne 11.
pour la deuxi&egrave;me (dans ThisWorkbook) &ccedil;a donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au param&egrave;tre Cancel
'---| le classeur n'est pas ferm&eacute;

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?", vbOKCancel, _
"Confirmation")
If CHOIX &lt;&gt; vbCancel Then SendMailOutlook "", _
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas d&eacute;taill&eacute; la proc&eacute;dure qui envoie le mail car j'avais cr&ucirc; comprendre que tu en avait d&eacute;j&agrave; une.
</pre>
Sub SendMailOutlook(EMAIL, SUBJECT As String)<br>
'---|&nbsp;&nbsp;&nbsp; Avant de lancer cette macro, Dans l'&eacute;diteur VBA: Faire&nbsp;&nbsp;&nbsp;&nbsp; |---<br>
'---| Menu / Tools / Reference / Cocher "Microsoft Outlook Library" |---<br>
&nbsp;&nbsp; Dim APPLI As New Outlook.Application<br>
<br>
&nbsp;&nbsp; With APPLI.CreateItem(MAILItem)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .To = EMAIL<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Subject = SUBJECT<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Body = "Bonjour"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Attachments.Add ThisWorkbook.Path &amp; "" &amp;
ThisWorkbook.Name<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Send<br>
&nbsp;&nbsp; End With<br>
End Sub<br>
le mail est envoy&eacute; sous le compte de celui qui ex&eacute;cute la proc&eacute;dure<br>
<br>
Corto<br>
<br>
Jean Tiendeux a &eacute;crit&nbsp;:
<blockquote cite="mid:471ef0a6$0$24996$"
type="cite">
<pre wrap="">Merci dr&ocirc;lement pour ta r&eacute;ponse ! J'ai pas encore test&eacute; mais &ccedil;a soul&egrave;ve
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
</pre>
<blockquote type="cite">
donn&eacute;es des heures sont en ligne (en non en colonnes). &ccedil;a change quelque
chose ?
</pre>
</blockquote>
<pre wrap=""><!---->
- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
d&eacute;passement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si &gt;20 alors affiche "Alerte" sinon "OK"... Est-ce bien &ccedil;a ?

- Questions subsidiaires : peut-on contr&ocirc;ler l'envoi du mail ? Par exemple,
je sais pas moi avec une bo&icirc;te de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre m&eacute;thode ?...) serait utilis&eacute;e pour envoyer ce
mail ? (&ccedil;a transite par la bo&icirc;te d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je pr&eacute;cise ma config : Excel 2003 sous XP sur un poste en r&eacute;seau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la r&eacute;ception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie diff&eacute;rente (sous Outlook 2003 aussi, mais avec une
adresse diff&eacute;rente, le smtp est aussi : smtp.orange.fr)...


"Corto" Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et &agrave; la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le num&eacute;ro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(D&eacute;calageDeLaColonne) = (XXX &gt; 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

</pre>
<blockquote type="cite">
<pre wrap="">Bonjour,

Je cherche &agrave; savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule d&eacute;passe un certain seuil.

C'est pour le boulot : je dois d&eacute;tecter les heures suppl&eacute;mentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salari&eacute;
a son classeur excel, avec le d&eacute;compte manuel par mois (un mois par
feuille) et dans le m&ecirc;me classeur (lien ici :
r&eacute;capitulatif sur l'ann&eacute;e. C'est dans ce r&eacute;capitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (sup&eacute;rieur &agrave; 20 par exemple).

La question, c'est &agrave; quel moment le mail pourrait se d&eacute;clencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir p&eacute;nibles. Peut-on les
lancer &agrave; partir de la sauvegarde du fichier ou mieux &agrave; sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradu&eacute; (genre alerte verte
pour &gt;20, orange entre 20 et 40 et rouge pour &gt;40...

Cdlt, JT2 (otez maj. si r&eacute;ponse perso).
</pre>
</blockquote>
<pre wrap=""><!---->

</pre>
</blockquote>
</body>
</html>
Jean Tiendeux
Le #5044801
Ce message est composé et au format MIME.

------=_NextPart_000_0078_01C82A2C.3BE8A890
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Salut et encore merci pour tes infos Corto...

Seulement ça bloque. Il semble que ce soit l'expression ".[B10:M10]" qui gêne (4ème ligne). (J'ai modifié ton code pour que ça corresponde à la bonne ligne (10 au lieu de 11). Une idée ? Je mets ici en ligne la dernière version du fichier : http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html

Autre chose : à chaque fois que j'ouvre le fichier, excel m'indique que les macros sont désactivées, comme je l'ai défini dans les options. Compte tenu du nombre de postes impliqués par ce fichier, y aurait-il un moyen de contourner ce problème ? (pour les collègues qui auraient oublié d'activer les macros)...

Cordialement, JT2.
"Corto" Bonjour Jean Tiendeux,
Non, je n'avais pas vu ton fichier.
La première procédure n'est pas utile car les valeurs sont déjà testées par ta formule en ligne 11.
pour la deuxième (dans ThisWorkbook) ça donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au paramètre Cancel
'---| le classeur n'est pas fermé

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?", vbOKCancel, _
"Confirmation")
If CHOIX <> vbCancel Then SendMailOutlook "", _
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas détaillé la procédure qui envoie le mail car j'avais crû comprendre que tu en avait déjà une.
Sub SendMailOutlook(EMAIL, SUBJECT As String)
'---| Avant de lancer cette macro, Dans l'éditeur VBA: Faire |---
'---| Menu / Tools / Reference / Cocher "Microsoft Outlook Library" |---
Dim APPLI As New Outlook.Application

With APPLI.CreateItem(MAILItem)
.To = EMAIL
.Subject = SUBJECT
.Body = "Bonjour"
.Attachments.Add ThisWorkbook.Path & "" & ThisWorkbook.Name
.Send
End With
End Sub
le mail est envoyé sous le compte de celui qui exécute la procédure

Corto

Merci drôlement pour ta réponse ! J'ai pas encore testé mais ça soulève
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) mais les
données des heures sont en ligne (en non en colonnes). ça change quelque
chose ?

- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
dépassement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si >20 alors affiche "Alerte" sinon "OK"... Est-ce bien ça ?

- Questions subsidiaires : peut-on contrôler l'envoi du mail ? Par exemple,
je sais pas moi avec une boîte de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre méthode ?...) serait utilisée pour envoyer ce
mail ? (ça transite par la boîte d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je précise ma config : Excel 2003 sous XP sur un poste en réseau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la réception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie différente (sous Outlook 2003 aussi, mais avec une
adresse différente, le smtp est aussi : smtp.orange.fr)...


"Corto"
Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et à la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le numéro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(DécalageDeLaColonne) = (XXX > 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

Bonjour,

Je cherche à savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule dépasse un certain seuil.

C'est pour le boulot : je dois détecter les heures supplémentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salarié
a son classeur excel, avec le décompte manuel par mois (un mois par
feuille) et dans le même classeur (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) un
récapitulatif sur l'année. C'est dans ce récapitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (supérieur à 20 par exemple).

La question, c'est à quel moment le mail pourrait se déclencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir pénibles. Peut-on les
lancer à partir de la sauvegarde du fichier ou mieux à sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradué (genre alerte verte
pour >20, orange entre 20 et 40 et rouge pour >40...

Cdlt, JT2 (otez maj. si réponse perso).



------=_NextPart_000_0078_01C82A2C.3BE8A890
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content=text/html;charset=iso-8859-1>
<BODY id=MailContainerBody
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 10pt; COLOR: #000000; PADDING-TOP: 15px; FONT-FAMILY: Arial"
text=#000000 bgColor=#ffffff leftMargin=0 topMargin=0 CanvasTabStop="true"
acc_role="text" name="Compose message area">
<DIV>&nbsp;</DIV>
<DIV>Seulement ça bloque. Il semble que ce soit l'expression&nbsp;".[B10:M10]"
qui gêne (4ème ligne). &nbsp;(J'ai modifié ton code pour que ça corresponde à la
bonne ligne (10 au lieu de 11). Une idée ? Je mets ici en ligne la dernière
version du fichier : <A
title=http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html
href="http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html"
target=_blank>http://rapidshare.com/files/70643928/Base_horaire_2008.xl s.html</A>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>Autre chose : à chaque fois que j'ouvre le fichier, excel m'indique que les
macros sont désactivées, comme je l'ai défini dans les options. Compte tenu du
nombre de postes&nbsp;impliqués par ce fichier, y aurait-il un moyen de
contourner ce problème ? (pour les collègues qui auraient oublié d'activer les
macros)...</DIV>
<DIV>&nbsp;</DIV>
<BLOCKQUOTE dir=ltr
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Corto" &lt;<A title=mailto:
href="mailto:"></A>&gt; a écrit dans
le message de groupe de discussion : <A
title=mailto:e6a#
href="mailto:e6a%">e6a%2325jFIHA.394 Non, je n'avais pas vu ton fichier.
La première procédure n'est pas utile car les valeurs sont déjà testées par ta formule en ligne 11.
pour la deuxième (dans ThisWorkbook) ça donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au paramètre Cancel
'---| le classeur n'est pas fermé

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?", vbOKCancel, _
"Confirmation")
If CHOIX &lt;&gt; vbCancel Then SendMailOutlook "", _
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas détaillé la procédure qui envoie le mail car j'avais crû comprendre que tu en avait déjà une.
</PRE>Sub SendMailOutlook(EMAIL, SUBJECT As String)<BR>'---|&nbsp;&nbsp;&nbsp;
Avant de lancer cette macro, Dans l'éditeur VBA: Faire&nbsp;&nbsp;&nbsp;&nbsp;
|---<BR>'---| Menu / Tools / Reference / Cocher "Microsoft Outlook Library"
|--- With APPLI.CreateItem(MAILItem)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .To =
EMAIL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Subject =
SUBJECT<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Body =
"Bonjour"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Attachments.Add ThisWorkbook.Path
&amp; "" &amp; ThisWorkbook.Name<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
.Send<BR>&nbsp;&nbsp; End With<BR>End Sub<BR>le mail est envoyé sous le compte
de celui qui exécute la procédure<BR><BR>Corto<BR><BR>Jean Tiendeux a
écrit&nbsp;:
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
</PRE>
données des heures sont en ligne (en non en colonnes). ça change quelque
chose ?
</PRE></BLOCKQUOTE><PRE wrap=""><!---->
- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
dépassement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si &gt;20 alors affiche "Alerte" sinon "OK"... Est-ce bien ça ?

- Questions subsidiaires : peut-on contrôler l'envoi du mail ? Par exemple,
je sais pas moi avec une boîte de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre méthode ?...) serait utilisée pour envoyer ce
mail ? (ça transite par la boîte d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je précise ma config : Excel 2003 sous XP sur un poste en réseau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la réception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie différente (sous Outlook 2003 aussi, mais avec une
adresse différente, le smtp est aussi : smtp.orange.fr)...


"Corto" Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et à la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le numéro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(DécalageDeLaColonne) = (XXX &gt; 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

</PRE>
<BLOCKQUOTE type="cite"><PRE wrap="">Bonjour,

Je cherche à savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule dépasse un certain seuil.

C'est pour le boulot : je dois détecter les heures supplémentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salarié
a son classeur excel, avec le décompte manuel par mois (un mois par
feuille) et dans le même classeur (lien ici :
récapitulatif sur l'année. C'est dans ce récapitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (supérieur à 20 par exemple).

La question, c'est à quel moment le mail pourrait se déclencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir pénibles. Peut-on les
lancer à partir de la sauvegarde du fichier ou mieux à sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradué (genre alerte verte
pour &gt;20, orange entre 20 et 40 et rouge pour &gt;40...

Cdlt, JT2 (otez maj. si réponse perso).
</PRE></BLOCKQUOTE><PRE wrap=""><!---->

</PRE></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>

------=_NextPart_000_0078_01C82A2C.3BE8A890--
Corto
Le #5044481
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
<pre wrap="">Bonjour Jean Tiendeux,</pre>
J'ai fait quelques modif et ca fonctionne maintenant chez moi. Dans ton
fichier, j'ai d&ucirc; modifier la r&eacute;f&eacute;rence vers Microsoft Outlook 12.0
Object Library en Microsoft Outlook 11.0 Object Library, car je n'ai
pas Office 2007 mais je suis toujours en Office 2003. Si tu laisse
comme cela, &ccedil;a devrait fonctionner (les mails seront envoy&eacute;s avec
Office 2003).<br>
je t'ai remis le fichier corrig&eacute; sur RS :
<br>
Corto<br>
<br>
Jean Tiendeux a &eacute;crit&nbsp;:
<blockquote cite="mid:4740a442$0$12403$"
type="cite">
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<div>&nbsp;</div>
<div>Seulement &ccedil;a bloque. Il semble que ce soit
l'expression&nbsp;".[B10:M10]" qui g&ecirc;ne (4&egrave;me ligne). &nbsp;(J'ai modifi&eacute; ton
code pour que &ccedil;a corresponde &agrave; la bonne ligne (10 au lieu de 11). Une
id&eacute;e ? Je mets ici en ligne la derni&egrave;re version du fichier : <a
moz-do-not-send="true"
title="http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html"
href="http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html"
target="_blank">http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html</a>&nbsp;</div>
<div>&nbsp;</div>
<div>Autre chose : &agrave; chaque fois que j'ouvre le fichier, excel
m'indique que les macros sont d&eacute;sactiv&eacute;es, comme je l'ai d&eacute;fini dans
les options. Compte tenu du nombre de postes&nbsp;impliqu&eacute;s par ce fichier,
y aurait-il un moyen de contourner ce probl&egrave;me ? (pour les coll&egrave;gues
qui auraient oubli&eacute; d'activer les macros)...</div>
<div>&nbsp;</div>
<blockquote dir="ltr"
style="border-left: 2px solid rgb(0, 0, 0); padding-right: 0px; padding-left: 5px; margin-left: 5px; margin-right: 0px;">
<div>"Corto" &lt;<a moz-do-not-send="true"
title="mailto:" href="mailto:"></a>&gt;
a &eacute;crit dans le message de groupe de discussion : <a
moz-do-not-send="true"
title="mailto:e6a#"
href="mailto:e6a%">e6a% <pre wrap="">Bonjour Jean Tiendeux,
Non, je n'avais pas vu ton fichier.
La premi&egrave;re proc&eacute;dure n'est pas utile car les valeurs sont d&eacute;j&agrave; test&eacute;es par ta formule en ligne 11.
pour la deuxi&egrave;me (dans ThisWorkbook) &ccedil;a donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au param&egrave;tre Cancel
'---| le classeur n'est pas ferm&eacute;

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?", vbOKCancel, _
"Confirmation")
If CHOIX &lt;&gt; vbCancel Then SendMailOutlook "", _
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas d&eacute;taill&eacute; la proc&eacute;dure qui envoie le mail car j'avais cr&ucirc; comprendre que tu en avait d&eacute;j&agrave; une.
</pre>
Sub SendMailOutlook(EMAIL, SUBJECT As String)<br>
'---|&nbsp;&nbsp;&nbsp; Avant de lancer cette macro, Dans l'&eacute;diteur VBA: Faire&nbsp;&nbsp;&nbsp;&nbsp; |---<br>
'---| Menu / Tools / Reference / Cocher "Microsoft Outlook Library" |---<br>
&nbsp;&nbsp; Dim APPLI As New Outlook.Application<br>
<br>
&nbsp;&nbsp; With APPLI.CreateItem(MAILItem)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .To = EMAIL<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Subject = SUBJECT<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Body = "Bonjour"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Attachments.Add ThisWorkbook.Path &amp; "" &amp;
ThisWorkbook.Name<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Send<br>
&nbsp;&nbsp; End With<br>
End Sub<br>
le mail est envoy&eacute; sous le compte de celui qui ex&eacute;cute la proc&eacute;dure<br>
<br>
Corto<br>
<br>
Jean Tiendeux a &eacute;crit&nbsp;:
<blockquote cite="mid:471ef0a6$0$24996$"
type="cite">
<pre wrap="">Merci dr&ocirc;lement pour ta r&eacute;ponse ! J'ai pas encore test&eacute; mais &ccedil;a soul&egrave;ve
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
</pre>
<blockquote type="cite">
<pre wrap=""><a moz-do-not-send="true"
class="moz-txt-link-freetext"
title="http://rapidshare.com/files/64560606/horaires_test.xls.html"
href="http://rapidshare.com/files/64560606/horaires_test.xls.html">http://rapidshare.com/files/64560606/horaires_test.xls.html</a>) mais les
donn&eacute;es des heures sont en ligne (en non en colonnes). &ccedil;a change quelque
chose ?
</pre>
</blockquote>
<pre wrap=""><!---->
- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
d&eacute;passement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si &gt;20 alors affiche "Alerte" sinon "OK"... Est-ce bien &ccedil;a ?

- Questions subsidiaires : peut-on contr&ocirc;ler l'envoi du mail ? Par exemple,
je sais pas moi avec une bo&icirc;te de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre m&eacute;thode ?...) serait utilis&eacute;e pour envoyer ce
mail ? (&ccedil;a transite par la bo&icirc;te d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je pr&eacute;cise ma config : Excel 2003 sous XP sur un poste en r&eacute;seau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la r&eacute;ception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie diff&eacute;rente (sous Outlook 2003 aussi, mais avec une
adresse diff&eacute;rente, le smtp est aussi : smtp.orange.fr)...


"Corto" <a moz-do-not-send="true" class="moz-txt-link-rfc2396E"
title="mailto:" href="mailto:">&lt;&gt;</a> a &eacute;crit dans le message de news:
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
title="mailto:"
href="mailto:"></a>...
Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et &agrave; la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le num&eacute;ro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(D&eacute;calageDeLaColonne) = (XXX &gt; 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

</pre>
<blockquote type="cite">
<pre wrap="">Bonjour,

Je cherche &agrave; savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule d&eacute;passe un certain seuil.

C'est pour le boulot : je dois d&eacute;tecter les heures suppl&eacute;mentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salari&eacute;
a son classeur excel, avec le d&eacute;compte manuel par mois (un mois par
feuille) et dans le m&ecirc;me classeur (lien ici :
<a moz-do-not-send="true" class="moz-txt-link-freetext"
title="http://rapidshare.com/files/64560606/horaires_test.xls.html"
href="http://rapidshare.com/files/64560606/horaires_test.xls.html">http://rapidshare.com/files/64560606/horaires_test.xls.html</a>) un
r&eacute;capitulatif sur l'ann&eacute;e. C'est dans ce r&eacute;capitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (sup&eacute;rieur &agrave; 20 par exemple).

La question, c'est &agrave; quel moment le mail pourrait se d&eacute;clencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir p&eacute;nibles. Peut-on les
lancer &agrave; partir de la sauvegarde du fichier ou mieux &agrave; sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradu&eacute; (genre alerte verte
pour &gt;20, orange entre 20 et 40 et rouge pour &gt;40...

Cdlt, JT2 (otez maj. si r&eacute;ponse perso).
</pre>
</blockquote>
<pre wrap=""><!---->

</pre>
</blockquote>
</blockquote>
</blockquote>
</body>
</html>
Jean Tiendeux
Le #5073571
Ce message est composé et au format MIME.

------=_NextPart_000_0011_01C82AFE.10EFF440
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Encore et toujours merci de ton travail. Tout marche nickel... cependant juste un détail :

lorsque je ferme le fichier, il m'est demandé 4 fois de confirmer l'envoi du mail et les 4 messages sont effectivement envoyés. Je pense qu'il envoie autant de messages qu'il y a d'occurrences d'alerte en B10:M10.

Un seul message (et donc une seule confirmation) me suffisant, y a-t-il donc un moyen pour en réduire le nombre (à 1 !) ?

Cordialement, JT2.
"Corto" Bonjour Jean Tiendeux,J'ai fait quelques modif et ca fonctionne maintenant chez moi. Dans ton fichier, j'ai dû modifier la référence vers Microsoft Outlook 12.0 Object Library en Microsoft Outlook 11.0 Object Library, car je n'ai pas Office 2007 mais je suis toujours en Office 2003. Si tu laisse comme cela, ça devrait fonctionner (les mails seront envoyés avec Office 2003).
je t'ai remis le fichier corrigé sur RS : http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html

Corto

Salut et encore merci pour tes infos Corto...

Seulement ça bloque. Il semble que ce soit l'expression ".[B10:M10]" qui gêne (4ème ligne). (J'ai modifié ton code pour que ça corresponde à la bonne ligne (10 au lieu de 11). Une idée ? Je mets ici en ligne la dernière version du fichier : http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html

Autre chose : à chaque fois que j'ouvre le fichier, excel m'indique que les macros sont désactivées, comme je l'ai défini dans les options. Compte tenu du nombre de postes impliqués par ce fichier, y aurait-il un moyen de contourner ce problème ? (pour les collègues qui auraient oublié d'activer les macros)...

Cordialement, JT2.
"Corto" Bonjour Jean Tiendeux,
Non, je n'avais pas vu ton fichier.
La première procédure n'est pas utile car les valeurs sont déjà testées par ta formule en ligne 11.
pour la deuxième (dans ThisWorkbook) ça donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au paramètre Cancel
'---| le classeur n'est pas fermé

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?", vbOKCancel, _
"Confirmation")
If CHOIX <> vbCancel Then SendMailOutlook "", _
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas détaillé la procédure qui envoie le mail car j'avais crû comprendre que tu en avait déjà une.
Sub SendMailOutlook(EMAIL, SUBJECT As String)
'---| Avant de lancer cette macro, Dans l'éditeur VBA: Faire |---
'---| Menu / Tools / Reference / Cocher "Microsoft Outlook Library" |---
Dim APPLI As New Outlook.Application

With APPLI.CreateItem(MAILItem)
.To = EMAIL
.Subject = SUBJECT
.Body = "Bonjour"
.Attachments.Add ThisWorkbook.Path & "" & ThisWorkbook.Name
.Send
End With
End Sub
le mail est envoyé sous le compte de celui qui exécute la procédure

Corto

Merci drôlement pour ta réponse ! J'ai pas encore testé mais ça soulève
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) mais les
données des heures sont en ligne (en non en colonnes). ça change quelque
chose ?

- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
dépassement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si >20 alors affiche "Alerte" sinon "OK"... Est-ce bien ça ?

- Questions subsidiaires : peut-on contrôler l'envoi du mail ? Par exemple,
je sais pas moi avec une boîte de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre méthode ?...) serait utilisée pour envoyer ce
mail ? (ça transite par la boîte d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je précise ma config : Excel 2003 sous XP sur un poste en réseau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la réception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie différente (sous Outlook 2003 aussi, mais avec une
adresse différente, le smtp est aussi : smtp.orange.fr)...


"Corto"
Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et à la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le numéro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(DécalageDeLaColonne) = (XXX > 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

Bonjour,

Je cherche à savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule dépasse un certain seuil.

C'est pour le boulot : je dois détecter les heures supplémentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salarié
a son classeur excel, avec le décompte manuel par mois (un mois par
feuille) et dans le même classeur (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) un
récapitulatif sur l'année. C'est dans ce récapitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (supérieur à 20 par exemple).

La question, c'est à quel moment le mail pourrait se déclencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir pénibles. Peut-on les
lancer à partir de la sauvegarde du fichier ou mieux à sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradué (genre alerte verte
pour >20, orange entre 20 et 40 et rouge pour >40...

Cdlt, JT2 (otez maj. si réponse perso).



------=_NextPart_000_0011_01C82AFE.10EFF440
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content=text/html;charset=iso-8859-1>
<BODY id=MailContainerBody
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 10pt; COLOR: #000000; PADDING-TOP: 15px; FONT-FAMILY: Arial"
text=#000000 bgColor=#ffffff leftMargin=0 topMargin=0 CanvasTabStop="true"
acc_role="text" name="Compose message area">
<DIV>Encore et toujours merci de ton travail. Tout marche nickel... cependant
juste un détail : </DIV>
<DIV>&nbsp;</DIV>
<DIV>lorsque je ferme le fichier, il m'est demandé 4 fois de confirmer l'envoi
du mail et&nbsp;les 4 messages sont effectivement envoyés. Je pense qu'il envoie
autant de messages qu'il y a d'occurrences d'alerte&nbsp;en B10:M10.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Un seul message (et donc une seule confirmation) me suffisant, y a-t-il
donc un moyen pour en réduire le nombre (à 1 !) ?</DIV>
<DIV>&nbsp;</DIV>
<BLOCKQUOTE dir=ltr
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Corto" &lt;<A title=mailto:
href="mailto:"></A>&gt; a écrit dans
le message de groupe de discussion : <A
title=mailto:
href="mailto:"> 2MSFTNGP02.phx.gbl fonctionne maintenant chez moi. Dans ton fichier, j'ai dû modifier la
référence vers Microsoft Outlook 12.0 Object Library en Microsoft Outlook 11.0
Object Library, car je n'ai pas Office 2007 mais je suis toujours en Office
2003. Si tu laisse comme cela, ça devrait fonctionner (les mails seront
envoyés avec Office 2003).<BR>je t'ai remis le fichier corrigé sur RS : <A
class=moz-txt-link-freetext
title=http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html
href="http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html"> http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html</A><BR><B R>Corto<BR><BR>Jean
Tiendeux a écrit&nbsp;:
<DIV>&nbsp;</DIV>
<DIV>Seulement ça bloque. Il semble que ce soit
l'expression&nbsp;".[B10:M10]" qui gêne (4ème ligne). &nbsp;(J'ai modifié
ton code pour que ça corresponde à la bonne ligne (10 au lieu de 11). Une
idée ? Je mets ici en ligne la dernière version du fichier : <A
title=http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html
href="http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html"
target=_blank
moz-do-not-send="true">http://rapidshare.com/files/70643928/Base_horair e_2008.xls.html</A>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>Autre chose : à chaque fois que j'ouvre le fichier, excel m'indique que
les macros sont désactivées, comme je l'ai défini dans les options. Compte
tenu du nombre de postes&nbsp;impliqués par ce fichier, y aurait-il un moyen
de contourner ce problème ? (pour les collègues qui auraient oublié
d'activer les macros)...</DIV>
<DIV>&nbsp;</DIV>
<BLOCKQUOTE dir=ltr
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(0,0,0) 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Corto" &lt;<A title=mailto:
href="mailto:"
moz-do-not-send="true"></A>&gt; a écrit dans le
message de groupe de discussion : <A
title=mailto:e6a#
href="mailto:e6a%"
moz-do-not-send="true">e6a% Non, je n'avais pas vu ton fichier.
La première procédure n'est pas utile car les valeurs sont déjà testées par ta formule en ligne 11.
pour la deuxième (dans ThisWorkbook) ça donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au paramètre Cancel
'---| le classeur n'est pas fermé

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?", vbOKCancel, _
"Confirmation")
If CHOIX &lt;&gt; vbCancel Then SendMailOutlook "", _
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas détaillé la procédure qui envoie le mail car j'avais crû comprendre que tu en avait déjà une.
</PRE>Sub SendMailOutlook(EMAIL, SUBJECT As
String)<BR>'---|&nbsp;&nbsp;&nbsp; Avant de lancer cette macro, Dans
l'éditeur VBA: Faire&nbsp;&nbsp;&nbsp;&nbsp; |---<BR>'---| Menu / Tools /
Reference / Cocher "Microsoft Outlook Library" |---<BR>&nbsp;&nbsp; Dim
APPLI As New Outlook.Application<BR><BR>&nbsp;&nbsp; With
APPLI.CreateItem(MAILItem)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .To =
EMAIL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Subject =
SUBJECT<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Body =
"Bonjour"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Attachments.Add
ThisWorkbook.Path &amp; "" &amp;
ThisWorkbook.Name End With<BR>End Sub<BR>le mail est envoyé sous le compte de celui qui
exécute la procédure<BR><BR>Corto<BR><BR>Jean Tiendeux a écrit&nbsp;:
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
</PRE>
données des heures sont en ligne (en non en colonnes). ça change quelque
chose ?
</PRE></BLOCKQUOTE><PRE wrap=""><!---->
- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
dépassement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si &gt;20 alors affiche "Alerte" sinon "OK"... Est-ce bien ça ?

- Questions subsidiaires : peut-on contrôler l'envoi du mail ? Par exemple,
je sais pas moi avec une boîte de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre méthode ?...) serait utilisée pour envoyer ce
mail ? (ça transite par la boîte d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je précise ma config : Excel 2003 sous XP sur un poste en réseau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la réception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie différente (sous Outlook 2003 aussi, mais avec une
adresse différente, le smtp est aussi : smtp.orange.fr)...


"Corto" Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et à la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le numéro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(DécalageDeLaColonne) = (XXX &gt; 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

</PRE>
<BLOCKQUOTE type="cite"><PRE wrap="">Bonjour,

Je cherche à savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule dépasse un certain seuil.

C'est pour le boulot : je dois détecter les heures supplémentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salarié
a son classeur excel, avec le décompte manuel par mois (un mois par
feuille) et dans le même classeur (lien ici :
récapitulatif sur l'année. C'est dans ce récapitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (supérieur à 20 par exemple).

La question, c'est à quel moment le mail pourrait se déclencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir pénibles. Peut-on les
lancer à partir de la sauvegarde du fichier ou mieux à sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradué (genre alerte verte
pour &gt;20, orange entre 20 et 40 et rouge pour &gt;40...

Cdlt, JT2 (otez maj. si réponse perso).
</PRE></BLOCKQUOTE><PRE wrap=""><!---->

</PRE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>

------=_NextPart_000_0011_01C82AFE.10EFF440--
Corto
Le #5073111
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Bonjour Jean Tiendeux,<br>
Effectivement la proc&eacute;dure actuelle envoie un email &agrave; chaque fois
qu'elle rencontre "OK"<br>
pour n'envoyer q'un email il suffit de remplacer la ligne :<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If CHOIX &lt;&gt; vbCancel Then SendMailOutlook
par les lignes :<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If CHOIX &lt;&gt; vbCancel Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SendMailOutlook heures supp."<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br>
<br>
Corto<br>
<br>
Jean Tiendeux a &eacute;crit&nbsp;:
<blockquote cite="mid:47420447$0$29622$"
type="cite">
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<div>Encore et toujours merci de ton travail. Tout marche nickel...
cependant juste un d&eacute;tail : </div>
<div>&nbsp;</div>
<div>lorsque je ferme le fichier, il m'est demand&eacute; 4 fois de
confirmer l'envoi du mail et&nbsp;les 4 messages sont effectivement envoy&eacute;s.
Je pense qu'il envoie autant de messages qu'il y a d'occurrences
d'alerte&nbsp;en B10:M10.</div>
<div>&nbsp;</div>
<div>Un seul message (et donc une seule confirmation) me suffisant, y
a-t-il donc un moyen pour en r&eacute;duire le nombre (&agrave; 1 !) ?</div>
<div>&nbsp;</div>
<blockquote dir="ltr"
style="border-left: 2px solid rgb(0, 0, 0); padding-right: 0px; padding-left: 5px; margin-left: 5px; margin-right: 0px;">
<div>"Corto" &lt;<a moz-do-not-send="true"
title="mailto:" href="mailto:"></a>&gt;
a &eacute;crit dans le message de groupe de discussion : <a
moz-do-not-send="true"
title="mailto:"
href="mailto:"> <pre wrap="">Bonjour Jean Tiendeux,</pre>
J'ai fait quelques modif et ca fonctionne maintenant chez moi. Dans ton
fichier, j'ai d&ucirc; modifier la r&eacute;f&eacute;rence vers Microsoft Outlook 12.0
Object Library en Microsoft Outlook 11.0 Object Library, car je n'ai
pas Office 2007 mais je suis toujours en Office 2003. Si tu laisse
comme cela, &ccedil;a devrait fonctionner (les mails seront envoy&eacute;s avec
Office 2003).<br>
je t'ai remis le fichier corrig&eacute; sur RS : <a moz-do-not-send="true"
class="moz-txt-link-freetext"
title="http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html"
href="http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html">http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html</a><br>
<br>
Corto<br>
<br>
Jean Tiendeux a &eacute;crit&nbsp;:
<blockquote cite="mid:4740a442$0$12403$"
type="cite">
<div>&nbsp;</div>
<div>Seulement &ccedil;a bloque. Il semble que ce soit
l'expression&nbsp;".[B10:M10]" qui g&ecirc;ne (4&egrave;me ligne). &nbsp;(J'ai modifi&eacute; ton
code pour que &ccedil;a corresponde &agrave; la bonne ligne (10 au lieu de 11). Une
id&eacute;e ? Je mets ici en ligne la derni&egrave;re version du fichier : <a
title="http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html"
href="http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html"
target="_blank" moz-do-not-send="true">http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html</a>&nbsp;</div>
<div>&nbsp;</div>
<div>Autre chose : &agrave; chaque fois que j'ouvre le fichier, excel
m'indique que les macros sont d&eacute;sactiv&eacute;es, comme je l'ai d&eacute;fini dans
les options. Compte tenu du nombre de postes&nbsp;impliqu&eacute;s par ce fichier,
y aurait-il un moyen de contourner ce probl&egrave;me ? (pour les coll&egrave;gues
qui auraient oubli&eacute; d'activer les macros)...</div>
<div>&nbsp;</div>
<blockquote dir="ltr"
style="border-left: 2px solid rgb(0, 0, 0); padding-right: 0px; padding-left: 5px; margin-left: 5px; margin-right: 0px;">
<div>"Corto" &lt;<a title="mailto:"
href="mailto:" moz-do-not-send="true"></a>&gt;
a &eacute;crit dans le message de groupe de discussion : <a
title="mailto:e6a#"
href="mailto:e6a%"
moz-do-not-send="true">e6a% <pre wrap="">Bonjour Jean Tiendeux,
Non, je n'avais pas vu ton fichier.
La premi&egrave;re proc&eacute;dure n'est pas utile car les valeurs sont d&eacute;j&agrave; test&eacute;es par ta formule en ligne 11.
pour la deuxi&egrave;me (dans ThisWorkbook) &ccedil;a donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au param&egrave;tre Cancel
'---| le classeur n'est pas ferm&eacute;

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?", vbOKCancel, _
"Confirmation")
If CHOIX &lt;&gt; vbCancel Then SendMailOutlook "", _
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas d&eacute;taill&eacute; la proc&eacute;dure qui envoie le mail car j'avais cr&ucirc; comprendre que tu en avait d&eacute;j&agrave; une.
</pre>
Sub SendMailOutlook(EMAIL, SUBJECT As String)<br>
'---|&nbsp;&nbsp;&nbsp; Avant de lancer cette macro, Dans l'&eacute;diteur VBA: Faire&nbsp;&nbsp;&nbsp;&nbsp; |---<br>
'---| Menu / Tools / Reference / Cocher "Microsoft Outlook Library" |---<br>
&nbsp;&nbsp; Dim APPLI As New Outlook.Application<br>
<br>
&nbsp;&nbsp; With APPLI.CreateItem(MAILItem)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .To = EMAIL<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Subject = SUBJECT<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Body = "Bonjour"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Attachments.Add ThisWorkbook.Path &amp; "" &amp;
ThisWorkbook.Name<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ..Send<br>
&nbsp;&nbsp; End With<br>
End Sub<br>
le mail est envoy&eacute; sous le compte de celui qui ex&eacute;cute la proc&eacute;dure<br>
<br>
Corto<br>
<br>
Jean Tiendeux a &eacute;crit&nbsp;:
<blockquote cite="mid:471ef0a6$0$24996$"
type="cite">
<pre wrap="">Merci dr&ocirc;lement pour ta r&eacute;ponse ! J'ai pas encore test&eacute; mais &ccedil;a soul&egrave;ve
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
</pre>
<blockquote type="cite">
<pre wrap=""><a class="moz-txt-link-freetext"
title="http://rapidshare.com/files/64560606/horaires_test.xls.html"
href="http://rapidshare.com/files/64560606/horaires_test.xls.html"
moz-do-not-send="true">http://rapidshare.com/files/64560606/horaires_test.xls.html</a>) mais les
donn&eacute;es des heures sont en ligne (en non en colonnes). &ccedil;a change quelque
chose ?
</pre>
</blockquote>
<pre wrap=""><!---->
- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
d&eacute;passement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si &gt;20 alors affiche "Alerte" sinon "OK"... Est-ce bien &ccedil;a ?

- Questions subsidiaires : peut-on contr&ocirc;ler l'envoi du mail ? Par exemple,
je sais pas moi avec une bo&icirc;te de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre m&eacute;thode ?...) serait utilis&eacute;e pour envoyer ce
mail ? (&ccedil;a transite par la bo&icirc;te d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je pr&eacute;cise ma config : Excel 2003 sous XP sur un poste en r&eacute;seau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la r&eacute;ception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie diff&eacute;rente (sous Outlook 2003 aussi, mais avec une
adresse diff&eacute;rente, le smtp est aussi : smtp.orange.fr)...


"Corto" <a class="moz-txt-link-rfc2396E"
title="mailto:" href="mailto:"
moz-do-not-send="true">&lt;&gt;</a> a &eacute;crit dans le message de news:
<a class="moz-txt-link-abbreviated"
title="mailto:"
href="mailto:"
moz-do-not-send="true"></a>...
Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et &agrave; la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le num&eacute;ro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(D&eacute;calageDeLaColonne) = (XXX &gt; 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

</pre>
<blockquote type="cite">
<pre wrap="">Bonjour,

Je cherche &agrave; savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule d&eacute;passe un certain seuil.

C'est pour le boulot : je dois d&eacute;tecter les heures suppl&eacute;mentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salari&eacute;
a son classeur excel, avec le d&eacute;compte manuel par mois (un mois par
feuille) et dans le m&ecirc;me classeur (lien ici :
<a class="moz-txt-link-freetext"
title="http://rapidshare.com/files/64560606/horaires_test.xls.html"
href="http://rapidshare.com/files/64560606/horaires_test.xls.html"
moz-do-not-send="true">http://rapidshare.com/files/64560606/horaires_test.xls.html</a>) un
r&eacute;capitulatif sur l'ann&eacute;e. C'est dans ce r&eacute;capitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (sup&eacute;rieur &agrave; 20 par exemple).

La question, c'est &agrave; quel moment le mail pourrait se d&eacute;clencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir p&eacute;nibles. Peut-on les
lancer &agrave; partir de la sauvegarde du fichier ou mieux &agrave; sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradu&eacute; (genre alerte verte
pour &gt;20, orange entre 20 et 40 et rouge pour &gt;40...

Cdlt, JT2 (otez maj. si r&eacute;ponse perso).
</pre>
</blockquote>
<pre wrap=""><!---->

</pre>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</body>
</html>
Jean Tiendeux
Le #5070421
Ce message est composé et au format MIME.

------=_NextPart_000_002B_01C82BDD.0ACAF8A0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

.... je te dois quelque chose ? ! !! Bravo pour ta compétence !

Juste un autre détail : en cas de refus d'envoi du mail il faut annuler 5 fois la boîte de dialogue (ou plutôt autant de fois qu'il y a d'alertes). Une idée ?

Cordialement, JT2.
"Corto" Bonjour Jean Tiendeux,
Effectivement la procédure actuelle envoie un email à chaque fois qu'elle rencontre "OK"
pour n'envoyer q'un email il suffit de remplacer la ligne :
If CHOIX <> vbCancel Then SendMailOutlook "", "Alerte heures supp."
par les lignes :
If CHOIX <> vbCancel Then
SendMailOutlook "", "Alerte heures supp."
Exit For
End If

Corto

Encore et toujours merci de ton travail. Tout marche nickel... cependant juste un détail :

lorsque je ferme le fichier, il m'est demandé 4 fois de confirmer l'envoi du mail et les 4 messages sont effectivement envoyés. Je pense qu'il envoie autant de messages qu'il y a d'occurrences d'alerte en B10:M10.

Un seul message (et donc une seule confirmation) me suffisant, y a-t-il donc un moyen pour en réduire le nombre (à 1 !) ?

Cordialement, JT2.
"Corto" Bonjour Jean Tiendeux,J'ai fait quelques modif et ca fonctionne maintenant chez moi. Dans ton fichier, j'ai dû modifier la référence vers Microsoft Outlook 12.0 Object Library en Microsoft Outlook 11.0 Object Library, car je n'ai pas Office 2007 mais je suis toujours en Office 2003. Si tu laisse comme cela, ça devrait fonctionner (les mails seront envoyés avec Office 2003).
je t'ai remis le fichier corrigé sur RS : http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html

Corto

Salut et encore merci pour tes infos Corto...

Seulement ça bloque. Il semble que ce soit l'expression ".[B10:M10]" qui gêne (4ème ligne). (J'ai modifié ton code pour que ça corresponde à la bonne ligne (10 au lieu de 11). Une idée ? Je mets ici en ligne la dernière version du fichier : http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html

Autre chose : à chaque fois que j'ouvre le fichier, excel m'indique que les macros sont désactivées, comme je l'ai défini dans les options. Compte tenu du nombre de postes impliqués par ce fichier, y aurait-il un moyen de contourner ce problème ? (pour les collègues qui auraient oublié d'activer les macros)...

Cordialement, JT2.
"Corto" Bonjour Jean Tiendeux,
Non, je n'avais pas vu ton fichier.
La première procédure n'est pas utile car les valeurs sont déjà testées par ta formule en ligne 11.
pour la deuxième (dans ThisWorkbook) ça donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au paramètre Cancel
'---| le classeur n'est pas fermé

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?", vbOKCancel, _
"Confirmation")
If CHOIX <> vbCancel Then SendMailOutlook "", _
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas détaillé la procédure qui envoie le mail car j'avais crû comprendre que tu en avait déjà une.
Sub SendMailOutlook(EMAIL, SUBJECT As String)
'---| Avant de lancer cette macro, Dans l'éditeur VBA: Faire |---
'---| Menu / Tools / Reference / Cocher "Microsoft Outlook Library" |---
Dim APPLI As New Outlook.Application

With APPLI.CreateItem(MAILItem)
.To = EMAIL
.Subject = SUBJECT
.Body = "Bonjour"
.Attachments.Add ThisWorkbook.Path & "" & ThisWorkbook.Name
..Send
End With
End Sub
le mail est envoyé sous le compte de celui qui exécute la procédure

Corto

Merci drôlement pour ta réponse ! J'ai pas encore testé mais ça soulève
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) mais les
données des heures sont en ligne (en non en colonnes). ça change quelque
chose ?

- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
dépassement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si >20 alors affiche "Alerte" sinon "OK"... Est-ce bien ça ?

- Questions subsidiaires : peut-on contrôler l'envoi du mail ? Par exemple,
je sais pas moi avec une boîte de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre méthode ?...) serait utilisée pour envoyer ce
mail ? (ça transite par la boîte d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je précise ma config : Excel 2003 sous XP sur un poste en réseau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la réception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie différente (sous Outlook 2003 aussi, mais avec une
adresse différente, le smtp est aussi : smtp.orange.fr)...


"Corto"
Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et à la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le numéro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(DécalageDeLaColonne) = (XXX > 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

Bonjour,

Je cherche à savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule dépasse un certain seuil.

C'est pour le boulot : je dois détecter les heures supplémentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salarié
a son classeur excel, avec le décompte manuel par mois (un mois par
feuille) et dans le même classeur (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) un
récapitulatif sur l'année. C'est dans ce récapitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (supérieur à 20 par exemple).

La question, c'est à quel moment le mail pourrait se déclencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir pénibles. Peut-on les
lancer à partir de la sauvegarde du fichier ou mieux à sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradué (genre alerte verte
pour >20, orange entre 20 et 40 et rouge pour >40...

Cdlt, JT2 (otez maj. si réponse perso).



------=_NextPart_000_002B_01C82BDD.0ACAF8A0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content=text/html;charset=iso-8859-1>
<BODY id=MailContainerBody
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 10pt; COLOR: #000000; PADDING-TOP: 15px; FONT-FAMILY: Arial"
text=#000000 bgColor=#ffffff leftMargin=0 topMargin=0 CanvasTabStop="true"
acc_role="text" name="Compose message area">
<DIV>&nbsp;</DIV>
<DIV>Juste un autre détail : en cas de refus d'envoi du mail il faut annuler 5
fois la boîte de dialogue&nbsp;(ou plutôt autant de fois qu'il y a d'alertes).
Une idée ?</DIV>
<DIV>&nbsp;</DIV>
<BLOCKQUOTE dir=ltr
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Corto" &lt;<A title=mailto:
href="mailto:"></A>&gt; a écrit dans
le message de groupe de discussion : <A
title=mailto:
href="mailto:"> 2MSFTNGP03.phx.gbl Jean Tiendeux,<BR>Effectivement la procédure actuelle envoie un email à chaque
fois qu'elle rencontre "OK"<BR>pour n'envoyer q'un email il suffit de
remplacer la ligne
:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If
CHOIX &lt;&gt; vbCancel Then SendMailOutlook <A class=moz-txt-link-rfc2396E
title=mailto:
href="mailto:">""</A> ,
"Alerte heures supp."<BR>par les lignes
:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If
CHOIX &lt;&gt; vbCancel
Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;&nbsp;&nbsp;&nbsp;
SendMailOutlook <A class=moz-txt-link-rfc2396E
title=mailto:
href="mailto:">""</A> ,
"Alerte heures
supp."<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;
Exit For<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
End If<BR><BR>Corto<BR><BR>Jean Tiendeux a écrit&nbsp;:
<DIV>Encore et toujours merci de ton travail. Tout marche nickel...
cependant juste un détail : </DIV>
<DIV>&nbsp;</DIV>
<DIV>lorsque je ferme le fichier, il m'est demandé 4 fois de confirmer
l'envoi du mail et&nbsp;les 4 messages sont effectivement envoyés. Je pense
qu'il envoie autant de messages qu'il y a d'occurrences d'alerte&nbsp;en
B10:M10.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Un seul message (et donc une seule confirmation) me suffisant, y a-t-il
donc un moyen pour en réduire le nombre (à 1 !) ?</DIV>
<DIV>&nbsp;</DIV>
<BLOCKQUOTE dir=ltr
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(0,0,0) 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Corto" &lt;<A title=mailto:
href="mailto:"
moz-do-not-send="true"></A>&gt; a écrit dans le
message de groupe de discussion : <A
title=mailto:
href="mailto:"
moz-do-not-send="true"> fonctionne maintenant chez moi. Dans ton fichier, j'ai dû modifier la
référence vers Microsoft Outlook 12.0 Object Library en Microsoft Outlook
11.0 Object Library, car je n'ai pas Office 2007 mais je suis toujours en
Office 2003. Si tu laisse comme cela, ça devrait fonctionner (les mails
seront envoyés avec Office 2003).<BR>je t'ai remis le fichier corrigé sur
RS : <A class=moz-txt-link-freetext
title=http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html
href="http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html"
moz-do-not-send="true">http://rapidshare.com/files/70741883/Base_horair e_2008.xls.html</A><BR><BR>Corto<BR><BR>Jean
Tiendeux a écrit&nbsp;:
<DIV>&nbsp;</DIV>
<DIV>Seulement ça bloque. Il semble que ce soit
l'expression&nbsp;".[B10:M10]" qui gêne (4ème ligne). &nbsp;(J'ai
modifié ton code pour que ça corresponde à la bonne ligne (10 au lieu de
11). Une idée ? Je mets ici en ligne la dernière version du fichier : <A
title=http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html
href="http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html"
target=_blank
moz-do-not-send="true">http://rapidshare.com/files/70643928/Base_horair e_2008.xls.html</A>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>Autre chose : à chaque fois que j'ouvre le fichier, excel m'indique
que les macros sont désactivées, comme je l'ai défini dans les options.
Compte tenu du nombre de postes&nbsp;impliqués par ce fichier, y
aurait-il un moyen de contourner ce problème ? (pour les collègues qui
auraient oublié d'activer les macros)...</DIV>
<DIV>&nbsp;</DIV>
<BLOCKQUOTE dir=ltr
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(0,0,0) 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Corto" &lt;<A title=mailto:
href="mailto:"
moz-do-not-send="true"></A>&gt; a écrit dans le
message de groupe de discussion : <A
title=mailto:e6a#
href="mailto:e6a%"
moz-do-not-send="true">e6a% Non, je n'avais pas vu ton fichier.
La première procédure n'est pas utile car les valeurs sont déjà testées par ta formule en ligne 11.
pour la deuxième (dans ThisWorkbook) ça donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au paramètre Cancel
'---| le classeur n'est pas fermé

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?", vbOKCancel, _
"Confirmation")
If CHOIX &lt;&gt; vbCancel Then SendMailOutlook "", _
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas détaillé la procédure qui envoie le mail car j'avais crû comprendre que tu en avait déjà une.
</PRE>Sub SendMailOutlook(EMAIL, SUBJECT As
String)<BR>'---|&nbsp;&nbsp;&nbsp; Avant de lancer cette macro, Dans
l'éditeur VBA: Faire&nbsp;&nbsp;&nbsp;&nbsp; |---<BR>'---| Menu /
Tools / Reference / Cocher "Microsoft Outlook Library"
|---<BR>&nbsp;&nbsp; Dim APPLI As New
Outlook.Application<BR><BR>&nbsp;&nbsp; With
APPLI.CreateItem(MAILItem)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .To =
EMAIL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Subject =
SUBJECT<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Body =
"Bonjour"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Attachments.Add
ThisWorkbook.Path &amp; "" &amp;
ThisWorkbook.Name<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
..Send<BR>&nbsp;&nbsp; End With<BR>End Sub<BR>le mail est envoyé sous
le compte de celui qui exécute la procédure<BR><BR>Corto<BR><BR>Jean
Tiendeux a écrit&nbsp;:
<BLOCKQUOTE cite=mid:471ef0a6$0$24996$
type="cite"><PRE wrap="">Merci drôlement pour ta réponse ! J'ai pas encore testé mais ça soulève
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
</PRE>
données des heures sont en ligne (en non en colonnes). ça change quelque
chose ?
</PRE></BLOCKQUOTE><PRE wrap=""><!---->
- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
dépassement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si &gt;20 alors affiche "Alerte" sinon "OK"... Est-ce bien ça ?

- Questions subsidiaires : peut-on contrôler l'envoi du mail ? Par exemple,
je sais pas moi avec une boîte de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre méthode ?...) serait utilisée pour envoyer ce
mail ? (ça transite par la boîte d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je précise ma config : Excel 2003 sous XP sur un poste en réseau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la réception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie différente (sous Outlook 2003 aussi, mais avec une
adresse différente, le smtp est aussi : smtp.orange.fr)...


"Corto" Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et à la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le numéro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(DécalageDeLaColonne) = (XXX &gt; 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

</PRE>
<BLOCKQUOTE type="cite"><PRE wrap="">Bonjour,

Je cherche à savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule dépasse un certain seuil.

C'est pour le boulot : je dois détecter les heures supplémentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salarié
a son classeur excel, avec le décompte manuel par mois (un mois par
feuille) et dans le même classeur (lien ici :
récapitulatif sur l'année. C'est dans ce récapitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (supérieur à 20 par exemple).

La question, c'est à quel moment le mail pourrait se déclencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir pénibles. Peut-on les
lancer à partir de la sauvegarde du fichier ou mieux à sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradué (genre alerte verte
pour &gt;20, orange entre 20 et 40 et rouge pour &gt;40...

Cdlt, JT2 (otez maj. si réponse perso).
</PRE></BLOCKQUOTE><PRE wrap=""><!---->

</PRE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></ BLOCKQUOTE></BODY></HTML>

------=_NextPart_000_002B_01C82BDD.0ACAF8A0--
Corto
Le #5068141
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Bonjour Jean Tiendeux,<br>
Tu ne me dois rien je fais &ccedil;a juste pour me faire mousser sur le forum.<br>
Pour ton nouveau probl&egrave;me, il suffit de descendre Exit For d'un If, &ccedil;a
doit donc donner :<br>
<br>
&nbsp;&nbsp;&nbsp; For Each XXX In ThisWorkbook.Sheets("2008").[B10:M10].Cells<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If XXX = "Alerte !" Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?",
vbOKCancel, _<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Confirmation")<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If CHOIX &lt;&gt; vbCancel Then&nbsp; SendMailOutlook
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br>
&nbsp;&nbsp;&nbsp; Next XXX<br>
<br>
Corto<br>
<br>
Jean Tiendeux a &eacute;crit&nbsp;:
<blockquote cite="mid:47437a5b$0$14874$"
type="cite">
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<div>&nbsp;</div>
<div>Juste un autre d&eacute;tail : en cas de refus d'envoi du mail il faut
annuler 5 fois la bo&icirc;te de dialogue&nbsp;(ou plut&ocirc;t autant de fois qu'il y a
d'alertes). Une id&eacute;e ?</div>
<div>&nbsp;</div>
<blockquote dir="ltr"
style="border-left: 2px solid rgb(0, 0, 0); padding-right: 0px; padding-left: 5px; margin-left: 5px; margin-right: 0px;">
<div>"Corto" &lt;<a moz-do-not-send="true"
title="mailto:" href="mailto:"></a>&gt;
a &eacute;crit dans le message de groupe de discussion : <a
moz-do-not-send="true"
title="mailto:"
href="mailto:"> Bonjour Jean Tiendeux,<br>
Effectivement la proc&eacute;dure actuelle envoie un email &agrave; chaque fois
qu'elle rencontre "OK"<br>
pour n'envoyer q'un email il suffit de remplacer la ligne :<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If CHOIX &lt;&gt; vbCancel Then SendMailOutlook <a
moz-do-not-send="true" class="moz-txt-link-rfc2396E"
title="mailto:"
href="mailto:">""</a>,
"Alerte heures supp."<br>
par les lignes :<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If CHOIX &lt;&gt; vbCancel Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SendMailOutlook <a moz-do-not-send="true"
class="moz-txt-link-rfc2396E" title="mailto:"
href="mailto:">""</a>,
"Alerte heures supp."<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br>
<br>
Corto<br>
<br>
Jean Tiendeux a &eacute;crit&nbsp;:
<blockquote cite="mid:47420447$0$29622$"
type="cite">
<div>Encore et toujours merci de ton travail. Tout marche
nickel... cependant juste un d&eacute;tail : </div>
<div>&nbsp;</div>
<div>lorsque je ferme le fichier, il m'est demand&eacute; 4 fois de
confirmer l'envoi du mail et&nbsp;les 4 messages sont effectivement envoy&eacute;s.
Je pense qu'il envoie autant de messages qu'il y a d'occurrences
d'alerte&nbsp;en B10:M10.</div>
<div>&nbsp;</div>
<div>Un seul message (et donc une seule confirmation) me
suffisant, y a-t-il donc un moyen pour en r&eacute;duire le nombre (&agrave; 1 !) ?</div>
<div>&nbsp;</div>
<blockquote dir="ltr"
style="border-left: 2px solid rgb(0, 0, 0); padding-right: 0px; padding-left: 5px; margin-left: 5px; margin-right: 0px;">
<div>"Corto" &lt;<a title="mailto:"
href="mailto:" moz-do-not-send="true"></a>&gt;
a &eacute;crit dans le message de groupe de discussion : <a
title="mailto:"
href="mailto:"
moz-do-not-send="true"> <pre wrap="">Bonjour Jean Tiendeux,</pre>
J'ai fait quelques modif et ca fonctionne maintenant chez moi. Dans ton
fichier, j'ai d&ucirc; modifier la r&eacute;f&eacute;rence vers Microsoft Outlook 12.0
Object Library en Microsoft Outlook 11.0 Object Library, car je n'ai
pas Office 2007 mais je suis toujours en Office 2003. Si tu laisse
comme cela, &ccedil;a devrait fonctionner (les mails seront envoy&eacute;s avec
Office 2003).<br>
je t'ai remis le fichier corrig&eacute; sur RS : <a
class="moz-txt-link-freetext"
title="http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html"
href="http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html"
moz-do-not-send="true">http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html</a><br>
<br>
Corto<br>
<br>
Jean Tiendeux a &eacute;crit&nbsp;:
<blockquote cite="mid:4740a442$0$12403$"
type="cite">
<div>&nbsp;</div>
<div>Seulement &ccedil;a bloque. Il semble que ce soit
l'expression&nbsp;".[B10:M10]" qui g&ecirc;ne (4&egrave;me ligne). &nbsp;(J'ai modifi&eacute; ton
code pour que &ccedil;a corresponde &agrave; la bonne ligne (10 au lieu de 11). Une
id&eacute;e ? Je mets ici en ligne la derni&egrave;re version du fichier : <a
title="http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html"
href="http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html"
target="_blank" moz-do-not-send="true">http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html</a>&nbsp;</div>
<div>&nbsp;</div>
<div>Autre chose : &agrave; chaque fois que j'ouvre le fichier,
excel m'indique que les macros sont d&eacute;sactiv&eacute;es, comme je l'ai d&eacute;fini
dans les options. Compte tenu du nombre de postes&nbsp;impliqu&eacute;s par ce
fichier, y aurait-il un moyen de contourner ce probl&egrave;me ? (pour les
coll&egrave;gues qui auraient oubli&eacute; d'activer les macros)...</div>
<div>&nbsp;</div>
<blockquote dir="ltr"
style="border-left: 2px solid rgb(0, 0, 0); padding-right: 0px; padding-left: 5px; margin-left: 5px; margin-right: 0px;">
<div>"Corto" &lt;<a title="mailto:"
href="mailto:" moz-do-not-send="true"></a>&gt;
a &eacute;crit dans le message de groupe de discussion : <a
title="mailto:e6a#"
href="mailto:e6a%"
moz-do-not-send="true">e6a% <pre wrap="">Bonjour Jean Tiendeux,
Non, je n'avais pas vu ton fichier.
La premi&egrave;re proc&eacute;dure n'est pas utile car les valeurs sont d&eacute;j&agrave; test&eacute;es par ta formule en ligne 11.
pour la deuxi&egrave;me (dans ThisWorkbook) &ccedil;a donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au param&egrave;tre Cancel
'---| le classeur n'est pas ferm&eacute;

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?", vbOKCancel, _
"Confirmation")
If CHOIX &lt;&gt; vbCancel Then SendMailOutlook "", _
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas d&eacute;taill&eacute; la proc&eacute;dure qui envoie le mail car j'avais cr&ucirc; comprendre que tu en avait d&eacute;j&agrave; une.
</pre>
Sub SendMailOutlook(EMAIL, SUBJECT As String)<br>
'---|&nbsp;&nbsp;&nbsp; Avant de lancer cette macro, Dans l'&eacute;diteur VBA: Faire&nbsp;&nbsp;&nbsp;&nbsp; |---<br>
'---| Menu / Tools / Reference / Cocher "Microsoft Outlook Library" |---<br>
&nbsp;&nbsp; Dim APPLI As New Outlook.Application<br>
<br>
&nbsp;&nbsp; With APPLI.CreateItem(MAILItem)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ..To = EMAIL<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Subject = SUBJECT<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Body = "Bonjour"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Attachments.Add ThisWorkbook.Path &amp; "" &amp;
ThisWorkbook.Name<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ..Send<br>
&nbsp;&nbsp; End With<br>
End Sub<br>
le mail est envoy&eacute; sous le compte de celui qui ex&eacute;cute la proc&eacute;dure<br>
<br>
Corto<br>
<br>
Jean Tiendeux a &eacute;crit&nbsp;:
<blockquote
cite="mid:471ef0a6$0$24996$" type="cite">
<pre wrap="">Merci dr&ocirc;lement pour ta r&eacute;ponse ! J'ai pas encore test&eacute; mais &ccedil;a soul&egrave;ve
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :
</pre>
<blockquote type="cite">
<pre wrap=""><a class="moz-txt-link-freetext"
title="http://rapidshare.com/files/64560606/horaires_test.xls.html"
href="http://rapidshare.com/files/64560606/horaires_test.xls.html"
moz-do-not-send="true">http://rapidshare.com/files/64560606/horaires_test.xls.html</a>) mais les
donn&eacute;es des heures sont en ligne (en non en colonnes). &ccedil;a change quelque
chose ?
</pre>
</blockquote>
<pre wrap=""><!---->
- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
d&eacute;passement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si &gt;20 alors affiche "Alerte" sinon "OK"... Est-ce bien &ccedil;a ?

- Questions subsidiaires : peut-on contr&ocirc;ler l'envoi du mail ? Par exemple,
je sais pas moi avec une bo&icirc;te de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre m&eacute;thode ?...) serait utilis&eacute;e pour envoyer ce
mail ? (&ccedil;a transite par la bo&icirc;te d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je pr&eacute;cise ma config : Excel 2003 sous XP sur un poste en r&eacute;seau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la r&eacute;ception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie diff&eacute;rente (sous Outlook 2003 aussi, mais avec une
adresse diff&eacute;rente, le smtp est aussi : smtp.orange.fr)...


"Corto" <a class="moz-txt-link-rfc2396E"
title="mailto:" href="mailto:"
moz-do-not-send="true">&lt;&gt;</a> a &eacute;crit dans le message de news:
<a class="moz-txt-link-abbreviated"
title="mailto:"
href="mailto:"
moz-do-not-send="true"></a>...
Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et &agrave; la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le num&eacute;ro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(D&eacute;calageDeLaColonne) = (XXX &gt; 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto

</pre>
<blockquote type="cite">
<pre wrap="">Bonjour,

Je cherche &agrave; savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule d&eacute;passe un certain seuil.

C'est pour le boulot : je dois d&eacute;tecter les heures suppl&eacute;mentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salari&eacute;
a son classeur excel, avec le d&eacute;compte manuel par mois (un mois par
feuille) et dans le m&ecirc;me classeur (lien ici :
<a class="moz-txt-link-freetext"
title="http://rapidshare.com/files/64560606/horaires_test.xls.html"
href="http://rapidshare.com/files/64560606/horaires_test.xls.html"
moz-do-not-send="true">http://rapidshare.com/files/64560606/horaires_test.xls.html</a>) un
r&eacute;capitulatif sur l'ann&eacute;e. C'est dans ce r&eacute;capitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (sup&eacute;rieur &agrave; 20 par exemple).

La question, c'est &agrave; quel moment le mail pourrait se d&eacute;clencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir p&eacute;nibles. Peut-on les
lancer &agrave; partir de la sauvegarde du fichier ou mieux &agrave; sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradu&eacute; (genre alerte verte
pour &gt;20, orange entre 20 et 40 et rouge pour &gt;40...

Cdlt, JT2 (otez maj. si r&eacute;ponse perso).
</pre>
</blockquote>
<pre wrap=""><!---->

</pre>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</body>
</html>
Daniel.C
Le #5234581
Bonjour.
Pour le second point, il y a effectivement un bug qui concerne les fonctions
de la macro complémentaire "utilitaires d'analyse" d'Excel 2003. A ma
connaissance, il n'y a pas de contournement sauf, peut-être avec une macro.
Cordialement.
Daniel

"Jean Tiendeux" de news: 47cfb554$0$2649$
Salut et encore merci à ceux qui m'ont aidé !

En fait je l'avais retrouvé mais après plusieurs essais infructueux, je me
disais qu'on avait modifié dû quelque chose.

Le problème vient en réalité du fait que le fichier est ouvert soit par
Excel 2003, soit par Excel 2007. Et quand il a été ouvert sous 2007, il
inscrit d'office dans les références l'objet « MS Outlook 12 » en
remplacement de MS Outlook 11 (puisqu'il a été créé sous Excel 2003). Et
lorsqu'on repassait sous Excel 2003, la macro buggait « erreur de
référence »).

A ce stade, j'ai réussi à bidouiller quelque chose pour intégrer sous 2007
le lien vers l'objet « MS Outllok 11 » à travers un chemin réseau. Et pareil
sous 2003 vers l'objet « MS Outlook 12 ». Pour l'instant ça a l'air de
marcher même si ça ne doit pas être très conforme. Si tu as mieux à proposer
je suis preneur !

Autre souci : mes formules qui s'affiche bien sous Excel 2003 ne s'affichent
pas bien sous Excel 2007 (ex : « =mois.decaler(A1;1) » a besoin d'être
validé pour afficher « Février 2008 ». Le mode de compatibilité (2007-2003)
est pourtant bien installé. Une idée ?

Cordialement, JT
"Jean Tiendeux" de news: 47ce7e2a$0$21717$
Salut,

Je reviens vers vous pour voir si vous auriez gardé une copie du fichier qui
marche ? Le temps a passé je sais et je m'aperçois aujourd'hui que le
fichier ne lance pas les mails sous Outlook ! Message d'erreur sous VB :
erreur de compilation, membre de méthode ou de données introuvable (les
données entre crochets *[B10:M10]* sont surlignées...

Je remets si besoin le fichier à dispo sur rapishare :
http://rapidshare.com/files/97191365/Base_horaire_2008_RS_original_avec_macros.xls.html

Cordialement, JT.

"Corto"
Bonjour Jean Tiendeux,
Effectivement la procédure actuelle envoie un email à chaque fois qu'elle
rencontre "OK"
pour n'envoyer q'un email il suffit de remplacer la ligne :
If CHOIX <> vbCancel Then SendMailOutlook
"", "Alerte heures supp."
par les lignes :
If CHOIX <> vbCancel Then
SendMailOutlook "", "Alerte heures
supp."
Exit For
End If

Corto

Encore et toujours merci de ton travail. Tout marche nickel... cependant
juste un détail :

lorsque je ferme le fichier, il m'est demandé 4 fois de confirmer l'envoi du
mail et les 4 messages sont effectivement envoyés. Je pense qu'il envoie
autant de messages qu'il y a d'occurrences d'alerte en B10:M10.

Un seul message (et donc une seule confirmation) me suffisant, y a-t-il donc
un moyen pour en réduire le nombre (à 1 !) ?

Cordialement, JT2.
"Corto" discussion :
Bonjour Jean Tiendeux,
J'ai fait quelques modif et ca fonctionne maintenant chez moi. Dans ton
fichier, j'ai dû modifier la référence vers Microsoft Outlook 12.0 Object
Library en Microsoft Outlook 11.0 Object Library, car je n'ai pas Office
2007 mais je suis toujours en Office 2003. Si tu laisse comme cela, ça
devrait fonctionner (les mails seront envoyés avec Office 2003).
je t'ai remis le fichier corrigé sur RS :
http://rapidshare.com/files/70741883/Base_horaire_2008.xls.html

Corto

Salut et encore merci pour tes infos Corto...

Seulement ça bloque. Il semble que ce soit l'expression ".[B10:M10]" qui
gêne (4ème ligne). (J'ai modifié ton code pour que ça corresponde à la
bonne ligne (10 au lieu de 11). Une idée ? Je mets ici en ligne la dernière
version du fichier :
http://rapidshare.com/files/70643928/Base_horaire_2008.xls.html

Autre chose : à chaque fois que j'ouvre le fichier, excel m'indique que les
macros sont désactivées, comme je l'ai défini dans les options. Compte tenu
du nombre de postes impliqués par ce fichier, y aurait-il un moyen de
contourner ce problème ? (pour les collègues qui auraient oublié d'activer
les macros)...

Cordialement, JT2.
"Corto" discussion : e6a%
Bonjour Jean Tiendeux,
Non, je n'avais pas vu ton fichier.
La première procédure n'est pas utile car les valeurs sont déjà testées par
ta formule en ligne 11.
pour la deuxième (dans ThisWorkbook) ça donne :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'---| Si l'on affecte la valeur 'True' au paramètre Cancel
'---| le classeur n'est pas fermé

For Each XXX In Me.[B11:M11]
If XXX = "Alerte !" Then
CHOIX = MsgBox("Voulez-vous vraiment envoyer ce mail ?",
vbOKCancel, _
"Confirmation")
If CHOIX <> vbCancel Then SendMailOutlook "",
_
"Alerte heures supp."
End If
Next XXX
End Sub

Je n'avais pas détaillé la procédure qui envoie le mail car j'avais crû
comprendre que tu en avait déjà une.

Sub SendMailOutlook(EMAIL, SUBJECT As String)
'---| Avant de lancer cette macro, Dans l'éditeur VBA: Faire |---
'---| Menu / Tools / Reference / Cocher "Microsoft Outlook Library" |---
Dim APPLI As New Outlook.Application

With APPLI.CreateItem(MAILItem)
.To = EMAIL
.Subject = SUBJECT
.Body = "Bonjour"
.Attachments.Add ThisWorkbook.Path & "" & ThisWorkbook.Name
..Send
End With
End Sub
le mail est envoyé sous le compte de celui qui exécute la procédure

Corto

Merci drôlement pour ta réponse ! J'ai pas encore testé mais ça soulève
quelques interrogations de prime abord :

- Je sais pas si tu as pu voir le fichier (lien ici :

http://rapidshare.com/files/64560606/horaires_test.xls.html) mais les
données des heures sont en ligne (en non en colonnes). ça change quelque
chose ?


- Que veux-tu dire avec vrai ? Si c'est pour notifier l'alerte de
dépassement, j'ai mis en place une cellule au-dessous avec une fonction de
condition (si >20 alors affiche "Alerte" sinon "OK"... Est-ce bien ça ?

- Questions subsidiaires : peut-on contrôler l'envoi du mail ? Par exemple,
je sais pas moi avec une boîte de dialogue qui s'ouvrirait en disant
"Voulez-vous vraiment envoyer ce mail ?" (OK/Annuler). De plus, quel compte
de messagerie (ou quelle autre méthode ?...) serait utilisée pour envoyer ce
mail ? (ça transite par la boîte d'envoi d'Outlook ?...)

Cordialement, JT2

PS : je précise ma config : Excel 2003 sous XP sur un poste en réseau qui
dispose d'un compte de messagerie sous Outlook (l'envoi et la réception des
messages se fait en automatique tous les quarts d'heure). Mais le fichier
excel en question est disponible et exploitable depuis d'autres postes qui
ont une messagerie différente (sous Outlook 2003 aussi, mais avec une
adresse différente, le smtp est aussi : smtp.orange.fr)...


"Corto"
Bonjour Jean Tiendeux,
Tu peux positionner des cellules avec VRAI pour envoyer et à la
fermeture du classeur envoyer les emails.
Dans la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' X est le numéro de la colonne avec les heures
If Target.Columns = X Then
For Each XXX In Intersect(Target, Me.Columns(X))
XXX.Offset(DécalageDeLaColonne) = (XXX > 20)
Next XXX
End If
End Sub

Dans ThisWorkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each XXX In CurrentRegion.Columns(NumeroDeColonne)
If XXX Then SendMailToResponsable
Next XXX
End Sub
Corto


Bonjour,

Je cherche à savoir s'il est possible d'envoyer un e-mail lorsqu'une
cellule dépasse un certain seuil.

C'est pour le boulot : je dois détecter les heures supplémentaires qui
"s'amoncellent" avant qu'il y en aient trop. Pour l'instant chaque salarié
a son classeur excel, avec le décompte manuel par mois (un mois par
feuille) et dans le même classeur (lien ici :
http://rapidshare.com/files/64560606/horaires_test.xls.html) un
récapitulatif sur l'année. C'est dans ce récapitulatif que je voudrais
informer le responsable d'exploitation d'un nombre d'heures suppl. trop
important (supérieur à 20 par exemple).

La question, c'est à quel moment le mail pourrait se déclencher ? Car, en
cas de mauvaise saisie, les mails pourraient devenir pénibles. Peut-on les
lancer à partir de la sauvegarde du fichier ou mieux à sa fermeture ?...

En bonus, si possible, avec un niveau d'alerte gradué (genre alerte verte
pour >20, orange entre 20 et 40 et rouge pour >40...

Cdlt, JT2 (otez maj. si réponse perso).
Publicité
Poster une réponse
Anonyme