par , 12/02/2016 à 16h10 (3077 Affichages)
Bonjour,
Une fonction récursive pour faire quelque chose dans chaque dossier, sur le dossier ou les éléments de ce dossier.
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
| Option Explicit
Sub Lance_Traitement()
'---------------------------------------------------------------------------------------
' Procedure : Lance_Traitement
' Author : Oliv
' Date : 12/02/2016
' Purpose :
'---------------------------------------------------------------------------------------
'
Dim OL As Outlook.Application
Dim olNS As Outlook.NameSpace
Dim olFolder As Outlook.Folder
Set OL = Outlook.Application
Set olNS = OL.GetNamespace("MAPI")
'soit on connait le dossier
'Set olFolder = olNS.GetDefaultFolder(olFolderInbox).folders
'soit on le choisi
Set olFolder = olNS.PickFolder
Call ProcessFolders(olFolder, True)
MsgBox "Traitement terminé"
End Sub
Sub ProcessFolders(StartFolder As Outlook.MAPIFolder, SubFolder As Boolean)
'---------------------------------------------------------------------------------------
' Procedure : ProcessFolder
' Author : Oliv'
' Date : 12/02/2016
' Purpose : Traitement récursif sur les dossiers OUTLOOK
'---------------------------------------------------------------------------------------
'
Dim objFolder As Outlook.MAPIFolder
Dim objitem As Object
'Dim objItem As Object
On Error Resume Next
' do something specific with this folder
Debug.Print StartFolder.FolderPath, StartFolder.Items.Count
Debug.Print
If StartFolder.DefaultItemType = olMailItem Then
' ICI LE TRAITEMENT POUR CHAQUE DOSSIER
' Call ProcessThisFolder(StartFolder)
End If
' process all the items in this folder
'ICI LE TRAITEMENT POUR TOUS LES ELEMENTS DU DOSSIER
Dim i
For i = StartFolder.Items.Count To 1 step -1
Set objitem = StartFolder.Items(i)
Call ProcessThisItem(objitem)
Next i
' process all the subfolders of this folder
'on traite tous les sous dossiers
If SubFolder Then
For Each objFolder In StartFolder.folders
Call ProcessFolders(objFolder, SubFolder)
Next
End If
Set objFolder = Nothing
End Sub |
et le traitement du mail
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
Sub ProcessThisItem(objitem As Object)
'---------------------------------------------------------------------------------------
' Procedure : ProcessThisItem
' Author : Oliv
' Date : 12/02/2016
' Purpose :
'---------------------------------------------------------------------------------------
'
If objitem.Class = olMail Then
Dim MyMail As Outlook.MailItem
Set MyMail = objitem
'ici le code
End If
End Sub |