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
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.