Mise en forme conditionnelle avec envoi de courriel possible ?
Bonjour,
Je suis plutôt novice dans la maitrise d'excel mais je bricole des macros ou des formules au besoin
J'essaie d'améliorer certains de nos indicateurs et méthode d'alerte dans une des entreprises ou j'interviens...
J'ai un tableau avec des dates et une mise en forme conditionnel qui va faire passer la case en rouge à moins de 6 mois de la date en question, ce qui nous indique visuellement un point de vigilance.
Mais je ne sais pas si c'est possible...? Serait-il possible que cela soit accompagné d'une méthode d'alerte comme l'envoi d'un courriel à une personne x quand la case passe en rouge.
Ou si vous avez d'autres suggestions.
Merci par avance.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Il n'est pas possible de déclencher un courriel via une mise en forme conditionnelle.
Il faut retester dans une procédure "Sub" les conditions de mise en forme pour l'envoi du courriel.
D'accord, mais est-il possible de déclencher un envoi unique de courriel qui serait conditionné par le passage de la case en rouge ?
Dès que la case passerait en rouge, dans l'idéal j'aimerais qu'un mail soit envoyé à une adresse mail définie avec rappel du nom correspondant à la cellule A23 (c'est un exemple en imaginant que les noms des différentes personnes soit en colonne A) ?
Il faudrait passer par l'onglet Développeur et créer un code pour le document dans son ensemble selon vous ?
et quelle serait un exemple de contenu de ce type de codification ?
Merci.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
J'ai trouvé un exemple de code sur ce même forum mais apparemment conditionné par une date (finalement la mise en forme conditionnelle est conditionnée par la date)
Voici le code potentiel:
Sub EnvoiSimple()
'déclaration des variables
Dim OutApp As Object
Dim OutMail As Object
'
DerL = Range("A" & Rows.Count).End(xlUp).Row
corps = ""
entete = " Date " & " EAN " & " Qté " & " Intitulé" & Chr(13)
For i = 2 To DerL
If ThisWorkbook.Sheets("Feuil2").Range("F" & i) = "1" Then
corps = corps & ThisWorkbook.Sheets("Feuil2").Range("C" & i).Value & " - " _
& ThisWorkbook.Sheets("Feuil2").Range("A" & i).Value & " - " _
& ThisWorkbook.Sheets("Feuil2").Range("D" & i).Value & " - " _
& ThisWorkbook.Sheets("Feuil2").Range("B" & i).Value & Chr(13)
End If
Next i
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
'destinataires
'.From = "Essai from"
'.To = ThisWorkbook.Sheets("Feuil2").Range("L1").Value
.To = "monmail@gmail.com" & ";" & "mailboss@free.fr"
'.CC = ThisWorkbook.Sheets("Envoi Mail").Range("B3").Value
'.BCC = ""
'objet du mail
.Subject = "Alerte produit presque périmés"
' corps du message
.Body = entete & corps
' fichier en pièce jointe
'Feuile de calcul
'.Attachments.Add ActiveWorkbook.FullName
'Fichier du disque dur
'.Attachments.Add "C:\****\****\****\**\NomFichier.Ext"
'Ou
'.Attachments.Add ThisWorkbook.Sheets("Feuil1").Range("H20").Value
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
'fermer le classeur à la fin
'ThisWorkbook.Close
End Sub
'
Est-ce que je pourrais utiliser ce code en changeant évidement les paramètres selon mon contexte de travail ?...
J'ai un peu de mal à identifier dans ce code que devrais-je remplacer par contre pour conditionner l'envoi via la couleur de la cellule...
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Sans un tableau exemple de votre problème, je vous donne quelques conseils de base :
1- transformer votre tableau en objet tableau (menu Insertion --> bouton Tableau), ce qui simplifiera le code.
2 - créer un module d'envoi de mail avec les paramètres nécessaires, exemple :
Sub envoi_mail(ByVal destinataire_A As String, ByVal objet As String, ByVal html_texte As String, ByVal erreur As Boolean, Optional ByVal destinataire_CC As Variant, Optional pièce_jointe As Variant)
Dim olk As Object, Email As Object
On Error Resume Next
erreur = False
'Assignation de l'application Outlook et de l'objet Email
Set olk = CreateObject("outlook.application")
Set Email = olk.CreateItem(0)
With Email
'....... remplissage objet, message, destinataire_A, et destinataire_CC + pièce jointe si présents
.Subject = objet
.HTMLBody = html_texte
.to = destinataire_A
If Not IsMissing(destinataire_CC) Then .CC = destinataire_CC
If Not IsMissing(pièce_jointe) Then .Attachments.Add pièce_jointe
'....... envoie le message
.Send
If Err.Number <> 0 Then erreur = True
End With
'Désassignation objets
Set olk = Nothing
Set Email = Nothing
End Sub3- utiliser la procédure événementielle d'ouverture de votre classeur pour appeler la procédure d'envoi du mail selon condition de date
Private Sub Workbook_Open()
'// boucle sur vos dates d'alerte
'si une date d'alerte remplit la condition de passage au rouge, alors :
Call envoi_mail (paramètres)
End SubMerci Thev pour ces précisions pointues
Bonjour.
Je suis dans un cas un peu simailaire où il faudrait que l'envoi de mail se fasse par dépassement d'une valeur dans une colonne et par copie de la ligne de cette valeur (pour avoir les infos correspondantes).
Jusqu'à présent j'ai ce qu'il faut mais je suis obligé de rentrer manuellement mon range.