Sub TraiterCourriersInBox()
'Définition des variables application
Dim OLmail As MailItem
Dim objOLApp As Outlook.Application 'Pour définir l'Application Outlook
Dim objNS As NameSpace 'Espace Outlook
Dim objInbox As Outlook.MAPIFolder 'Boîte de courriers Arrivée
Dim objDestFolder As Outlook.MAPIFolder 'Boîte d'archivage des courriers traités dans Excel
'Application Excel
Dim objXlApp As New Excel.Application 'Pour définir l'Application Excel
Dim objXlClas As Excel.Workbook 'Pour définir le Classeur Excel
'Définition des variables de travail
Dim an As Integer, I As Integer
Dim N As Long, a As Long, nbJours As Long, fr, v
Dim balOutlook As String
Dim an_arr As Integer
Dim incremen_arr As Variant
'Instanciation des variables application
Set objOLApp = Outlook.Application
Set objNS = objOLApp.GetNamespace("MAPI")
Set objInbox = objNS.GetDefaultFolder(olFolderInbox) 'Boîte de réception
v = Split(objInbox.FolderPath, "\")
balOutlook = v(UBound(v) - 1) 'découpage chemin Boîte de réception
Set objInbox = objNS.Folders(balOutlook).Folders("Prise en charge demande")
Set objDestFolder = objInbox.Folders("suivi demandes")
Set objXlClas = objXlApp.Workbooks.Open("W:\TestOutlook.xls")
'initialisation des variables de travail
an = Year(Date)
fr = Fer(an) 'calcul des jours fériés de an
N = CLng(Date) + 1
'Traitement courriers
For Each OLmail In objInbox.Items
With objXlClas.Worksheets(1) '1ère Feuille du classaur
a = .Range("A65536").End(-4162).row + 1
'déconposition de l'id arrivé
an_arr = Left(.Range("A" & a - 1).Value, 4)
an = Year(Date)
If an_arr < an Then
an_arr = Year(Date)
incremen_arr = "00"
Else
incremen_arr = Right(.Range("A" & a - 1), 3)
End If
incremen_arr = incremen_arr + 1
Do Until Len(incremen_arr) = 3
incremen_arr = "0" & incremen_arr
Loop
'incrémente la partie droite du num id
num_id_arrivé = an_arr & "-" & incremen_arr
.Range("A" & a).Value = num_id_arrivé
.Range("B" & a).Value = OLmail.CreationTime
.Range("C" & a).Value = Date
.Range("D" & a).Value = OLmail.SenderName
.Range("F" & a).Value = OLmail.Subject
N = AJouteJoursOuvrés(Date, 5, fr)
.Range("G" & a).Value = CDate(N)
N = AJouteJoursOuvrés(Date, 30, fr)
.Range("R" & a).Value = CDate(N)
OLmail.Move objDestFolder 'archivage
End With
Next OLmail
'On sauvegarde et ferme le fichier Excel
objXlClas.Save
objXlClas.Close 'True
'On quitte Excel
objXlApp.Quit
'On libère les ressources
Set objXlClas = Nothing
Set objXlApp = Nothing
End Sub
Function AJouteJoursOuvrés(ByVal d As Long, nbJours As Integer, Fer As Variant) As Long 'calcul ajout de jours ouvrés
Dim I As Integer, bAjoute As Boolean
For I = 1 To nbJours
d = d + 1
Do While Weekday(d) = 1 Or Weekday(d) = 7 'Not IsError(Application.Match(CLng(d), Fer, 0)) Or
d = d + 1
Loop
Next
AJouteJoursOuvrés = d
End Function
Function Paq(ByVal an As Integer) As Date
Paq = DateSerial(an, 3, 23) + ((2 * (an Mod 4) + (4 * (an Mod 7) + _
(6 * (((19 * (an Mod 19)) + 24) Mod 30) + 5))) Mod 7) + _
((19 * (an Mod 19) + 24) Mod 30) - 1
End Function
Function Fer(an%) 'liste de tous les jours fériés
Dim pq
pq = Paq(an)
Fer = Array(CLng(DateSerial(an, 1, 1)), CLng(DateSerial(an, 5, 1)), CLng(DateSerial(an, 5, 8)), CLng(DateSerial(an, 7, 14)), CLng(DateSerial(an, 8, 15)), CLng(DateSerial(an, 11, 1)), CLng(DateSerial(an, 11, 11)), CLng(DateSerial(an, 12, 25)), pq + 1, pq + 39, pq + 50)
End Function