1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
Private Sub Application_NewMail()
Dim myOlApp As New Outlook.Application
Dim myNamespace As Outlook.NameSpace
Dim myInbox As Outlook.Folder
Dim IncomingTicketsFolder As Outlook.Folder
Dim myDestFolder As Outlook.Folder
Dim myItems As Outlook.Items
Dim myItem As Object
Dim JrDebNuit As Date
Dim JrFinNuit As Date
Dim JrRecEmail As Date
Dim HrRecEmail
Dim HrRecEmailTemp As Date
Dim NouveauSujet As String
Dim subTemp As Variant
Dim Ticket
Set myNamespace = myOlApp.GetNamespace("MAPI")
Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox) 'je récupère ma boite de réception (par défaut)
Set IncomingTicketsFolder = myInbox.Folders("4 - IT HELPDESK") 'ça c'est le répertoire où mes mails sont envoyés via la règle Outlook
Set myItems = IncomingTicketsFolder.Items
Set myDestFolder = myInbox.Folders("temp_VBA") 'le répertoire où je déplace les mails traités (au final je les mettrais certainement à la poubelle
JrDebNuit = VBA.Format(Now - 1, "Short Date") 'la macro est pour une équipe qui travaille la nuit de 18H à 8H, donc on a deux jours sur la vacation
JrFinNuit = VBA.Format(Now, "Short Date") 'ça c'est le 2ème jour
For Each myItem In IncomingTicketsFolder.Items 'pour chaque mail dans le répertoire
JrRecEmail = VBA.Format(myItem.ReceivedTime, "Short Date") 'je récupère la date (sans l'heure) d'arrivée du mail
HrRecEmailTemp = VBA.Format(myItem.ReceivedTime, "HH:nn") 'je récupère l'heure d'arrivée du mail (mais au format am/pm)
HrRecEmail = Hour(HrRecEmailTemp) 'là je transforme les heures am/pm pour les avoir au format 24h, mais je ne prends que l'heure, pas les minutes
If JrRecEmail = JrFinNuit Then 'si le mail est reçu le jour même
If HrRecEmail > 17 Or HrRecEmail < 8 Then 'je vérifie que l'heure (format 24h) d'arrivée soit > 17h (j'aurai pu faire >= 18h) ou < 8h
subTemp = Split(myItem.Subject, ";") 'là c'est personnel, les sujets de mes mails arrivés dans une structure précise avec des infos séparées par ";"
Ticket = subTemp(3) 'le 3ème "morceau" du sujet du mail m'intéresse (pour l'afficher dans la pop-up), donc je le récupère
myItem.Move myDestFolder 'je déplace le mail dans la "poubelle" je le fais avant l'affichage sinon le mail se ferme dès que j'acquitte la pop-up
myItem.Display 'ouvre le mail et permet de forcer l'apparition du msg au 1er plan
MsgBox ("!!! TICKET A PRENDRE EN COMPTE !!!" & Chr(10) & Chr(10) _ 'Chr(10) pour aller à la ligne
& "N° de Ticket : " & Ticket & Chr(10) _
& "Date & heure d'arrivée : " & VBA.Format(myItem.ReceivedTime, "dd-mmm-yyyy HH:mm"))
' NouveauSujet = "!!! MAIL TRAITE !!! " & myItem.Subject 'je modifie le sujet du mail pour indiquer qu'il est traité (peut être inutile, à voir à l'utilisation)
' myItem.Subject = NouveauSujet 'c'est pour ça que je l'ai mis en commentaire pour l'instant
End If
ElseIf JrRecEmail = JrDebNuit Then 'alors là c'est pour sécuriser un max au cas où le mail arriverait à 23:59:59 et que la macro passe à 00:00:01 (ce n'est plus le même jour)
If HrRecEmail > 18 Then
subTemp = Split(myItem.Subject, ";")
Ticket = subTemp(3)
myItem.Move myDestFolder
myItem.Display
MsgBox ("!!! TICKET A PRENDRE EN COMPTE !!!" & Chr(10) & Chr(10) _
& "N° de Ticket : " & Ticket & Chr(10) _
& "Date & heure d'arrivée : " & VBA.Format(myItem.ReceivedTime, "dd-mmm-yyyy HH:mm"))
' NouveauSujet = "!!! MAIL TRAITE !!! " & myItem.Subject
' myItem.Subject = NouveauSujet
End If
End If
Set myItem = myItems.GetNext 'j'incrémente le mail
Next myItem 'pour passer au suivant
'dessous c'est ce que j'ai commencer à récupérer pour traiter le cas du dimanche (où là il faudra prendre la plage horaire complète de la journée)
'Check if Sunday
'If WkDay = 1 Then
' SendDate = DateAdd("d", 1, SendDate)
' SendNow = N
'End If
'
'
'La fonction WeekDay() donne le numéro du jour dans la semaine sachant que le dimanche porte le numéro 1
End Sub |
Partager