Méthode Application.AdvancedSearch (Outlook)

Effectue une recherche basée sur une chaîne de recherche DASL (DAV Searching and Locating) spécifiée.

Syntaxe

expression. AdvancedSearch( _Scope_ , _Filter_ , _SearchSubFolders_ , _Tag_ )

expressionUne variable qui représente un objetApplication.

Paramètres

Nom Requis/Facultatif Type de données Description
Scope Obligatoire Chaîne Portée de la recherche. Par exemple, le chemin d'accès à un dossier. Il est recommandé que le chemin du dossier soit placé entre guillemets simples. Sinon, la recherche risque de ne pas renvoyer de résultats corrects si le chemin contient des caractères spéciaux, y compris des caractères Unicode. Pour spécifier plusieurs chemins, encadrez chacun d'eux par des guillemets simples et séparez-les par une virgule.
Filter Facultatif Variante Filtre de recherche DASL qui définit les paramètres de la recherche.
SearchSubFolders Facultatif Variante Détermine si la recherche inclut certains ou tous les sous-dossiers du dossier.
Tag Facultatif Variante Nom donné en tant qu’identificateur pour la recherche.

Valeur renvoyée

Objet Search qui représente les résultats de la recherche.

Remarques

Vous pouvez effectuer plusieurs recherches simultanées en appelant la méthode AdvancedSearch sur plusieurs lignes de code. Toutefois, sachez que lorsque vous créez par programme un grand nombre de dossiers de recherche, l’activité générée par les recherches simultanées peut avoir des répercussions négatives sur les performances d’Outlook, surtout si Outlook effectue les recherches en mode Exchange en ligne.

La méthode AdvancedSearch et les fonctionnalités associées dans le modèle objet Outlook ne créent pas de dossier de recherche qui s’affiche dans l’interface utilisateur d’Outlook. Vous pouvez cependant utiliser la méthode Save de l'objet Search qui est renvoyée pour créer un dossier de recherche présent dans la liste de dossiers de recherche de l'interface utilisateur Outlook.

À l’aide du paramètre Scope , vous pouvez spécifier un ou plusieurs dossiers dans le même magasin, mais vous ne pouvez pas spécifier plusieurs dossiers dans plusieurs magasins. Pour spécifier plusieurs dossiers compris dans le même magasin pour le paramètre Scope, encadrez chaque chemin d'accès de dossier par des guillemets simples et insérez des virgules pour séparer ces chemins. Pour les dossiers par défaut tels que Boîte de réception ou Éléments envoyés, vous pouvez utiliser simplement le nom du dossier au lieu de saisir l'intégralité du chemin d'accès. Par exemple, les deux lignes de code suivantes représentent des paramètres Scope valides :

Scope = "'Inbox', 'Sent Items'"
Scope = "'" & Application.Session.GetDefaultFolder(olFolderInbox).FolderPath _  
    & "','" & Application.Session.GetDefaultFolder(olFolderSentMail).FolderPath & "'"

Le paramètre Filter peut être n’importe quelle requête DASL valide. Pour plus d'informations sur les requêtes DASL, voir Filtrage des éléments et Référencer les propriétés par un espace de noms. Notez que vous ne pouvez pas utiliser une requête JET pour le paramètre Filter de recherche avancée. Si la recherche instantanée est activée sur une banque qui contient un dossier spécifié dans le paramètre Scope, vous pouvez utiliser les mots clés de recherche instantanée pour obtenir de meilleurs résultats. Si vous utilisez des mots clés de recherche instantanée et que la recherche instantanée n’est pas activée, Outlook renvoie une erreur et votre recherche échoue.

Exemple

L’exemple Visual Basic pour Applications (VBA) suivant recherche dans la boîte de réception des éléments dont l’objet est test et affiche les noms des expéditeurs des éléments de messagerie renvoyés par la recherche. La procédure événementielle AdvancedSearchComplete attribue la valeur blnSearchComp à la variable booléenne à la fin de la recherche. Cette variable booléenne est utilisée par la procédure TestAdvancedSearchComplete() pour déterminer à quel moment se termine la recherche. L’exemple de code doit être placé dans un module de classe tel que ThisOutlookSession, et la TestAdvancedSearchComplete() procédure doit être appelée avant que la procédure événementielle puisse être appelée par Outlook.

Public blnSearchComp As Boolean  
  
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)  
    Debug.Print "The AdvancedSearchComplete Event fired"  
    If SearchObject.Tag = "Test" Then  
        m_SearchComplete = True  
    End If  
  
End Sub  
  
Sub 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, "Test")   
    While blnSearchComp = False  
        DoEvents  
    Wend   
    Set rsts = sch.Results  
    For i = 1 To rsts.Count  
        Debug.Print rsts.Item(i).SenderName  
    Next  
End Sub

L’exemple Microsoft Visual Basic pour Applications suivant indique comment utiliser la méthode AdvancedSearch pour créer une recherche. Les paramètres de la recherche, comme spécifié par l’argument Filter de la méthode AdvancedSearch, renvoie tous les éléments des dossiers Boîte de réception et Éléments envoyés lorsque l’objet est équivalent à « Office » ou contient « Office ». Les dossiers Boîte de réception et Éléments envoyés de l’utilisateur sont spécifiés comme étendue de la recherche et la propriété SearchSubFolders est définie sur True. Une fois la recherche terminée, la méthode GetTable est appelée sur l’objet Search pour l’énumération performante des résultats de la recherche.

Public m_SearchComplete As Boolean  
  
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)  
    If SearchObject.Tag = "MySearch" Then  
        m_SearchComplete = True  
    End If  
End Sub  
  
Sub TestSearchForMultipleFolders()  
    Dim Scope As String  
    Dim Filter As String  
    Dim MySearch As Outlook.Search  
    Dim MyTable As Outlook.Table  
    Dim nextRow As Outlook.Row  
    m_SearchComplete = False  
    'Establish scope for multiple folders  
    Scope = "'" & Application.Session.GetDefaultFolder( _  
    olFolderInbox).FolderPath _  
    & "','" & Application.Session.GetDefaultFolder( _  
    olFolderSentMail).FolderPath & "'"  
    'Establish filter  
    If Application.Session.DefaultStore.IsInstantSearchEnabled Then  
        Filter = Chr(34) & "urn:schemas:httpmail:subject" _  
        & Chr(34) & " ci_phrasematch 'Office'"  
    Else  
        Filter = Chr(34) & "urn:schemas:httpmail:subject" _  
        & Chr(34) & " like '%Office%'"  
    End If  
    Set MySearch = Application.AdvancedSearch( _  
    Scope, Filter, True, "MySearch")  
    While m_SearchComplete <> True  
        DoEvents  
    Wend  
    Set MyTable = MySearch.GetTable  
    Do Until MyTable.EndOfTable  
        Set nextRow = MyTable.GetNextRow()  
        Debug.Print nextRow("Subject")  
    Loop  
End Sub

Voir aussi

Objet Application

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.