Utiliser AdvancedSearch sous VBA Excel pour lire les emails d'Outlook
Bonjour,
Je souhaite rechercher des mails dans ma boite aux lettres à partir d'Excel en utilisant la fonction AdvancedSearch.
Vu sur le site de MSDN, le code fourni est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Public blnSearchComp As Boolean
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)
MsgBox "The AdvancedSearchComplete Event fired."
blnSearchComp = True
End SubSub
TestAdvancedSearchComplete()
Dim sch As Outlook.Search
Dim rsts As Outlook.Results
Dim i As Integer
blnSearchComp = False
Const strF As String = "urn:schemas:mailheader:subject = 'Test'"
Const strS As String = "Inbox"
Set sch = Application.AdvancedSearch(strS, strF)
While blnSearchComp = False
DoEvents
Wend
Set rsts = sch.Results
For i = 1 To rsts.Count
MsgBox rsts.Item(i).SenderName
Next
End Sub |
Pour l'utiliser sous Excel, j'ai adapter le code comme ci_dessous :
Code:
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
| Public blnSearchComp As Boolean
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)
MsgBox "The AdvancedSearchComplete Event fired"
blnSearchComp = True
End Sub
Sub TestAdvancedSearchComplete()
Dim olApp As Outlook.Application
Dim olNameSpace As Outlook.Namespace
Dim olDossier As Outlook.MAPIFolder
Dim sch As Outlook.Search
Dim rsts As Outlook.Results
Dim i As Integer
blnSearchComp = False
Const strF As String = "urn:schemas:mailheader:subject = 'test'"
Const strS As String = "Inbox"
Set olApp = CreateObject("Outlook.Application")
Set sch = olApp.AdvancedSearch(strS, strF)
While blnSearchComp = False
DoEvents
Wend
Set rsts = sch.Results
For i = 1 To rsts.Count
MsgBox rsts.Item(i).SenderName
Next
End Sub |
Si cet essai fonctionne correctement sous Outlook, ce n'est pas le cas sous Excel. J'obtiens bien le message "The AdvancedSearchComplete Event fired" mais ensuite le programme tourne sans arrêt.
Quelqu'un peut-il m'aider ?
Merci d'avance.
remplacement des balise [quote] (citation) par les balises [code]
Merci Hervé pour cette réponse.
J'ai adapté mon programme comme ci-dessous mais le résultat n'est pas le même lorsque je l'exécute en mode Pas à pas détaillé (F8) ou en mode normal (bouton Exécuter Sub/UserForm).
Je souhaite compter les mails contenant en objet le mot TEST à la date du 09/02/2011.
- mode pas à pas détaillé : le nombre est correct
- mode normal : 0
Code:
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
| Sub RechercheMail()
Dim olApp As Outlook.Application
Dim olNameSpace As Outlook.Namespace
Dim olDossier As Outlook.MAPIFolder
Dim olSearch As Outlook.Search
Dim olResult As Outlook.Results
Dim Scope As String
Dim Filter As String
Set olApp = CreateObject("Outlook.Application")
Set olNameSpace = olApp.GetNamespace("MAPI")
Set olDossier = olNameSpace.GetDefaultFolder(olFolderInbox)
Scope = "'" & olDossier.FolderPath & "'"
Filter = "urn:schemas:httpmail:subject LIKE '%TEST%'" & _
"AND urn:schemas:httpmail:datereceived >= '09/02/2011 00:00'" & _
"AND urn:schemas:httpmail:datereceived <= '09/02/2011 23:59'"
Set olSearch = olApp.AdvancedSearch(Scope, Filter)
Set olResult = olSearch.Results
Debug.Print olResult.Count
Set olResult = Nothing
Set olSearch = Nothing
Set olApp = Nothing
End Sub |
As-tu une idée ?