Voir le flux RSS

Oliv-

Outlook lancer un traitement récursif sur les dossiers et sous dossiers.

Noter ce billet
par , 12/02/2016 à 15h10 (1143 Affichages)
Bonjour,
Une fonction récursive pour faire quelque chose dans chaque dossier, sur le dossier ou les éléments de ce dossier.

Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
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

Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
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

Envoyer le billet « Outlook lancer un traitement récursif sur les dossiers et sous dossiers. » dans le blog Viadeo Envoyer le billet « Outlook lancer un traitement récursif sur les dossiers et sous dossiers. » dans le blog Twitter Envoyer le billet « Outlook lancer un traitement récursif sur les dossiers et sous dossiers. » dans le blog Google Envoyer le billet « Outlook lancer un traitement récursif sur les dossiers et sous dossiers. » dans le blog Facebook Envoyer le billet « Outlook lancer un traitement récursif sur les dossiers et sous dossiers. » dans le blog Digg Envoyer le billet « Outlook lancer un traitement récursif sur les dossiers et sous dossiers. » dans le blog Delicious Envoyer le billet « Outlook lancer un traitement récursif sur les dossiers et sous dossiers. » dans le blog MySpace Envoyer le billet « Outlook lancer un traitement récursif sur les dossiers et sous dossiers. » dans le blog Yahoo

Mis à jour 21/04/2016 à 18h07 par Oliv-

Catégories
vba outlook

Commentaires

  1. Avatar de Bouletinos
    • |
    • permalink
    Bonjour,

    Quel est l'avantage de cette procédure comparée à celle de Sue Mosher (http://www.outlookcode.com/codedetail.aspx?id=628) ?

    Je ne vois pas la subtilité...

    Merci
  2. Avatar de Oliv-
    • |
    • permalink
    Citation Envoyé par Bouletinos
    Bonjour,

    Quel est l'avantage de cette procédure comparée à celle de Sue Mosher (http://www.outlookcode.com/codedetail.aspx?id=628) ?

    Je ne vois pas la subtilité...

    Merci
    Bonjour,
    Le code initial est effectivement celui de Sue Mosher, c'est un exemple plus complet, avec comment le lancer et comment traiter une action sur un Item.

    S'il y a subtilité, ce serait dans l'utilisation de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = StartFolder.Items.Count To 1 step -1
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each objItem In StartFolder.Items
    ce qui permet de supprimer des éléments en n'en zappant aucun.
  3. Avatar de Natach87
    • |
    • permalink
    Bonjour Oliv,

    J'ai bien aimé la deuxième méthode présentée par ton billet, j'aimerai savoir si il est possible de vérifier si les mails envoyés ont été traités par les destinataires ?

    Je sais que c'est faisable en comparant le résultat de l'analyse de la boîte de réception et la boîte d'envoi mais c'est long !!

    Peux tu m'aider ??

    Merci et bravo pour ton travail.