Items.Restrict, méthode (Outlook)

Applique un filtre à la collection Items , en renvoyant une nouvelle collection contenant tous les éléments de l’original qui correspondent au filtre.

Syntaxe

expression. Restrict( _Filter_ )

Expression Une expression qui renvoie un objetÉléments.

Paramètres

Nom Requis/Facultatif Type de données Description
Filter Obligatoire Chaîne Expression de filtre chaîne à appliquer. Pour plus d’informations, consultez la méthode Find .

Valeur renvoyée

Collection Items qui représente les éléments de la collection Items d’origine qui correspondent au filtre.

Remarques

Cette méthode est une alternative à l’utilisation de la méthode Find ou de la méthode FindNext pour itérer sur des éléments spécifiques au sein d’une collection. Les méthodes Find et FindNext sont plus rapides que le filtrage si le nombre d'élément est peu élevé. La méthode Restrict est beaucoup plus rapide si la collection comporte de nombreux éléments et particulièrement, si seuls quelques éléments doivent être renvoyés.

Remarque

Si vous utilisez des champs définis par l'utilisateur à l'intérieur d'une clause Find ou Restrict, ces champs doivent exister dans le dossier. Si ce n'est pas le cas, le code générera un message d'erreur indiquant que ces champs sont inconnus. Pour ajouter un champ à un dossier, il suffit d'afficher le sélecteur de champs et de cliquer sur Nouveau.

Cette méthode ne peut pas être utilisée et génère une erreur avec les propriétés suivantes :

Corps LastFirstNoSpaceCompany
Enfants LastFirstSpaceOnlyCompany
Classe LastFirstNoSpaceAndSuffix
Companies MemberCount
CompanyLastFirstNoSpace NetMeetingAlias
CompanyLastFirstSpaceOnly NetMeetingAutoStart
ContactNames NetMeetingOrganizerAlias
Contacts NetMeetingServer
ConversationIndex NetMeetingType
DLName RecurrenceState
Email1EntryID ReceivedByEntryID
Email2EntryID ReceivedOnBehalfOfEntryID
Email3EntryID ReplyRecipients
EntryID ResponseState
HTMLBody Saved
IsOnlineMeeting Sent
LastFirstAndSuffix Submitted
LastFirstNoSpace VotingOptions
AutoResolvedWinner DownloadState
BodyFormat IsConflict
InternetCodePage MeetingWorkspaceURL
Permission

Création de filtre pour les méthodes Rechercher et Restreindre

La syntaxe du filtre varie selon le type de champ que vous filtrez.

Chaîne (pour les champs de texte)

Lors du filtrage des champs de texte, vous pouvez utiliser une paire de guillemets simples (') ou une paire de guillemets doubles («) pour délimiter les valeurs qui font partie du filtre. Par exemple, toutes les lignes suivantes fonctionnent correctement lorsque le champ est de type String :

sFilter = "[CompanyName] = 'Microsoft'" sFilter = "[CompanyName] = ""Microsoft"""  
sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)

Lorsque vous spécifiez un filtre dans une requête Jet ou DASL, si vous délimitez une chaîne appartenant au filtre à l’aide d’une paire de guillemets simples, mais que la chaîne contient déjà un guillemet simple ou une apostrophe, ajoutez un guillemet simple avant celui-ci ou celle-ci. Il servira de caractère d’échappement. Utilisez une approche similaire si vous utilisez une paire de guillemets doubles pour délimiter une chaîne. Si la chaîne contient des guillemets doubles, ajoutez des guillemets doubles en tant que caractère d’échappement devant les guillemets doubles.

Par exemple, dans la chaîne de filtre DASL qui filtre pour que la propriété Subject soit égale au mot can't, la chaîne de filtre entière est délimitée par une paire de guillemets doubles, et la chaîne can't incorporée est délimitée par une paire de guillemets simples. Cette chaîne de filtre contient trois caractères : le guillemet double de début et le guillemet double de fin pour la référence de propriété de http://schemas.microsoft.com/mapi/proptag/0x0037001f, et l’apostrophe dans la condition de valeur pour le mot can't. En appliquant les caractères d'échappement appropriés, vous pouvez exprimer la chaîne de filtre comme suit :

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'can''t'"

Vous pouvez également utiliser la chr(34) fonction pour représenter le guillemet double (dont la valeur de caractère ASCII est 34) utilisé comme caractère d’échappement. À l’aide de la substitution chr(34) pour représenter un guillemet double en tant que caractère d’échappement, vous pouvez exprimer le dernier exemple en procédant comme suit :

filter = "@SQL= " & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001f" _  
    & Chr(34) & " = " & "'can''t'"

Vous devez aussi utiliser des guillemets simples et doubles en tant que caractères d’échappement pour les requêtes DASL avec les opérateurs ci_startswith ou ci_phrasematch. Par exemple, la requête suivante effectue une requête de correspondance d’expression pour can't dans l’objet du message :

filter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001E" _  
    & Chr(34) & " ci_phrasematch " & "'can''t'"

Un autre exemple est une chaîne de filtre DASL qui filtre la propriété Subject comme étant égale aux mots the right stuff, où le mot stuff est entouré de guillemets doubles. Dans ce cas, vous devez échapper par des guillemets doubles englobants comme suit :

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the right ""stuff""'"

Un ensemble de règles d’échappement différent s’applique à une référence de propriété pour les propriétés nommées contenant l’espace, un guillemet simple, double guillemets ou caractère pourcentage. Pour plus d’informations, voir Référencement des propriétés par Espace de noms.

Date

Bien que les dates et heures soient généralement stockées dans un format Date, les méthodes Find et Restrict nécessitent que la date et l’heure soient converties en une représentation sous forme de chaîne. Pour vérifier que la date est mise en forme comme prévu dans Microsoft Outlook, utilisez la fonction Format. L’exemple suivant crée un filtre pour trouver tous les contacts qui ont été modifiées après le 15 janvier 1999 à 3:30 P.M.

sFilter = "[LastModificationTime] > '" & Format("1/15/99 3:30pm", "ddddd h:nn AMPM") & "'"

Opérateurs booléens

Les opérateursBooléens, VRAI/ FAUX, OUI/NON, ON/OFF, etc., ne doit pas être convertis en chaîne. Par exemple, pour déterminer si la journalisation est activée pour les contacts, vous pouvez utiliser ce filtre :

sFilter = "[Journal] = True" 

Remarque

Si vous utilisez des guillemets avec des champs de type Boolean, une chaîne vide trouvera les éléments dont les champs comportent la valeur False, les chaînes non vides trouveront, quant à elle, les éléments dont les champs comportent la valeur True.

Mots clés (ou catégories)

Le champ Catégories est de type mots clés et a été conçu pour contenir plusieurs valeurs. Lorsque vous accédez au champ Catégories via un programme, celui-ci se comporte comme un champ de texte, et la chaîne doit correspondre exactement à la valeur recherchée. Les valeurs dans la chaîne de texte sont séparées par une virgule et un espace. Cela signifie généralement que vous ne pouvez pas utiliser les méthodes Find et Restrict sur un champ de mots clés s'il contient plusieurs valeurs. Par exemple, si un contact appartient à la catégorie Business et si un contact appartient aux catégories Business et Social, il n'est pas facile d'utiliser les méthodes Find et Restrict pour extraire tous les éléments qui se trouvent dans la catégorie Business. Il est préférable, dans ce cas, d'effectuer une recherche dans les contacts du dossier et d'utiliser la fonction Instr pour vérifier si la chaîne « Business » est contenue dans le champ des mots clés.

Remarque

Il existe une exception à cette règle, si vous limitez le champ Catégories à deux valeurs au maximum, vous pouvez alors utiliser les méthodes Find et Restrict avec l'opérateur logique OR pour extraire tous les contacts Business. Vous pouvez alors utiliser les méthodes Find et Restrict avec l’opérateur logique OR pour récupérer tous les contacts de la catégorie Business. Par exemple (en pseudocode) : « Business » OU « Business, Personal » OU « Personal, Business ». Les chaînes de catégorie ne respectent pas la casse.

Entier

Vous pouvez rechercher des champs Entiers avec ou sans guillemets comme délimiteurs. Les filtres suivants trouveront les contacts créés à l’aide d’Outlook 2000 :

sFilter = "[OutlookInternalVersion] = 92711" sFilter = "[OutlookInternalVersion] = '92711'"

Utilisation des Variables dans le cadre du filtre

Comme l'illustre l'exemple de la méthode Restrict, vous pouvez utiliser des valeurs issues de variables dans le filtre. L'exemple de code Microsoft Visual Basic Scripting Edition (VBScript) suivant illustre la syntaxe qui utilise des variables dans le filtre.

sFullName = "Dan Wilson"  
' This approach uses Chr(34) to delimit the value.  
sFilter = "[FullName] = " & Chr(34) & sFullName & Chr(34)  
' This approach uses double quotation marks to delimit the value. sFilter = "[FullName] = """ & sFullName & """"

Utilisation d’opérateurs logiques dans le cadre du filtre

Les opérateurs logiques qui sont autorisés sont AND, OR, et NOT. Voici des variantes de la clause pour la méthode Restrict afin que vous puissiez spécifier plusieurs critères.

OR : le code suivant renvoie tous les contacts dont la catégorie est Business ou Personal.

sFilter = "[Categories] = 'Personal' Or [Categories] = 'Business'"  

AND : Le code suivant extrait tous les contacts personnels travaillant à Microsoft.

sFilter = "[Categories] = 'Personal' And [CompanyName] = 'Microsoft'"

NOT : Le code suivant extrait tous les contacts personnels qui ne travaillent pas à Microsoft.

sFilter = "[Categories] = 'Personal' And Not([CompanyName] = 'Microsoft')"

Notes supplémentaires

Si vous essayez d'utiliser les méthodes Find ou Restrict avec des champs définis par l'utilisateur, ces champs doivent être définis dans le dossier, sinon, une erreur se produit. Il n'existe aucun moyen d'effectuer une opération « contains (contient) ». Par exemple, vous ne pouvez pas utiliser Find ou Restrict pour rechercher des éléments dont le champ Objet contient un mot particulier. Il est préférable, dans ce cas, d'utiliser la méthode AdvancedSearch ou de parcourir l'ensemble des éléments dans le dossier et d'utiliser la fonction InStr pour effectuer une recherche dans un champ. Utilisez la méthode Restrict pour rechercher des éléments qui commencent dans une certaine plage de caractères. Par exemple, pour rechercher tous les contacts avec une dernière nom commençant par la lettre M, utilisez ce filtre :

sFilter = "[LastName] > 'LZZZ' And [LastName] < 'N'"

Exemple

Cet exemple Visual Basic pour Applications (VBA) utilise la méthode Restrict pour obtenir tous les éléments de boîte de réception de la catégorie Business et les déplacer vers le dossier Business . Pour exécuter ce code, créez un sous-dossier Business ou assurez-vous qu'un tel dossier existe sous Boîte de réception

Sub MoveItems()  
    Dim myNamespace As Outlook.NameSpace  
    Dim myFolder As Outlook.Folder  
    Dim myItems As Outlook.Items  
    Dim myRestrictItems As Outlook.Items  
    Dim myItem As Outlook.MailItem  
  
    Set myNamespace = Application.GetNamespace("MAPI")  
    Set myFolder = _  
        myNamespace.GetDefaultFolder(olFolderInbox)  
    Set myItems = myFolder.Items  
    Set myRestrictItems = myItems.Restrict("[Categories] = 'Business'")  
    For i =  myRestrictItems.Count To 1 Step -1  
        myRestrictItems(i).Move myFolder.Folders("Business")  
    Next  
End Sub

Cet exemple Visual Basic pour Applications utilise la méthode Restrict pour appliquer un filtre aux éléments de contact en fonction de la propriété LastModificationTime de l’élément.

Public Sub ContactDateCheck()  
    Dim myNamespace As Outlook.NameSpace  
    Dim myContacts As Outlook.Items  
    Dim myItems As Outlook.Items  
    Dim myItem As Object  
      
    Set myNamespace = Application.GetNamespace("MAPI")  
    Set myContacts = myNamespace.GetDefaultFolder(olFolderContacts).Items  
    Set myItems = myContacts.Restrict("[LastModificationTime] > '01/1/2003'")  
    For Each myItem In myItems  
        If (myItem.Class = olContact) Then  
            MsgBox myItem.FullName & ": " & myItem.LastModificationTime  
        End If  
    Next  
End Sub

L'exemple de code Visual Basic pour Applications suivant est identique au précédent, à la seule différence qu'il montre comment utiliser une variable dans le filtre.

Public Sub ContactDateCheck2()  
    Dim myNamespace As Outlook.NameSpace  
    Dim myContacts As Outlook.Items  
    Dim myItem As Object  
    Dim DateStart As Date  
    Dim DateToCheck As String  
    Dim myRestrictItems As Outlook.Items  
  
    Set myNameSpace = Application.GetNamespace("MAPI")  
    Set myContacts = myNameSpace.GetDefaultFolder(olFolderContacts).Items  
    DateStart = #01/1/2003#  
    DateToCheck = "[LastModificationTime] >= """ & DateStart & """"  
    Set myRestrictItems = myContacts.Restrict(DateToCheck)  
    For Each myItem In myRestrictItems  
        If (myItem.Class = olContact) Then  
            MsgBox myItem.FullName & ": " & myItem.LastModificationTime  
        End If  
    Next  
End Sub

Voir aussi

Éléments, objet

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.