Bonjour,
Je développe actuellement une petite macro, qui va me permettre de :
- enregistrer les PJ d'un mail à un endroit spécifique
- supprimer les PJ du mail
- mettre dans le mail l'emplacement de ces PJ
Voici les macros que j'ai utilisé, en me basant sur les existantes trouvées ici et là :
L'enregistrement et la suppression des PJ fonctionne correctement de mon poste. Par contre, ce n'est pas une macro pour moi mais pour un collègue.
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 Sub ExtractionPJ(strID As Outlook.MailItem) Dim MyMail As Outlook.MailItem Dim expediteur Dim datejour As String Set olNS = Application.GetNamespace("MAPI") Set MyMail = olNS.GetItemFromID(strID.EntryID) datejour = Year(Date) & Format(Month(Date), "00") & Format(Day(Date), "00") 'MsgBox "toto" If MyMail.Attachments.Count > 0 Then ' expediteur = MyMail.SenderEmailAddress 'on crée le répertoire où mettre les fichiers joints ########################################################## 'c:\temp\pj\ doit déjà exister !!! Repertoire = "D:\" & datejour & "\" If "" = Dir(Repertoire, vbDirectory) Then MkDir Repertoire End If 'on traite les pj Dim PJ, typeatt TextePJ = "PJ Enregistrées ici : " & vbCrLf For Each PJ In MyMail.Attachments 'vérification si c'est une PJ Embedded typeatt = Isembedded(strID, PJ.Index) If typeatt = "" Then strFile = Repertoire & PJ.Filename PJ.SaveAsFile strFile TextePJ = TextePJ & strFile & vbCrLf 'MyMail.Attachments.Remove 1 End If Next PJ While MyMail.Attachments.Count > 0 MyMail.Attachments(1).Delete Wend MyMail.Body = TextePJ & vbCrLf & MyMail.Body 'drapeau vert 'MyMail.FlagIcon = olYellowFlagIcon 'Marque lu MyMail.UnRead = True MyMail.Save End If Set MyMail = Nothing Set olNS = Nothing End Sub Function Isembedded(ByVal strEntryID As String, attindex As Integer) As Variant Dim oSession As Object ' CDO objects Dim oMsg As Object Dim oAttachs As Object Dim oAttach As Object ' 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 image tag Set oAttachs = oMsg.Attachments Set oAttach = oAttachs.Item(attindex) Dim strCID As String strCID = oAttach.Fields(&H3712001E) Isembedded = strCID Set oMsg = Nothing oSession.Logoff Set oSession = Nothing End Function
Je met cette macro en application à la réception d'un message, jusque là, rien d'anormal.
Par contre, quand mon collègue met en place cette macro, quand elle s'applique il a ce message sur le mail reçu original :
Et dans le mail "transformé" celui-ci :
Sur le 2e quand il clique sur la ligne, il peut remplacer le premier, et inversement. bref, comme s'il gardait les 2 mails. j'ai vu sur le net (mais j'ai pas trouvé de reponse, donc je me tourne vers vous) qu'il s'agissait d'un problème de conflit. J'ai vu qu'on pouvait les gérer par VB, mais je n'ai pas trouvé la solution.
Sauriez-vous comment faire ?
En fait, je voudrait uniquement garder le mail sans les PJ (j'en ai plus besoin...), donc transofmré par ma macro. Serait-ce un problème au niveau du Save ?
Autre question subsidiaire : il a reçu un mail avec un tableau à l'intérieur. Lors de l'application de la règle, le format du tableau a disparu, et tout était en ligne, tout moche et sans couleur. C'est dû au fait qu'il faut enregistrer le mail au format HTML ??
Si oui, je pense que je dois modifier ma macro de façon à faire en sorte qu'il soit en HTML en sortie à chaque fois, ça serait mieux non ?
En vous remerciant par avance pour vos réponses.
Partager