Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modifier le contenu d'un mail reçu via VBA

23 réponses
Avatar
Fabrice N.
Bonjour à tous,

Voilà mon idée...
Sous outlook 2003, je voudrais créer une macro que je déclencherais
depuis un mail ouvert ( maintenant je sais faire ;-)... merci Géo )
pour supprimer les PJ et ajouter le nom de ces PJ dans le texte du
message afin de garder l'info et gagner de la place dans ma boîte...
Le beurre, l'argent du beurre,... ;-)

Là où j'ai un doute, c'est pour ajouter le nom des PJ dans le message.
Pour le texte brut, ça doit aller, mais pour un message en HTML,
j'aurais besoin de quelque tuyau.

De ce que j'ai vu, c'est le Mail.BodyFormat qui me permettra de
connaître le format du mail en question et c'est le Mail.HTMLBody qu'il
faudra modifier...
Mais au stade où j'en suis, j'ai l'impression qu'il faut décortiquer ce
que je récupère pour aller intégrer ça après les premiers flag...

Je cherche juste à ajouter un peu de texte en tout début de message ou
tout à la fin avec une police et une couleur particulière...
Je suis obligé d'en passer par là ou il y a plus simple ?

Merci d'avance pour vos conseils...

10 réponses

1 2 3
Avatar
Oliv'
*Fabrice N." <"f.nebbia" avec l'@ "technicn.com <"f.nebbia" avec l'@
"technicn.com"> que je salue a écrit *:
Bonjour Oliv',

D'ailleurs je n'ai pas d'alerte avec ton code !!!


Ah bon ! ? Alors là, je suis surpris... t'as pas une idée de ce qui
peut me manquer ? J'ai pourtant signée la macro...


Non suis parti d'un fichier vide

Sinon ca me plait bien !! le résultat est beaucoup plus beau !


Ravis que ça te plaise ... ;-)

Si on veut être plus carré avec le HTML il faudrait faire

Courrier.HTMLBody = Replace(Courrier.HTMLBody, "<BODY>", "<BODY><font
style='font-family: Arial ;font-size: 8pt ;color:#808080;font-style:
italic;'>" & NomsPJ & "</font><BR>" _
& "<font style='font-family: Arial ;font-size: 8pt
;color:#808080;font-style: italic;'>" & String(NbTiret, "-") &
"</font><BR><BR>")
qu'en penses tu ?


J'en penses que tu es plus malin que moi.
J'y ai pensé à cette histoire de code HTML et j'étais partie dans
l'idée de faire un Instr pour repérer la balise et intercaler mes
lignes à la bonne position.
Ton idée de Replace me plait beaucoup plus... ;-)
Si tu me l'autorise, je rajoute ça sans attendre dans ma macro...
Regarde le code que j'ai modifié j'ai ajouté :

-une demande de confirmation au lancement.
-une demande de suppression des éléments incorporés.


Autre question, est-ce qu'il existe quelque chose qui permette de
rajouter les réferences automatiquement via la macro, histoire de ne
pas l'oublier ?


Tu parles de CDO ? Oui cela s'appelle du late binding (déclaration tardive)
tu dois déclarer des objets et utiliser les valeurs des constantes
exemple 6 au lieu de vbyes.

J'avais une doc la dessus mais regarde ici
http://faq.vb.free.fr/index.php?question4
sinon en anglais
http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm
ou là
http://www.dicks-clicks.com/excel/olBinding.htm


adaptation de ton code :

Function TypePJ(ByVal strEntryID As String, attindex As Integer) As Variant
' Ecrit par Olivier CATTEAU
' Nécessite la référence à la librairie Microsoft CDO

' Le retour est <>"" si la PJ est la PJ zest un objet inséré dans le mail
HTML

Dim oSession As MAPI.Session
' CDO objects
Dim oMsg As MAPI.Message
Dim oAttachs As MAPI.Attachments
Dim oAttach As MAPI.Attachment

' initialize CDO session
On Error Resume Next
Set oSession = CreateObject("MAPI.Session")
oSession.Logon "", "", False, False

' get the message created earlier
Set oMsg = oSession.GetMessage(strEntryID)
' set properties of the attached graphic that make
' it embedded and give it an ID for use in an <IMG> tag
Set oAttachs = oMsg.Attachments
Set oAttach = oAttachs.Item(attindex)
Dim strCID As String
strCID = oAttach.Fields(&H3712001E)

TypePJ = strCID
Set oMsg = Nothing
oSession.Logoff
Set oSession = Nothing

End Function




'*************** Et la procédure à lancer depuis le mail ouvert
Public Sub Suppression_PJ()
' Ecrit par Fabrice NEBBIA
' Grace au travail de Géo, Anacoluthe, Isabelle Prawitz et Olivier CATTEAU

' Supprime les PJ du mail actif et insère le nom des PJ dans le corps du
message

Dim Courrier As MailItem
Dim NomsPJ As String

Dim NbPJ As Integer
Dim i As Integer
Dim PJ As Attachment
Dim Separateur As Variant
Dim NbTiret As Integer

If Application.ActiveInspector Is Nothing Then Exit Sub

If MsgBox("Cette macro va supprimer les pièces jointes du mail et les
remplacer par leur nom", _
vbYesNo + vbQuestion, "Etes vous sûr de vouloir exécuter cette macro ?") =
vbNo Then Exit Sub

Set Courrier = ActiveInspector.CurrentItem
If Courrier Is Nothing Then Exit Sub

Select Case Courrier.BodyFormat
Case olFormatHTML:
Separateur = "<BR>"
NbTiret = 45
Case olFormatPlain:
Separateur = Chr(10)
NbTiret = 35
Case Else
Separateur = " - "
NbTiret = 50
End Select

NbPJ = Courrier.Attachments.Count
If NbPJ = 0 Then
MsgBox "Le messages en cours ne contient pas de pièce jointe"
Exit Sub
End If

NomsPJ = IIf(NbPJ = 1, "Pièce jointe", "Pièces jointes") & " du message
initial : " & Separateur & String(NbTiret, "-")

For i = NbPJ To 1 Step -1
Set PJ = Courrier.Attachments(i)
PJType = TypePJ(Courrier.EntryID, PJ.Index)
If PJType = "" Then
NomsPJ = NomsPJ & Separateur & "- " & PJ.FileName
PJ.Delete
Else
If MsgBox(PJ.FileName & ": est une image ou un élément incorporé
dans le corps du mail", vbYesNo, "Supprimer cette élément ?") = vbYes Then
NomsPJ = NomsPJ & Separateur & "- " & PJ.FileName &
"(incorporé)"
PJ.Delete
End If
End If

Next

Select Case Courrier.BodyFormat
Case olFormatHTML:
Courrier.HTMLBody = Replace(Courrier.HTMLBody, "<BODY>",
"<BODY><font style='font-family: Arial ;font-size: 8pt
;color:#808080;font-style: italic;'>" & NomsPJ & "</font><BR>" _
& "<font style='font-family: Arial ;font-size: 8pt
;color:#808080;font-style: italic;'>" & String(NbTiret, "-") &
"</font><BR><BR>")

Case Else
Courrier.Body = NomsPJ & Chr(10) & String(NbTiret, "-") &
Chr(10) & Chr(10) & Courrier.Body

End Select


' A activer pour enregistrer automatiquement les modifs
'Courrier.Save


End Sub


Avatar
Fabrice N.
Bonjour Oliv',

Non suis parti d'un fichier vide


Tu veux dire un fichier OTM vide ?


Regarde le code que j'ai modifié


Merci pour ton aide, mais dans mon cas, je préfère laisser les objets
incorporés à leur place. Pour ce qui est de la confirmation en début,
je n'enregistre pas le mail dans la macro, donc la demande de
confirmation d'enrigstrement à la fermeture du mail me semble
suffisant...

Par contre, le replace me pose un petit soucis...
Je l'ai testé sur un mail reçu en HTML et écrit apparemment avec word
2007. Au final, avec le replace, la mention des pièces jointes à été se
mettre je ne sais où... tout ce que je sais, c'est qu'elle n'est plus
affichée dans le mail...


Tu parles de CDO ? Oui cela s'appelle du late binding (déclaration tardive)
tu dois déclarer des objets et utiliser les valeurs des constantes
exemple 6 au lieu de vbyes.

J'avais une doc la dessus mais regarde ici
http://faq.vb.free.fr/index.php?question4
sinon en anglais
http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm
ou là
http://www.dicks-clicks.com/excel/olBinding.htm


OK, merci, j'irais y jeter un oeil...

adaptation de ton code :
Merci beaucoup pour ton aide...


Par contre, 2 questions :
- Je ne vois pas de changement dans TypePJ, tu as modifié quelque chose
?
- Je vois aussi que tu as fait sauter ma fonction MailActif... c'est
parce qu'elle a un défaut ?

Avatar
Oliv'
*Fabrice N." <"fabrice.n.surlenet <"fabrice.n.surlenet" avec l'@ chez free>
que je salue a écrit *:
Bonjour Oliv',

Non suis parti d'un fichier vide


Tu veux dire un fichier OTM vide ?


yes ca permet de vérifier si tous les conditions sont réunies pour que le
code marche bien , genre les fonctions, les références etc...



Regarde le code que j'ai modifié


Merci pour ton aide, mais dans mon cas, je préfère laisser les objets
incorporés à leur place. Pour ce qui est de la confirmation en début,
je n'enregistre pas le mail dans la macro, donc la demande de
confirmation d'enrigstrement à la fermeture du mail me semble
suffisant...
Oui effectivement sauf pour les babaches ;-)))


Par contre, le replace me pose un petit soucis...
Je l'ai testé sur un mail reçu en HTML et écrit apparemment avec word
2007. Au final, avec le replace, la mention des pièces jointes à été
se mettre je ne sais où... tout ce que je sais, c'est qu'elle n'est
plus affichée dans le mail...


J'ai pas 2007 mais il faut editer la source pour voir.


Tu parles de CDO ? Oui cela s'appelle du late binding (déclaration
tardive) tu dois déclarer des objets et utiliser les valeurs des
constantes exemple 6 au lieu de vbyes.

J'avais une doc la dessus mais regarde ici
http://faq.vb.free.fr/index.php?question4
sinon en anglais
http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm
ou là
http://www.dicks-clicks.com/excel/olBinding.htm


OK, merci, j'irais y jeter un oeil...


Mieux vaut utiliser les 2

adaptation de ton code :
Merci beaucoup pour ton aide...


Par contre, 2 questions :
- Je ne vois pas de changement dans TypePJ, tu as modifié quelque
chose ?
non

- Je vois aussi que tu as fait sauter ma fonction MailActif... c'est
parce qu'elle a un défaut ?


Non plus, c'est juste pour allèger le code.


Avatar
Fabrice N.
Bonjour Oliv',

yes ca permet de vérifier si tous les conditions sont réunies pour que le
code marche bien , genre les fonctions, les références etc...


OK, je vais eessayer pour voir si j'ai la même question...

Oui effectivement sauf pour les babaches ;-)))
Sans commentaire... ;-)


Non plus, c'est juste pour allèger le code.
Comment ça alléger ... ? Qui est-cze que tu traite de gros... ;-)


En, fait, c'est vrai que pour une fonction, ça n'a pas d'intérêt.
Par contre, si je développe d'autres fonctions par la suite, ça évitera
de remettre les mêmes instructions à chaque fois...

Avatar
Fabrice N.
Bonjour Oliv',

Me revoilà !

Non suis parti d'un fichier vide


Tu veux dire un fichier OTM vide ?


yes ca permet de vérifier si tous les conditions sont réunies pour que le
code marche bien , genre les fonctions, les références etc...


J'ai fait l'essai. Nouveau fichier OTM, j'ai recollé mon code dedans,
j'ai ajouté la référence CDO...
et là, oh miracle... il n'y a pas eu de miracle... !
J'ai toujours un message me disant qu'un programme essai d'accèder à
mes adresse et me demande de l'autoriqser ou pas... enfin tu connais la
chanson... ;-)

Donc je ne comprends pas pourquoi pour toi, il n'y a pas cette
alerte... une idée ?

J'avais une doc la dessus mais regarde ici
http://faq.vb.free.fr/index.php?question4
sinon en anglais
http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm
ou là
http://www.dicks-clicks.com/excel/olBinding.htm





J'ai jeté un oeil et ai compris le principe, le late binding,
visiblement, ça risque d'être un peu plus lent si j'ajoute beaucoup de
fonction avec cette méthode... je vais y réfléchir, mais pour
l'instant, je crois que je vais rester sur la première méthode...
En plus, si j'ai bien compris, les références sont stockés dans le
fichier otm donc si j'utilise ta méthode pour répliquer ce fichier sur
mes postes, il n'y a pas de raison qu'il manque une référence...

Mieux vaut utiliser les 2
Par contre, là je n'ai pas compris. les 2 quoi ?


Par contre, pour la demande de confirmation avant de lancer la manip,
je crois que tu as raison, mieux vaut leur demander confirmation avant
car ils seraient capable d'enregistrer le messages sans faire
attention...

A+



Avatar
Geo

J'ai fait l'essai. Nouveau fichier OTM, j'ai recollé mon code dedans, j'ai ajouté la
référence CDO...


je ne sais pas s'il n'y a pas une histoire de version de CDO, il
faudrait utiliser la 1.21 il me semble avoir lu qqch. là-dessus.

--
A+

Avatar
Fabrice N.
Bonjour Geo,

je ne sais pas s'il n'y a pas une histoire de version de CDO, il faudrait
utiliser la 1.21 il me semble avoir lu qqch. là-dessus.
Ben c'est celle-là que j'ai référencé...


Dans le doute j'ai quand même essaye avec le Microsoft CDO For Windows
2000 Library, mais dans ce cas, je me fait jeter, apparemment il n'y a
pas tout ce qu'il faut pour mon code...

Avatar
Geo

je ne sais pas s'il n'y a pas une histoire de version de CDO, il faudrait utiliser la
1.21 il me semble avoir lu qqch. là-dessus.
Ben c'est celle-là que j'ai référencé...


Dans le doute j'ai quand même essaye avec le Microsoft CDO For Windows 2000 Library,
mais dans ce cas, je me fait jeter, apparemment il n'y a pas tout ce qu'il faut pour
mon code...


Reste plus que Redemption pour te sauver (ouaf !)
Mais j'ai pas encore compris comment s'en servir.
Il manque un mode d'emploi ou tout au moins un modèle objet en
français.

Dernière idée, Oliv' est peut-être en version 2007 ?


--
A+


Avatar
Fabrice N.
Bonjour Geo,

Reste plus que Redemption pour te sauver (ouaf !)
Mais j'ai pas encore compris comment s'en servir.
Il manque un mode d'emploi ou tout au moins un modèle objet en français.
Pourquoi, tu crois que redemption peut éviter le message d'alerte ?

J4ai pas encore regardé ça, mais ajouter des choses ne me plait qu'à
moitié... c'est vrai que ça à l'air intéressant et plein de chose
utile, mais ça fait un truc de plus à prévoir pour que ce soit utile
pour tous...
Autre remarque/question, ne faut-il pas les droti d'accès adminitrateur
pour l'installer... tu vois ce que je veux dire... ;-)

Dernière idée, Oliv' est peut-être en version 2007 ?
Ah toi t'as lu les post en travers.... ;-)


Oliv' a dit plus haut qu'il n'avait pas cette version...

Avatar
Oliv'
*Fabrice N." <"fabrice.n.surlenet <"fabrice.n.surlenet" avec l'@ chez free>
que je salue a écrit *:
Bonjour Geo,

Reste plus que Redemption pour te sauver (ouaf !)
Mais j'ai pas encore compris comment s'en servir.
Il manque un mode d'emploi ou tout au moins un modèle objet en
français.



regarde les exemples suivants peut être cela t'aidera.

http://faq.outlook.free.fr/readarticle.php?article_id0
http://faq.outlook.free.fr/readarticle.php?article_id7

Pourquoi, tu crois que redemption peut éviter le message d'alerte ?
J4ai pas encore regardé ça, mais ajouter des choses ne me plait qu'à
moitié... c'est vrai que ça à l'air intéressant et plein de chose
utile, mais ça fait un truc de plus à prévoir pour que ce soit utile
pour tous...
Autre remarque/question, ne faut-il pas les droti d'accès
adminitrateur pour l'installer... tu vois ce que je veux dire... ;-)

Dernière idée, Oliv' est peut-être en version 2007 ?
Ah toi t'as lu les post en travers.... ;-)


Oliv' a dit plus haut qu'il n'avait pas cette version...


Oui suis en 2003 pas de sous,... sniff
Si une âme charitable pouvais vérifier sur un 2007 ca vient peut être de là!
sinon je met ma version sur http://cjoint.com/?eBrkjcR3a3
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
Dernière chance http://www.outlookcode.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


1 2 3