![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: juillet 2008
Messages: 5
|
Bonjour à tous,
J'essaiede créer une macro pour trier automatiquement mes emails. En somme :
En fait, je n'arrive pas à trouver l'expéditeur du rapport de lecture, je n'arrive donc pas à le classer. Bien sûr, quand la classe du message est "olReport", la fonction "SenderEmailAddress" n'existe pas, d'ou le problème ! Mon code : Code :
Sub moveToArchive() 'Bligoo - March 2008 'http://bligoo.wordpress.com/ ' OlObjectClass ' olMail = 43 ' olNote = 44 ' olPost = 45 ' olReport = 46 ' olRemote = 47 ' Liste complète : http://support.microsoft.com/kb/285202/fr On Error Resume Next Dim objFolder As Outlook.MAPIFolder, objInbox As Outlook.MAPIFolder Dim objNS As Outlook.namespace Dim objItem As Object ' Impossible de mettre "MailItem" ??? Set objNS = Application.GetNamespace("MAPI") Set objInbox = objNS.GetDefaultFolder(olFolderInbox) ' Set objFolder = objNS.Folders("Dossiers 2008") ' À retenir : objNS.Folders(”Dossiers personnels”).Folders(”sous dossier”).Folders(”Sous sous dossier”) ' Exemple : Set objFolder = objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("MP") Set objFolder = objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("MP") If Application.ActiveExplorer.Selection.Count = 0 Then '[asy]Contrôle qu'au moins un message est sélectionné, sinon fin de la macro Exit Sub End If If objFolder Is Nothing Then '[asy]Controler que le dossier de destination est valide MsgBox "Le dossier cible n'existe pas!", vbOKOnly + vbExclamation, "INVALID FOLDER" End If For Each objItem In Application.ActiveExplorer.Selection If objFolder.DefaultItemType = olMailItem Then Select Case objItem.Class Case olMail: ' Courriel objItem.UnRead = False '[asy]Le mail passe dans le statut lu ' objItem.Move objFolder '[asy]Le mail est déplacé dans le répertoire cible NomExp = objItem.SenderName AdresseExp = objItem.SenderEmailAddress Domaine = Split(AdresseExp, "@") Select Case Domaine(1) Case "mailingprocess.com": Select Case Domaine(0) ' Nom de l'expéditeur Case "SRVVALIPOST1" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Serveur.Valipost") Case "destineo" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Serveur.Valipost").Folders("Bordereaux") Case Else objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("MP") End Select Case "routage-et-marketing.com": objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("RMP") Case "bip.laposte.fr" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("La Poste").Folders("info@bip.laposte.fr") End Select Case olReport: ' Rapport : Courriel Lu uniquement objItem.UnRead = False '[asy]Le mail passe dans le statut lu ' Impossible d'obtenir le nom de l'expéditeur ' NomExp = objItem.SenderName ' AdresseExp = objItem.SenderEmailAddress ' Domaine = Split(AdresseExp, "@") ' objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("MP").Folders("Lu") End Select End If Next Set objItem = Nothing Set objFolder = Nothing Set objInbox = Nothing Set objNS = Nothing End Sub Code :
Case olReport: ' Rapport : Courriel Lu uniquement objItem.UnRead = False '[asy]Le mail passe dans le statut lu ' Impossible d'obtenir le nom de l'expéditeur ' NomExp = objItem.SenderName ' AdresseExp = objItem.SenderEmailAddress ' Domaine = Split(AdresseExp, "@") Moi j'ai bien beau chercher, je n'ai rien trouvé pour m'en sortir ! Au secours ! Dernière modification par Dolphy35 ; 18/07/2008 à 18h06 Motif: Balises Code (#) |
|
|
|
|
|
#2 (permalink) |
![]() |
Salut,
je confirme il n'y a aucunes propriétés permettant d'avoir l'expéditeur depuis un ReportItem. Normalement tu as l'adresse mail de l'expéditeur du report dans le body mais là il te faut coder un bon traitement sur chaîne. Je ne connais pas mais regarde du côté de CDO, il reprend pas mal de faille d'outlook. Dolphy
__________________
Initiation au VBA d'Outlook Je ne réponds pas aux questions techniques par MP
|
|
|
|
|
|
#3 (permalink) |
|
Invité de passage
![]() Date d'inscription: juillet 2008
Messages: 5
|
Hello Dolphy35,
Merci pour la réponse, c'est bien ce que je pensais ! C'est quand même incroyable qu'il soit impossible de retrouver l'expéditeur. Le traitement du corp du message n'est pas vraiment utile, le nom de l'expéditeur y est mais pas nécessairement son adresse email ! ![]() Concernant le Collaboration Data Objects (CDO), as-tu un site source à me suggérer ? Merci encore pour ta réponse rapide,
|
|
|
|
|
|
#4 (permalink) |
![]() |
__________________
Initiation au VBA d'Outlook Je ne réponds pas aux questions techniques par MP
|
|
|
|
|
|
#6 (permalink) |
![]() |
c'est plutôt moi
j'ai carrément confondu les deux Bon Week
__________________
Initiation au VBA d'Outlook Je ne réponds pas aux questions techniques par MP
|
|
|
|
|
|
#7 (permalink) |
|
Invité de passage
![]() Date d'inscription: juillet 2008
Messages: 5
|
Yes !
Redemption a la solution ! Juste un petit bout, mais qui donne exactement le résultat recherché :Code :
Dim sItem, oItem Set sItem = CreateObject("Redemption.SafeMailItem") Set oItem = Application.Session.GetDefaultFolder(6).Items(1) 'get first e-mail from the Inbox, can be any other item sItem.Item = oItem PrSenderEmail = &HC1F001E MsgBox sItem.Fields(PrSenderEmail) Merci pour ton aide, c'était une excellente suggestion !
|
|
|
|
|
|
#8 (permalink) |
|
Invité de passage
![]() Date d'inscription: juillet 2008
Messages: 5
|
Pour les fana du code, la technique utilisé :
![]() Code :
Function TrouveExpediteur(IDUnique As String) As String Dim sItem, oItem Set sItem = CreateObject("Redemption.SafeMailItem") Set oItem = Application.Session.GetItemFromID(IDUnique) ' Application.Session.GetDefaultFolder(6).Items(1) 'get first e-mail from the Inbox, can be any other item sItem.Item = oItem PrSenderEmail = &HC1F001E TrouveExpediteur = sItem.Fields(PrSenderEmail) Set sItem = Nothing Set oItem = Nothing End Function Code :
Sub moveToArchive() 'Bligoo - March 2008 'http://bligoo.wordpress.com/ ' OlObjectClass ' olMail = 43 ' olNote = 44 ' olPost = 45 ' olReport = 46 ' olRemote = 47 ' Liste complète : http://support.microsoft.com/kb/285202/fr On Error Resume Next Dim objFolder As Outlook.MAPIFolder, objInbox As Outlook.MAPIFolder Dim objNS As Outlook.NameSpace Dim objItem As Object ' Impossible de mettre "MailItem" ??? Set objNS = Application.GetNamespace("MAPI") Set objInbox = objNS.GetDefaultFolder(olFolderInbox) ' Set objFolder = objNS.Folders("Dossiers 2008") ' À retenir : objNS.Folders(”Dossiers personnels”).Folders(”sous dossier”).Folders(”Sous sous dossier”) ' Exemple : Set objFolder = objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("MP") Set objFolder = objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("MP") If Application.ActiveExplorer.Selection.Count = 0 Then '[asy]Contrôle qu'au moins un message est sélectionné, sinon fin de la macro Exit Sub End If If objFolder Is Nothing Then '[asy]Controler que le dossier de destination est valide MsgBox "Le dossier cible n'existe pas!", vbOKOnly + vbExclamation, "INVALID FOLDER" End If For Each objItem In Application.ActiveExplorer.Selection If objFolder.DefaultItemType = olMailItem Then NomExp = TrouveExpediteur(objItem.EntryID) Select Case objItem.Class Case olMail: ' Courriel objItem.UnRead = False '[asy]Le mail passe dans le statut lu ' objItem.Move objFolder '[asy]Le mail est déplacé dans le répertoire cible ' NomExp = objItem.SenderName AdresseExp = objItem.SenderEmailAddress Domaine = Split(AdresseExp, "@") Select Case Domaine(1) Case "mailingprocess.com": Select Case Domaine(0) ' Nom de l'expéditeur Case "SRVVALIPOST1" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Serveur.Valipost") Case "destineo" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Serveur.Valipost").Folders("Bordereaux") Case Else objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("MP") End Select Case "routage-et-marketing.com": objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("RMP") Case "bip.laposte.fr" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("La Poste").Folders("info@bip.laposte.fr") Case "laposte.fr" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("La Poste") Case "valipost.com": Select Case Domaine(0) ' Nom de l'expéditeur Case "rmp" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Serveur.Valipost") Case Else objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Valipost") End Select End Select Case olReport: ' Rapport : Courriel Lu uniquement objItem.UnRead = False '[asy]Le mail passe dans le statut lu ' Impossible d'obtenir le nom de l'expéditeur ' NomExp = objItem.SenderName AdresseExp = NomExp Domaine = Split(AdresseExp, "@") Select Case Domaine(1) Case "mailingprocess.com": Select Case Domaine(0) ' Nom de l'expéditeur Case "SRVVALIPOST1" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Serveur.Valipost") Case "destineo" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Serveur.Valipost").Folders("Bordereaux") Case Else objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("MP").Folders("Lu") End Select Case "routage-et-marketing.com": objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("Interne").Folders("RMP").Folders("Lu") Case "laposte.fr" objItem.Move objNS.Folders("Dossiers 2008").Folders("Boîte de réception").Folders("La Poste") End Select End Select End If Next Set objItem = Nothing Set objFolder = Nothing Set objInbox = Nothing Set objNS = Nothing End Sub ![]() Encore merci pour la suggestion !
|
|
|
|
![]() |
![]() |
||
Classement automatique des emails ET des rapports (olReport)
|
||
| Outils de la discussion | |
|
|