IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Outlook Discussion :

VBA nettoyage objets des mails


Sujet :

VBA Outlook

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Cadre en finance
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Cadre en finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut VBA nettoyage objets des mails
    Bonjour à tous,

    Suite au changement (ou à la mise en place) d'un nouvel anti-virus, tous les mails reçus de l'extérieur se voient ajouté le préfixe [EXT] en début d'objet ([EXT] Objet). La première fois ce n'est pas gênant mais après quelques échanges on se retrouve vite avec un [EXT] RE: [EXT] RE: [EXT] Objet. Au delà du fait que ça rend l'identification des mails difficiles, ça complexifie également l'application des règles et les recherches de mail (la fonction mails de cette conversation ne marche plus par exemple).

    Je me suis donc penché sur le sujet et j'ai réussi à faire une macro qui nettoie l'objet des mails que j'envoie. J'ai donc voulu m'en inspirer pour également nettoyer les objets des mails que je reçois mais là je bute sur des erreurs du type "Erreur de compilation, La déclaration de la procédure ne correspond pas à la description de l'évènement ou de la procédure du même nom". Mon code est le suivant :

    Code : 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
     
    'Clean subject of incoming mails
    'Test adapted from above
     
    Private Sub Application_NewMail(ByVal Item As Object, Cancel As Boolean)  'Integer instead of Boolean originaly
        'Dim MailItem As Object
        'Set MailItem = Outlook.MailItem
     
        Item.Subject = Replace(Item.Subject, "RE: ", "")
        Item.Subject = Replace(Item.Subject, "FW: ", "")
        Item.Subject = Replace(Item.Subject, "TR: ", "")
        Item.Subject = Replace(Item.Subject, "SV: ", "")
        Item.Subject = Replace(Item.Subject, "[EXT] ", "")
     
    '    If Left(Item.Subject, 4) = "RE: " Then Item.Subject = Right(Item.Subject, Len(Item.Subject) - 4)
    '    If Left(Item.Subject, 4) = "TR: " Then Item.Subject = Right(Item.Subject, Len(Item.Subject) - 4)
    '    If Left(Item.Subject, 4) = "FW: " Then Item.Subject = Right(Item.Subject, Len(Item.Subject) - 4)
    '    If Left(Item.Subject, 4) = "[EXT] " Then Item.Subject = Right(Item.Subject, Len(Item.Subject) - 6)
     
    End Sub
    Comme vous pouvez le voir, j'ai fait des essais que j'ai gardé en commentaire mais rien n'a fonctionné. N'étant pas un expert dans le domaine, je me disais que l'un d'entre vous a déjà rencontré ce problème ou saura m'indiquer où je me trompe.

    Merci d'avance pour votre aide !

    CHU

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 236
    Points : 469
    Points
    469
    Par défaut
    Bonjour c.h.u, le forum,

    Pour capter la réception d'un email, il faut utiliser l'évènement NewMailEx (documentation).
    Voici un exemple :
    Code : 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
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim l_o_item As Object
    Dim l_o_mailItem As Outlook.mailItem
     
        Set l_o_item = Application.Session.GetItemFromID(EntryIDCollection)
        If TypeOf l_o_item Is mailItem Then
            Set l_o_mailItem = l_o_item
            With l_o_mailItem
                .Subject = Replace(.Subject, "RE: ", "")
                .Subject = Replace(.Subject, "FW: ", "")
                .Subject = Replace(.Subject, "TR: ", "")
                .Subject = Replace(.Subject, "SV: ", "")
                .Subject = Replace(.Subject, "[EXT] ", "")
                .Save
            End With
        End If
     
        Set l_o_item = Nothing
        Set l_o_mailItem = Nothing
    End Sub
    A+

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Cadre en finance
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Cadre en finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour Mr Romain,

    Merci pour le tuyau, j'essaie ça dès demain

    Bonne soirée à tous !

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Cadre en finance
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Cadre en finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Ca a l'air de marcher au top ! Merci !

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Cadre en finance
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Cadre en finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour à tous,

    Dans la même veine que mon précédent post, est-il possible de nettoyer les objets des mails déjà présents dans les boîtes mails ?

    Le code précédent permet de nettoyer l'objet des mails rentrants mais je souhaiterais nettoyer ceux des mails déjà stockés.

    Merci d'avance pour votre aide.

    Guillaume

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 236
    Points : 469
    Points
    469
    Par défaut
    Bonjour c.h.u, le forum,

    est-il possible de nettoyer les objets des mails déjà présents dans les boîtes mails ?
    La proposition ci-dessous permet de nettoyer les mails présents dans la boite de réception :
    Code : 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
    Public Sub CleanInboxEmails()
    Dim l_o_fold As Outlook.Folder
    Dim l_o_item As Object
    Dim l_o_mailItem As Outlook.mailItem
     
        Set l_o_fold = Application.Session.GetDefaultFolder(olFolderInbox)
        For Each l_o_item In l_o_fold.Items
            If TypeOf l_o_item Is mailItem Then
                Set l_o_mailItem = l_o_item
                With l_o_mailItem
                    .Subject = Replace(.Subject, "RE: ", "")
                    .Subject = Replace(.Subject, "FW: ", "")
                    .Subject = Replace(.Subject, "TR: ", "")
                    .Subject = Replace(.Subject, "SV: ", "")
                    .Subject = Replace(.Subject, "[EXT] ", "")
                    .Save
                End With
            End If
        Next l_o_item
     
        Set l_o_fold = Nothing
        Set l_o_item = Nothing
        Set l_o_mailItem = Nothing
    End Sub
    S’il faut nettoyer les mails de tous les dossier et sous-dossiers, il faudra retoucher le code.

    A+

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Cadre en finance
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Cadre en finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci Mromain !

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Cadre en finance
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Cadre en finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonsoir Mromain,

    Petite question, je ne comprends pas car le code que tu m'as donné précédemment pour nettoyer l'objet des mails à l'arrivée marche très bien mais ne marche pas tout le temps (d'où ma précédente question). Aurais-tu une idée d'où ça peut venir ?

    Je me permets de remettre tout le code que j'ai dans "ThisOutlookSession"

    Code : 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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    'Option Explicit
     
    'Clean subject of mails incoming
    'https://www.developpez.net/forums/d2157789/logiciels/microsoft-office/outlook/vba-outlook/vba-nettoyage-objets-mails/
     
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim l_o_item As Object
    Dim l_o_mailItem As Outlook.mailItem
     
        Set l_o_item = Application.Session.GetItemFromID(EntryIDCollection)
        If TypeOf l_o_item Is mailItem Then
            Set l_o_mailItem = l_o_item
            With l_o_mailItem
                .Subject = Replace(.Subject, "[EXT] ", "")
                .Subject = Replace(.Subject, "AW: ", "")
                .Subject = Replace(.Subject, "FW: ", "")
                .Subject = Replace(.Subject, "FWD: ", "")
                .Subject = Replace(.Subject, "RE: ", "")
                .Subject = Replace(.Subject, "SV: ", "")
                .Subject = Replace(.Subject, "TR: ", "")
                '
                .Subject = Replace(.Subject, "[EXT]", "")
                .Subject = Replace(.Subject, "AW:", "")
                .Subject = Replace(.Subject, "FW:", "")
                .Subject = Replace(.Subject, "FWD:", "")
                .Subject = Replace(.Subject, "RE:", "")
                .Subject = Replace(.Subject, "SV:", "")
                .Subject = Replace(.Subject, "TR:", "")
                '
                .Subject = Replace(.Subject, "[EXT] ", "")
                .Subject = Replace(.Subject, "AW ", "")
                .Subject = Replace(.Subject, "FW ", "")
                .Subject = Replace(.Subject, "FWD ", "")
                '.Subject = Replace(.Subject, "RE ", "")
                .Subject = Replace(.Subject, "SV ", "")
                .Subject = Replace(.Subject, "TR ", "")
                '
     
                .Subject = Replace(.Subject, "[Ext] ", "")
                .Subject = Replace(.Subject, "Aw: ", "")
                .Subject = Replace(.Subject, "Fw: ", "")
                .Subject = Replace(.Subject, "Fwd: ", "")
                .Subject = Replace(.Subject, "Re: ", "")
                .Subject = Replace(.Subject, "Sv: ", "")
                .Subject = Replace(.Subject, "Tr: ", "")
                '
                .Subject = Replace(.Subject, "[Ext]", "")
                .Subject = Replace(.Subject, "Aw:", "")
                .Subject = Replace(.Subject, "Fw:", "")
                .Subject = Replace(.Subject, "Fwd:", "")
                .Subject = Replace(.Subject, "Re:", "")
                .Subject = Replace(.Subject, "Sv:", "")
                .Subject = Replace(.Subject, "Tr:", "")
                '
                .Subject = Replace(.Subject, "[Ext] ", "")
                .Subject = Replace(.Subject, "Aw ", "")
                .Subject = Replace(.Subject, "Fw ", "")
                .Subject = Replace(.Subject, "Fwd ", "")
                '.Subject = Replace(.Subject, "Re ", "")
                .Subject = Replace(.Subject, "Sv ", "")
                .Subject = Replace(.Subject, "Tr ", "")
                '
                .Save
            End With
        End If
     
        Set l_o_item = Nothing
        Set l_o_mailItem = Nothing
    End Sub
     
    'Clean subject of mails outgoing
    'From https://fr.extendoffice.com/documents/outlook/5120-outlook-remove-subject-prefixes.html
     
    Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    '
        RemovePrefixOut Item, "AW"
        RemovePrefixOut Item, "FW"
        RemovePrefixOut Item, "FWD"
        RemovePrefixOut Item, "RE"
        RemovePrefixOut Item, "SW"
        RemovePrefixOut Item, "TR"
    '
    End Sub
     
    Function RemovePrefixOut(Item As Object, Str As String)
    '
    Dim xSubject As String
    '
    If InStr(Item.Subject, Str) > 0 Then
        xSubject = Replace(Item.Subject, Str & ":", "", vbTextCompare)
        Item.Subject = Trim(xSubject)
        Item.Save
    End If
    '
    End Function

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 236
    Points : 469
    Points
    469
    Par défaut
    Bonjour c.h.u, le forum,

    Petite question, je ne comprends pas car le code que tu m'as donné précédemment pour nettoyer l'objet des mails à l'arrivée marche très bien mais ne marche pas tout le temps (d'où ma précédente question). Aurais-tu une idée d'où ça peut venir ?
    Difficile de répondre comme ça...

    Quel est le niveau de sécurité des macros sur ton Outlook ?
    Est-ce qu'à chaque démarrage d'Outlook il t'es demandé d'activer les macros ?

    Si tel est le cas, peut-être que les macros n'ont pas été activées lors de certaines sessions, et du coup, les mails reçus n'ont pas été traités.

    A+

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Cadre en finance
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Cadre en finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par mromain Voir le message
    Bonjour c.h.u, le forum,



    Difficile de répondre comme ça...

    Quel est le niveau de sécurité des macros sur ton Outlook ?
    Est-ce qu'à chaque démarrage d'Outlook il t'es demandé d'activer les macros ?

    Si tel est le cas, peut-être que les macros n'ont pas été activées lors de certaines sessions, et du coup, les mails reçus n'ont pas été traités.

    A+
    Bonjour à tous,

    Les macros sont sur notification pour toutes les macros et je les ai signées avec un certificat personnel. D'où mon étonnement.

    Est-ce que ça peut être l'option explicite ?

    Bonne journée et bonnes fêtes !

    CHU

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-MAC 2016] VBA Excel / Récupérer des mails OUTLOOK dans une boite mail qui n'est pas celle par défaut
    Par GregCompta dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/05/2018, 19h35
  2. Réponses: 1
    Dernier message: 22/02/2017, 13h07
  3. [OL-2010] Intégrer la date dans l'objet des mails reçus
    Par Brieuc AMC dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 22/08/2016, 12h58
  4. [XL-2003] Une question concernant mon module VBA pour envoi des mail en masse.
    Par dariyoosh dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/10/2010, 16h03
  5. [VBA-O] Contrôle des mails à leur arrivée
    Par amalane dans le forum VBA Outlook
    Réponses: 6
    Dernier message: 20/03/2007, 04h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo