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 :

Impossible de changer le Body d'un e-mail


Sujet :

VBA Outlook

  1. #1
    Rédacteur/Modérateur

    Impossible de changer le Body d'un e-mail
    Bonjour,

    J'ai fait une macro qui, sous certaines conditions, modifie l'e-mail en cours de rédaction : changement de destinataire, changement de signature et diverses modification sur le Body. Cette macro est appelée manuellement par un bouton ajouté sur la barre d'outils Nouveau Courrier, et tout fonctionne bien.

    J'essaie maintenant de faire un déclenchement automatique à chaque fois qu'on répond à un e-mail remplissant certaines conditions. Je me suis inspiré de cette discussion et le déclenchement se passe bien, ainsi que le changement de destinataire. Par contre, toutes les modifications que ma macro fait sur le Body sont ignorées, sans pour autant déclencher d'erreur. Je constate également que tout se passe en invisible, et que toute tentative de mettre un Display dans l'une ou l'autre macro déclenche une erreur d'exécution.

    J'ai l'impression que, d'une manière ou d'une autre, l'événement se déclenche trop tôt... Quelqu'un connaît-il une parade à ce problème ?

    Voici la partie pertinente de ma macro, telle qu'elle fonctionnait en manuel :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub ReponseManga()
    Dim M As MailItem
    Set M = Application.ActiveInspector.CurrentItem
    M.To = "nouveau destinataire"
    M.Recipients.ResolveAll
    M.Body = Replace(M.Body, "phrase à supprimer", "")
    End Sub


    Pour implémenter le déclenchement événementiel, j'ai mis ça 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
    Dim WithEvents objInspectors As Outlook.Inspectors
    Dim WithEvents objMailItem As Outlook.MailItem
     
    Private Sub Application_Startup()
        Initialize_Handler
    End Sub
     
    Sub Initialize_Handler()
        Set objInspectors = Application.Inspectors
    End Sub
     
    Private Sub objInspectors_NewInspector(ByVal Inspector As Inspector)
        If Inspector.CurrentItem.Class = olMail Then
            Set objMailItem = Inspector.CurrentItem
            If objMailItem.Sent = False Then
                If objMailItem.To Like "*critère*" Then               
                    ReponseManga objMailItem
                End If
            End If
        End If
    End Sub


    Et j'ai modifié le début de ma macro ainsi :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub ReponseManga(Optional M As MailItem)
    If M Is Nothing Then
        ' appel depuis la barre d'outils
        Set M = Application.ActiveInspector.CurrentItem
    End If
    'idem pour la suite
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  2. #2
    Expert éminent
    BOnjour,

    l'événement objInspectors_NewInspector, ne se déclenche pas toujours notamment quand tu fait une réponse inline.

    et aussi quand tu réponds de nouveau au même Email, il considère pas cela comme un nouvel inspector.

    Tu devrais utiliser Application_ItemSend

    ça fera les changement quand tu cliques sur envoyer , mais du coup tu ne vois pas les modif seleument dans les élément envoyés après.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    '---------------------------------------------------------------------------------------
    ' Procedure : Application_ItemSend
    ' Author    : OCTU
    '---------------------------------------------------------------------------------------
    '
        If Not Item.Class = olMail Then GoTo Fin
     
     
    call  ReponseManga(item)
     
     
    fin:
    end sub


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub ReponseManga(M As MailItem)
     
    M.to = "nouveau destinataire"
    M.Recipients.ResolveAll
    M.Body = Replace(M.Body, "phrase à supprimer", "")
    End Sub



    Bien que ta méthode fonctionne, en principe pour ajouter un destinataire on fait comme cela
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      'Ajout d'un destinataire principal
        Set dest = M.Recipients.Add("toto@toto.com")
        dest.Type = olTo    'olBCC, olCC, olOriginator ou olTo.
        dest.Resolve
     
        'Ajout d'un destinataire en copie
        Set dest = M.Recipients.Add("titi@toto.com")
        dest.Type = olCC    'olBCC, olCC, olOriginator ou olTo.
        dest.Resolve