Share via


Événement Form.Filter (Access)

Se produit lorsque l’utilisateur ouvre une fenêtre de filtre en choisissant Filtrer par formulaire, Filtre/tri avancé ou Filtrer par formulaire du serveur.

Syntaxe

expression. Filter (Cancel, FilterType)

expressionVariable qui représente un objetForm.

Parameters

Nom Requis/Facultatif Type de données Description
Cancel Obligatoire Entier Le paramètre détermine si vous souhaitez ouvrir la fenêtre de filtrage. La définition de l’argument Cancel sur True (1) empêche l’ouverture de la fenêtre de filtre. Vous pouvez également utiliser la méthode CancelEvent de l'objet DoCmd pour annuler l'ouverture de la fenêtre de filtrage.
FilterType Obligatoire Entier La fenêtre de filtre de l'utilisateur essaie d'ouvrir. L’argument FilterType peut être l’une des constantes intrinsèques suivantes :
  • acFilterByForm
  • acFilterAdvanced
  • acServerFilterByForm

Remarques

Pour exécuter une macro ou une procédure événementielle lorsque cet événement se produit, définissez la propriété OnFilter sur le nom de la macro ou [procédure événementielle].

Utilisez l’événement Filter pour :

  • Supprimer tout ancien filtre du formulaire. Pour ce faire, définissez la propriété Filter ou ServerFilter du formulaire sur une chaîne de longueur nulle ("") dans la filtre de macro ou une procédure événementielle. Cela est particulièrement utile si vous souhaitez vous assurer que les critères superflus n’apparaissent pas dans le nouveau filtre. Par exemple, lorsque vous utilisez la fonctionnalité Filtrer par sélection , les critères que vous utilisez (le texte sélectionné dans le formulaire) sont ajoutés à l’expression de clause WHERE de la propriété Filter ou ServerFilter et apparaissent à la fois dans la fenêtre Filtrer par formulaire et la fenêtre Filtre/tri avancé ou dans la fenêtre Filtre par formulaire du serveur . Vous pouvez supprimer ces anciens critères à l'aide de l'événement Filter.

  • Entrez les paramètres par défaut pour le nouveau filtre. Pour ce faire, définissez la propriété Filter ou ServerFilter avec ces critères. Par exemple, vous pouvez souhaiter que tous les filtres d’un formulaire Produits affichent uniquement les produits actuels (produits pour lesquels le contrôle Discontinued dans le formulaire Produits n’est pas sélectionné).

  • Utiliser votre propre fenêtre filtre personnalisé au lieu d'une des fenêtres de filtre Microsoft Access. Lorsque l'événement Filter se produit, vous pouvez ouvrir votre propre formulaire et utiliser les entrées de ce formulaire pour définir la propriété Filter ou ServerFilter et filtrer le formulaire d'origine. Lorsque l’utilisateur ferme ce formulaire personnalisé, définissez la propriété FilterOn ou ServerFilterByForm du formulaire d’origine sur True (1) pour appliquer le filtre. L’annulation de l’événement Filter empêche l’ouverture de la fenêtre filtre Access.

  • Empêcher certains contrôles du formulaire d'apparaître ou utilisé dans la fenêtre Filtrer par formulaire ou Filtrer par formulaire sur serveur. Si vous masquez ou désactivez un contrôle dans la macro ou la procédure événementielle Filter , le contrôle est masqué ou désactivé dans la fenêtre Filtrer par formulaire ou Filtrer par formulaire du serveur et ne peut pas être utilisé pour définir des critères de filtre. Vous pouvez ensuite utiliser l'événement ApplyFilter pour afficher ou activer ce contrôle une fois que le filtre est appliqué, ou lorsque le filtre est supprimé du formulaire.

Exemple

L’exemple suivant montre comment désactiver le contrôle TotalDue sur un formulaire Commandes lorsque l’utilisateur tente de créer un filtre, afin que l’utilisateur ne puisse pas filtrer sur ce champ. Tous les enregistrements qui ont une valeur TotalDue et qui répondent aux autres critères de filtre sont toujours affichés sur le formulaire filtré. Cet exemple oblige aussi l'utilisateur à utiliser la fenêtre Filtrer par formulaire et non la fenêtre Filtre/tri avancé.

Pour essayer cet exemple, ajoutez la procédure événementielle suivante à un formulaire Commandes qui contient un contrôle TotalDue . Essayez de créer un filtre à l’aide de la fenêtre Filtre/tri avancé qui utilise le contrôle TotalDue . Essayez aussi de créer le même filtre à l'aide de la fenêtre Filtrer par formulaire.

Private Sub Form_Filter(Cancel As Integer, FilterType As Integer) 
    If FilterType = acFilterByForm Then 
        Forms!Orders!TotalDue.Enabled = False 
    ElseIf FilterType = acFilterAdvanced Then 
        MsgBox "The best way to filter this form is to use the " _ 
            & "Filter By Form command or toolbar button.", vbOKOnly + vbInformation 
        Cancel = True 
    End If 
End Sub

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.