Vous êtes sur la page 1sur 23

Cration d'un formulaire de recherche multicritres

par Jean BALLAT (Espace perso de jeannot45)


Date de publication : 18/12/08 Dernire mise jour :

Cet article se propose de crer un formulaire de recherche multicritres suivant deux mthodes (sans Code ou avec Code).

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

I - INTRODUCTION..................................................................................................................................................... 4 II - LES CAHIERS DES CHARGES............................................................................................................................4 II-A - La recherche sans code............................................................................................................................... 4 II-B - La recherche avec code VBA.......................................................................................................................4 II-C - Les tables de la base de donnes...............................................................................................................4 III - LES FORMULAIRES............................................................................................................................................ 5 III-A - La recherche sans code.............................................................................................................................. 5 III-A-1 - Les listes droulantes combines....................................................................................................... 5 III-A-1-a - Cration de la liste des agences via l'assistant..........................................................................5 III-A-1-b - Personnalisation de la liste.........................................................................................................6 III-A-2 - Cration du sous-formulaire................................................................................................................ 8 III-A-2-a - Cration de la source................................................................................................................. 8 III-A-2-b - Cration du sous-formulaire....................................................................................................... 9 III-A-2-b-i - Cration de l'entte et de la section Dtail......................................................................... 9 III-A-2-b-ii - Cration du pied de formulaire...........................................................................................9 III-A-2-c - Les proprits............................................................................................................................. 9 III-A-2-c-i - Proprits du sous-formulaire..............................................................................................9 III-A-2-c-ii - La section Pied de formulaire...........................................................................................10 III-A-2-d - Implantation du sous-formulaire................................................................................................10 III-A-3 - Cration de la zone de liste.............................................................................................................. 10 III-A-4 - Rcupration des statistiques........................................................................................................... 10 III-A-5 - Rcupration du nombre de fiches................................................................................................... 10 III-A-6 - le bouton "Effacer tous les filtres"..................................................................................................... 11 III-A-6-a - Implantation du bouton............................................................................................................. 11 III-A-6-b - La macro "Initialisation des contrles"......................................................................................11 III-A-7 - Le bouton "Imprimer le filtre".............................................................................................................12 III-A-7-a - Implantation du bouton............................................................................................................. 12 III-A-7-b - La macro "Imprimer le Filtre"....................................................................................................12 III-A-8 - La macro de "Mise jour des Listes"............................................................................................... 12 III-A-8-a - Composition de la macro "MiseAJour"..................................................................................... 13 III-A-8-b - Implantation de la macro.......................................................................................................... 13 III-A-9 - Ouverture du formulaire "Fiche Employ".........................................................................................13 III-A-9-a - Prsentation de la fiche dtaille............................................................................................. 13 III-A-9-b - Cration et implantation de la macro "M_OuvrirFiche".............................................................14 III-A-10 - Initialisation du formulaire principal................................................................................................. 14 III-B - La recherche avec code VBA....................................................................................................................14 III-B-1 - Le sous-formulaire "SF_FiltreAvecCode".......................................................................................... 15 III-B-1-a - Cration et proprits du sous-formulaire................................................................................ 15 III-B-1-b - Implantation du sous-formulaire................................................................................................15 III-B-2 - La liste "lstEmploye"..........................................................................................................................15 III-B-3 - Le bouton "Effacer tout".................................................................................................................... 15 III-B-4 - Le bouton "Imprimer le filtre".............................................................................................................15 III-B-5 - La rcupration des statistiques....................................................................................................... 16 III-B-6 - Le Code VBA dans le formulaire...................................................................................................... 16 III-B-6-a - La procdure "sur Ouverture" du formulaire principal.............................................................. 16 III-B-6-b - La procdure "sur Clic" du bouton "Effacer tout"......................................................................17 III-B-6-c - La procdure "Sur Chargement" du sous-formulaire................................................................ 17 III-B-6-d - La procdure "sur Clic" du bouton "Imprimer le filtre".............................................................. 20 III-B-6-e - La procdure "sur Double Clic" de la liste lstEmploye............................................................. 20 IV - LES ETATS......................................................................................................................................................... 20 IV-A - L'tat sans code........................................................................................................................................ 20 IV-A-1 - Description de l'tat.......................................................................................................................... 20 IV-A-2 - La macro "MiseAJourControle"......................................................................................................... 21 IV-A-3 - Implantation de la macro.................................................................................................................. 21 IV-B - L'tat avec Code........................................................................................................................................22 IV-B-1 - Description de l'tat.......................................................................................................................... 22 IV-B-2 - Le Code VBA.................................................................................................................................... 22 IV-B-2-a - La procdure "Sur Ouverture" de l'tat.................................................................................... 22
-2Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

IV-B-2-b - La procdure "Au Formatage" de l'entte de l'tat.................................................................. 22 V - CONCLUSION..................................................................................................................................................... 22 VI - TELECHARGEMENT..........................................................................................................................................22 VII - REMERCIEMENTS............................................................................................................................................22

-3Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

I - INTRODUCTION
Cet article n'est pas le premier dvelopper ce sujet (cf les cours et tutoriels). Cependant, j'ai cherch, dans celuici, traiter le sujet sans code (pour les non initis) et avec un peu de code (pour les accros). Les filtres seront appliqus soit par choix dans des listes droulantes dpendantes (Formulaire SANS code), soit par double-clic dans une des colonnes du sous-formulaire (Formulaire AVEC code).

II - LES CAHIERS DES CHARGES II-A - La recherche sans code


Le but est de pouvoir, au travers d'un sous-formulaire : - afficher la fiche d'un employ en rcuprant des critres de filtre dans des listes droulantes combines. - imprimer le rsultat des filtres en affichant dans l'tat le dtail des critres appliqus. La mise jour automatique des listes se fera via des macros simples. On entendra par "listes combines", des listes dont le contenu sera en fonction des choix faits dans les autres listes affiches (aussi bien en amont qu'en aval).

II-B - La recherche avec code VBA


Le but est de pourvoir, partir d'un sous-formulaire, filtrer les donnes en double-cliquant sur les colonnes de celui-ci. Le double-clic pourra se faire dans un ordre quelconque. Le rsultat sera imprimable. Dans l'tat, on retrouvera le dtail des critres du filtre appliqu.

II-C - Les tables de la base de donnes


La base de donnes est constitue de 5 tables Tables T_Employes Objet Cl Primaire CodeEmploye CodeAgence CodeDiplome Relation Avec (Cl trangre) Table lie

Liste le dtail des employs de la Socit T_Agences Liste les agences du Groupe T_Diplomes Liste les Diplomes des employs T_PosteOccupe Liste les diffrents postes de l'entreprise T_SituationFamilleListe les diffrentes situations de famille (Mari, Clibataire ...)

CodeAgence CodeDiplome

T_Employes T_Employes

CodePosteOccupe CodePosteOccupe T_Employes CodeFamille CodeFamille T_Employes

Le modle relationnel de la base de donnes utilise


-4Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

La base de donnes est disponible dans le chapitre "TELECHARGEMENT"

III - LES FORMULAIRES III-A - La recherche sans code


La composition de ce formulaire se droule en 7 tapes. 1) La cration des listes droulantes combines 2) La composition du sous-formulaire 3) La cration de la zone de liste dpendante des listes de critres 4) La rcupration des statistiques 5) La rcupration du nombre de fiches (avec respect du singulier et du pluriel) 6) Le bouton qui rinitialise le formulaire 7) Le bouton d'impression du rsultat du filtre

III-A-1 - Les listes droulantes combines


Je ferai plusieurs remarques par rapport la cration des listes: - La liste affiche la mention " ---Tous--- " au-dessus des valeurs - Les donnes sont tries par ordre croissant

III-A-1-a - Cration de la liste des agences via l'assistant


Le formulaire principal n'est li aucune table. On le dit alors "indpendant". Cliquez donc sur l'onglet "Formulaires" dans la fentre "Base de donnes" et doublecliquez sur "Crer un formulaire en mode Cration" Cliquez sur l'outil "Zone de liste droulante" dans la boite outils. Cliquez sur le formulaire l'endroit o vous souhaitez implanter votre liste. Access ouvre alors un assistant. Nous suivrons donc toutes les tapes de celui-ci. Etape 1 : Dans cette tape, Access nous donne le choix pour alimenter notre liste. Laissez le choix par dfaut, car les donnes seront issues d'une table. Etape 2 : Access nous affiche donc la liste des tables ou des requtes disponibles. Choisissez la table "T_Agences". Etape 3 : A ce niveau de l'assistant, nous allons choisir les lments qui nous seront ncessaires dans notre liste. Cliquez sur le bouton affichant ">>" afin de rcuprer les deux champs. Etape 4 :

-5Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

Cette phase nous propose de trier les donnes de notre liste. Choisissez de trier les donnes par Agence. Etape 5 : Nous pouvons ce niveau, modifier la largeur de nos colonnes. Access cache la colonne cl par dfaut. Laissez-la masque. Ainsi aprs notre choix, Access affichera le nom de l'agence choisie et non son code. (Une liste droulante ne pouvant afficher l'information d'une seule colonne la fois. Cependant, il est noter que si plusieurs champs font intgrs de la requte source de notre liste, ceux-ci seront visibles lors du droulement de la liste, mais que dans tous les cas, Access n'affichera dans le contrle de liste que le contenu slectionn du premier champ de celle-ci dont la largeur de la colonne est suprieure 0 cm). Etape 6 : Nous voici arrivs au terme de l'assistant. Il suffit de saisir ici un texte qui s'affichera la gauche de notre liste. Si cela n'est pas fait par dfaut, tapez "Agence". Procdez de la mme faon avec les 3 autres listes en utilisant les tables : - T_Diplomes (nom de la liste : cboDiplome) - T_PosteOccupe (nom de la liste : cboPosteOccupe) - T_SituationFamille (nom de la liste : cboFamille).

III-A-1-b - Personnalisation de la liste


Cette phase de la cration de notre contrle va nous permettre de : - Renommer le contrle qui pour l'instant a reu un nom par dfaut (ModifiableX - X tant un numro affect par Access). - Modifier le contenu de la liste afin de pouvoir la rendre solidaire des 3 autres. - Ajouter les expressions critres dans la requte source de la liste. - Ajouter dans la source de notre liste la mention " --- Tous --- ". En cliquant droit sur le contrle, affichez les proprits. Premire modification : Changer le nom de notre contrle. Aprs avoir affich les proprits, cliquez sur l'onglet "Autres" et saisissez : "cboAgence". J'ai prfix le nom avec "cbo" puisqu'il s'agit d'une liste droulante c'est dire une combobox. Ce principe de prfixage permet de savoir, en relisant les noms des objets de notre base, de quel type d'objet il s'agit. Je vous conseille ce propos la lecture de l'article de Agyronet sur les conventions typographiques dans le Code Visual Basic Seconde modification : Rendre la liste dpendante des 3 autres. Cliquez sur l'onglet "Donnes" puis cliquez dans la proprit "Contenu". Deux boutons s'affichent alors sur la droite du formulaire. Cliquez sur le bouton contenant "...". Access affiche alors la fentre de gnration des requtes. Afin de rendre les 4 listes solidaires, nous allons ajouter la table "T_Employes". Par ce biais, on obtiendra un lien avec les autres listes.

-6Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

On ajoutera dans le contenu de la requte les champs "CodeDiplome", "CodePosteOccupe", "CodeFamille". Ils ne seront pas affichs car ils servent uniquement de support nos critres. Troisime modification : Ajouter les critres sous les champs CodeDiplome, CodePosteOccupe, CodeFamille. Si pour les Utilisateurs confirms la cration d'une expression ne pose pas de problme particulier, je vais quand mme repasser en dtail les manipulations faire pour crer une expression critre en utilisant le gnrateur d'expressions. Avant de passer au pas pas pour la cration de l'expression, il me faut prciser que la fonction que nous allons utiliser est une fonction conditionnelle du mme type que la fonction SI() d'Excel. En effet, nous ne rcuprerons la valeur de la liste droulante que si un choix a t fait dans la liste. Ainsi, sous le champ "GExpression2", si la liste CodeDiplome affiche la mention " ---Tous--- " alors je n'ai pas de critre sinon je rcupre la valeur du choix. Cette fonction qui s'appelle VraiFaux dans Access s'articule comme SI. Elle se dcompose en trois arguments: =VraiFaux(Condition; Valeur si Condition vraie; Valeur si condition fausse). Etape 1 : Pour lancer le gnrateur d'expression, il faut revenir dans l'cran gnrateur des requtes. - Cliquez droit sur la liste droulante "cboAgence" et affichez les proprits. - Dans l'onglet "Donnes", cliquez dans la proprit "Contenu" puis sur le bouton tout droite. - Cliquez dans la ligne "Critres" sous le champ "CodeDiplome" (cf la petite loupe). - Cliquez sur l'outil "gnrateur d'expressions" (Cf la grande loupe). Etape 2 : Nous allons composer la partie "Condition" de notre fonction. Suivez les tapes ci-dessous : 1) Tapez =GExpression2 2) Double-Cliquez une fois sur le "+" du dossier "Formulaires". 3) Cliquez une Fois sur le "+" du dossier "Formulaires chargs". 4) Cliquez une fois sur le nom du formulaire qui nous intresse. 5) Double-cliquez sur le nom de la liste que nous sommes occups lier (ici "cboDiplome"). 6) Tapez =0 (Valeur de notre liste si la mention " ---Tous--- " est affiche). Etape 3 : On continue avec le second argument : Valeur si condition Vraie. Comme prcdemment, suivons le pas pas : 1) Tapez ";" le traditionnel sparateur d'arguments. 2) Double-cliquez sur le "+" du dossier "Tables". 3) Cliquez une fois sur le dossier "T-Employes". 4) Le gnrateur ajoute "expr". Cliquez simplement sur le mot et supprimez le. Etape 4 : Enfin, nous allons terminer notre fonction en crant le troisime argument : 1) Cliquez une fois sur le nom du formulaire qui nous intresse. 2) Double-cliquez sur le nom de la liste que nous sommes occups lier (ici c'est toujours "cboDiplome"). 3) Le gnrateur ajoute "expr" comme prcdemment, on le supprime sans tat d'me et on ferme l'expression par une parenthse.

-7Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

Il ne nous reste plus qu' valider et recommencer la mme opration pour les 2 autres champs de la requte. Enfin, vous avez compris que pour lier les autres listes entre-elles, il faut faire la mme chose pour les 3 autres. A vous de jouer. Allez-y doucement, cela vous vitera quelques recherches assommantes... Quatrime modification : Ajouter la mention "Tous" dans la liste. Nous devrons intervenir dans la syntaxe SQL de la requte source de notre liste. Il nous faut donc retourner dans les proprits de notre liste afin d'afficher le gnrateur de requte. Nous commenons connatre le chemin : - Clic droit sur le contrle. - Clic "Proprits" puis onglet "Donnes". - Clic dans la proprit "Contenu" puis sur le bouton droite de la ligne. - Dans le gnrateur de requte, cliquez sur la liste des affichages disponibles. - Choisissez alors "SQL

Cliquez la fin de la syntaxe affiche, supprimez le caractre ";" et tapez : UNION SELECT 0, " ---Tous---" FROM T_Agences Fermer la fentre Sql et cliquez sur Oui pour enregistrer les modifications. Quelques explications sur la syntaxe saisie. - Dans une requte UNION il doit y avoir autant de champs dans les deux requtes runies. - La mention " ---Tous---" est entre guillemets, texte oblige. - Remarquez l'espace avant les tirets de la mention "Tous". Ainsi en triant sur l'Agence, "Tous" sera en premire ligne. Vous trouverez une autre mthode pour ajouter "Tous" dans une liste dans la F.A.Q Il vous reste donc raliser ce mme travail sur les 3 autres listes du formulaire

III-A-2 - Cration du sous-formulaire III-A-2-a - Cration de la source

Voici l'image de la requte source de notre sous-formulaire. Nous aurons besoin de recrer les mmes critres que dans les diffrentes listes. En effet, lorsqu'un choix est fait dans une des listes, il faut que le sous-formulaire soit mis jour en fonction du choix. Nous retrouvons sous les quatre champs codes (Agence, Diplme, Famille, PosteOccupe) la mme syntaxe "VraiFaux" que nous avions cre dans nos diffrentes listes du formulaire principal. Enregistrez la requte sous le nom de "R_Personnel" Voici un tableau reprenant les diffrentes expressions utilises. Champ CodePosteOccupe Expression critre VraiFaux([Formulaires]![F_FiltreSansCode]! [cboPosteOccupe]=0;[T_Employes].

-8Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

CodeDiplome

CodeAgence

CodeFamille

[CodePosteOccupe];[Formulaires]! [F_FiltreSansCode]![cboPosteOccupe]) VraiFaux([Formulaires]![F_FiltreSansCode]! [cboDiplome]=0;[T_Employes]. [CodeDiplome];[Formulaires]! [F_FiltreSansCode]![cboDiplome]) VraiFaux([Formulaires]![F_FiltreSansCode]! [cboAgence]=0;[T_Employes].[CodeAgence]; [Formulaires]![F_FiltreSansCode]! [cboAgence]) VraiFaux([Formulaires]![F_FiltreSansCode]! [cboSituationFamille]=0;[T_Employes]. [CodeFamille];[Formulaires]! [F_FiltreSansCode]![cboSituationFamille])

III-A-2-b - Cration du sous-formulaire III-A-2-b-i - Cration de l'entte et de la section Dtail


Cliquez sur le groupe "Formulaires". Double-cliquez sur "Crer un formulaire en mode Cration". Affichez les sections Entte et pied de formulaire. Affichez la fentre des proprits et cliquez dans l'onglet "Donnes". Dans la proprit "Source", slectionnez la requte "R_Personnel". Positionnez les champs comme dans l'image ci-contre.

III-A-2-b-ii - Cration du pied de formulaire


Remarquez les champs statistiques implants dans le Pied de formulaire. Ceux-ci permettront de rcuprer les donnes dans le formulaire principal. Ci-dessous le dtail des champs statistiques (nom du contrle et Source contrle) Nom du Controle txNbPersonnelSF txtMasseSalarialeSF txtMoyenneSalaireSF txtMaxSalaireSF txtMinSalaireSF Source Contrle =Compte([NomEmploye]) =Somme([SalaireActuel]) =Moyenne([SalaireActuel]) =Max([SalaireActuel]) =Min([SalaireActuel])

III-A-2-c - Les proprits III-A-2-c-i - Proprits du sous-formulaire


Cliquez droit sur l'extrieur du formulaire et affichez les proprits. Paramtrez le en reportant les diffrentes proprits comme ci-contre. On remarquera la proprit : "Affichage par dfaut : Formulaires continus". Ce paramtrage permettra d'afficher plusieurs enregistrements l'un au-dessous de l'autre.

-9Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

III-A-2-c-ii - La section Pied de formulaire


Cliquez sur l'onglet "Format" ou "Toutes" des proprits du pied de formulaire et mettez la proprit "Visible" sur Non

III-A-2-d - Implantation du sous-formulaire


Affichez en cte cte la fentre base de donnes et le formulaire principal en mode cration. Cliquez maintenu sur le SF_FiltreSansCode et glissez dans le formulaire principal l'endroit souhait.

III-A-3 - Cration de la zone de liste


La zone de liste a pour but d'afficher les noms des salaris issus des diffrents filtres appliqus par les listes droulantes. La source de celle-ci est donc galement lie aux quatre listes de choix. Ouvrez le formulaire principal en mode cration. Dessinez le contrle zone de liste. Cliquez droit sur celui-ci et affichez les proprits. Voici ci-contre les diffrentes proprits modifier.

III-A-4 - Rcupration des statistiques


Dans le formulaire principal, nous implanterons 4 champs indpendants qui nous permettront de rcuprer les valeurs calcules dans le pied du sous-formulaire. Voir dans le tableau ci-dessous les caractristiques des diffrents champs. Nom du contrle txtMasseSalariale txtMoyenneSalaire txtSalaireMaxi txtSalaireMini Source du Contrle =SF_FiltreSansCode.Formulaire! txtMasseSalarialeSF =SF_FiltreSansCode.Formulaire! txtMoyenneSalaireSF =SF_FiltreSansCode.Formulaire! txtMaxSalaireSF =SF_FiltreSansCode.Formulaire! txtMinSalaireSF

Ces expressions de calcul pourront tre cres par l'intermdiaire du gnrateur d'expressions. Voir l'utilisation plus haut dans cet article.

III-A-5 - Rcupration du nombre de fiches


La rcupration du nombre de fiches ne devrait pas poser de problmes car il s'agit de rcuprer la valeur dans le pied de formulaire du sous-formulaire, donc comme ci-dessus. Cependant, il nous faut respecter l'accord du mot "fiche" en fonction du nombre trouv. Nous utiliserons donc la fonction VraiFaux qui nous avons dj explique plus haut et une concatnation du mot "fiche" au singulier ou au pluriel suivant le cas. L'expression crer dans la proprit "SourceContrle" du contrle "txtNbSalaries" est donc : =VraiFaux(SF_FiltreSansCode.Formulaire!txNbPersonnelSF <=1 ;SF_FiltreSansCode.Formulaire!txNbPersonnelSF & " Fiche";SF_FiltreSansCode.Formulaire!txNbPersonnelSF & " Fiches")
- 10 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

III-A-6 - le bouton "Effacer tous les filtres" III-A-6-a - Implantation du bouton


Ce bouton est implant via la boite outils. Le dessin de celui-ci ne prsente pas de difficults particulires. Cependant, il faudra bien lui appliquer une action lorsqu'on cliquera dessus. Dans un premier temps, cliquez sur le bouton "Assistants de contrle" de la bote outils afin de dsactiver ceux-ci. Cliquez nouveau dans la bote outils sur l'outil "Bouton" et dessinez un rectangle sur le formulaire principal. Afficher les proprits du bouton et modifier les proprits suivantes : - Nom (onglet "Autres") : btnEffacerTout - Lgende (onglet : "Format") : Effacer tous les filtres

III-A-6-b - La macro "Initialisation des contrles"

Description de la fentre "Macro" Au niveau de l'image de gauche : 1) Bouton qui affiche ou masque la colonne "Nom de la Macro". (marque galement par (1) gauche de l'image). En identifiant les macros par un nom cela nous permet d'en regrouper plusieurs dans une mme feuille. 2) Colonne "Action" : permet de choisir l'action que la macro devra excuter. 3) Colonne "Commentaire" : reoit un texte explicitant l'action excute. Au niveau de l'image de droite : 1) Argument : Zone permettant de paramtrer l'action excuter. 2) Aide contextuelle sur l'argument en cours de renseignement. (A noter : F1 toujours de rigueur pour complter l'information). Nous allons crire une macro qui va initialiser les diffrents lments de notre formulaire l'ouverture de celui-ci ou en cliquant sur le bouton que nous venons de dessiner. Pour crire une macro : - Dans la fentre "Base de donnes", cliquez sur l'objet "Macros" puis "Nouveau". - Dans la fentre affiche, cliquez sur l'outil marqu (1) dans l'image de gauche ci-dessus.(La colonne "Nom de la macro" s'affiche. (Numrote (1) galement)). - Dans la colonne de gauche : Saisir un nom suffisamment vocateur de l'action de la macro (Ici : Initialisation). - Dans la seconde colonne intitule "Action", slectionnez l'action "DfinirValeur". En choisissant une action, le volet des arguments s'affiche. - Renseignez les arguments comme dans le tableau ci-dessous. Il y aura autant d'actions "DfinirValeur" qu'il y aura de contrles initialiser. Action DfinirValeur DfinirValeur DfinirValeur DfinirValeur Expression [Formulaires]! [F_FiltreSansCode]! [cboAgence] [Formulaires]! [F_FiltreSansCode]! [cboDiplome] [Formulaires]! [F_FiltreSansCode]! [cboPosteOccupe] [Formulaires]! [F_FiltreSansCode]! [cboSituationFamille] Valeur

0 0 0 0

- 11 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

Lorsque les valeurs sont affectes aux diffrentes listes, il faut "Actualiser" le sous-formulaire et la zone de liste. Nous allons donc ajouter deux actions notre macro comme indiqu ci-dessous. Action Nom du Contrle SF_FiltreSansCode lstEmploye

Actualiser Actualiser

Il faut maintenant enregistrer la macro. Cliquez sur "Enregistrer" puis saisissez le nom "M_ManipulationsControles" Il ne nous reste plus qu' implanter la macro sur le bouton. - Cliquez droit sur le bouton. - Affichez les proprits. - Cliquez sur l'onglet "Evnements". - Cliquez dans la proprit : sur clic. - Cliquez sur la liste droulante droite (Voir la loupe). - Choisissez dans la liste propose la macro implanter (ici : M_ManipulationsControles.Initialisation).

III-A-7 - Le bouton "Imprimer le filtre" III-A-7-a - Implantation du bouton


Ce bouton est bti de la mme faon que le prcdent. Je vous laisse donc le raliser. Les proprits modifies seront : - Nom (onglet "Autres") : btnImprimerFiltre - Lgende (onglet : "Format") : Imprimer le filtre

III-A-7-b - La macro "Imprimer le Filtre"


Cette macro aura pour but de lancer l'impression en mode Aperu. Elle se construira de la mme faon que la prcdente. - Cliquez sur l'objet Macros. - Cliquez sur Nouveau. - Afficher la colonne Nom de la macro en cliquant sur l'outil concern. - Tapez Imprimer. Ce sera le nom de notre macro. - Saisissez les diffrents lments de la macro repris dans le tableau ci-dessous. - Puis enregistrer la macro sous le nom "M_ImprimerFiltre" et fermer. Action Nom de l'tat Affichage E_ListePersonnelFiltreeSansCode Aperu avant impression

OuvrirEtat

Il faut donc maintenant implanter la macro sur l'vnement Sur Clic du bouton. Pour raliser cette opration, nous passerons par la fentre des proprits. - Cliquez droit sur le bouton. - Cliquez sur l'onglet Evnements. - Cliquez dans l'vnement Sur Clic. - Ouvrez la liste droulante et choisissez la macro M_ImprimerFilte.Imprimer

III-A-8 - La macro de "Mise jour des Listes"


Nous avons donc nos quatre listes qui nous permettront de faire le choix de nos diffrents critres.

- 12 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

Aprs chaque choix, il est donc ncessaire que les enregistrements rpondant aux critres choisis s'affichent dans le sous-formulaire et que conjointement, les listes se mettent jour puisqu'elles sont toutes dpendantes les unes des autres. Nous allons donc crire une nouvelle macro que nous irons implanter dans la feuille "M_ManipulationsControles". Commenons par ouvrir la feuille "M_ManipulationsControles" en cliquant sur le groupe "Macros". Cliquez droit sur le nom de la feuille puis cliquez sur "Modifier".

III-A-8-a - Composition de la macro "MiseAJour"


Positionnez vous sous la dernire ligne de la macro prcdente en laissant une ligne vierge. (Cette ligne vide n'a pas de rle particulier, si ce n'est simplement pour bien structurer notre feuille. Le nom de la macro suffit Access pour interrompre le droulement de la macro prcdente). Composez la macro en reprenant les actions et les arguments dcrits dans le tableau ci-dessous.

Nom de la macro MiseAJour

Action Actualiser Actualiser Actualiser Actualiser Actualiser Actualiser

Argument cboAgence cboDiplome cboPosteOccupe cboSituationFamille SF_FiltreSansCode lstEmploye

Commentaire Actualise la liste "cboAgence" Actualise la liste "cboDiplome" Actualise la liste "cboPosteOccupe" Actualise la liste "cboSituationFamille" Actualise le sous-formulaire "SF_FiltreSansCode" Actualise la liste "lstEmploye"

III-A-8-b - Implantation de la macro


Il va falloir maintenant implanter sur chaque liste droulante la macro que nous venons d'crire. - Ouvrez le formulaire "F_FiltreSansCode" en mode Cration. - Cliquez droit sur la premire liste et affichez les proprits. - Cliquez dans l'onglet "Evnements" puis dans l'vnement "Aprs MAJ". - Ouvrez la liste droulante et choisissez la macro : "M_ManipulationsControles.MiseAJour". Rptez cette opration sur les quatre listes droulantes du formulaire.

III-A-9 - Ouverture du formulaire "Fiche Employ" III-A-9-a - Prsentation de la fiche dtaille


Comme prvu dans le cahier des charges, les critres poss dans les listes entrainent l'affichage d'un certain nombre de prnoms dans la liste "lstEmploye". En double-cliquant sur un des prnoms, Access doit nous afficher le formulaire ci-contre.

- 13 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

Ce formulaire ne prsentant pas de difficults particulires, je vous laisse le soin de crer la fiche dtaille comme vous l'entendez. Il faut nanmoins crire une macro qui permettra d'ouvrir celui-ci.

III-A-9-b - Cration et implantation de la macro "M_OuvrirFiche"


Dans le groupe "Macros" faites "Nouveau" et composez la macro comme dtaille dans la tableau ci-dessous. Cette fois-ci, il ne sera pas ncessaire de faire afficher la colonne des noms puisque notre feuille ne contiendra qu'une seule macro. Action Commentaire Ouvre le formulaire F_FicheDetaillee sur l'enregistrement slectionn

OuvrirFormulaire

L'action "OuvrirFormulaire" demande plusieurs arguments. Voir le tableau ci-dessous. Argument Expression F_FicheDetaillee Formulaire [CodeEmploye]=[Formulaires]! [F_FiltreSansCode]![lstEmploye] Standard

Nom Formulaire Affichage Nom Filtre Condition WHERE Mode Donnes Mode Fentre

Fermez et enregistrez la macro sous le nom de "M_OuvrirFiche" Pour implanter la macro, il nous faire appel aux proprits de la liste "lstEmploye" : - Cliquez droit sur le contrle. - Affichez les proprits et cliquez dans l'onglet "Evnements". - Cliquez dans la proprit "sur Double Clic". - Dans la liste droulante, choisissez la macro "M_OuvirFiche". - Enregistrez le formulaire.

III-A-10 - Initialisation du formulaire principal


Pour en terminer avec le formulaire de filtre sans code, il nous reste l'initialiser l'ouverture. Nous procderons comme pour les listes droulantes. - Affichez les proprits du formulaire. - Cliquez dans l'onglet "Evnements". - Cliquez dans la proprit : "Sur Ouverture". - Ouvrez la liste droulante et choisissez la macro "M_ManipulationsControles.Initialisation". - Enregistrez puis fermez votre formulaire. Voil, notre formulaire de consultation multicritres sans code est termin !

III-B - La recherche avec code VBA


La composition de ce formulaire se droule en 6 tapes : 1) La Cration et l'implantation du sous-formulaire. 2) La cration de la liste des employs. 3) L'implantation et la programmation du bouton "Effacer tout". 4) L'implantation et la programmation du bouton "Imprimer le filtre". 5) La rcupration des donnes statistiques. 6) Le code VBA

- 14 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

III-B-1 - Le sous-formulaire "SF_FiltreAvecCode" III-B-1-a - Cration et proprits du sous-formulaire


Ce formulaire ne prsente pas de difficults majeures. La source de celui-ci est une requte compose de : - T-Employes (Rcupration du CodeEmploye) - T_Agences (Rcupration du nom de l'Agence) - T_Diplomes (Rcupration du libell du diplme) - T_PosteOccupe (Rcupration de la fonction occupe) - T_SituationFamille (Rcupration du libell de la situation de famille). L'organisation des contrles Les tiquettes ont t places dans l'entte de formulaire et alignes avec les zones de texte dans la section "Dtail". Le pied de formulaire Dans le pied de formulaire, dposez une zone de texte indpendante. Modifiez les proprits de ce contrle comme ci-dessous : - Nom : txtMasseSalarialeSF - Source Contrle : =Somme([SalaireActuel]) Ce sous-formulaire sera implant dans le formulaire principal Les proprits du sous formulaire Voici ci-contre les diffrentes proprits modifier dans le sous-formulaire. Pensez positionner la proprit "Visible" du pied de formulaire sur "NON"

III-B-1-b - Implantation du sous-formulaire


Le formulaire principal n'est attach aucune source (Formulaire indpendant). Pour implanter le sous-formulaire, affichez en cte cte un nouveau formulaire et la fentre "Base de donnes". Cliquez maintenu sur le sous-formulaire "SF_FiltreAvecCode" et glissez sur le nouveau formulaire. Nous n'aurons pas grer de Champ Pre, ni de Champ Fils.

III-B-2 - La liste "lstEmploye"


Crez la zone de liste qui va afficher le nom des salaris slectionns. Celle-ci sera totalement gre par le code. Modifiez les proprits comme ci-contre. Positionnez la de manire harmonieuse sur votre formulaire ( chacun ses gots !!!).

III-B-3 - Le bouton "Effacer tout"


En mode "Cration", dessinez un bouton de commande aprs avoir dsactiv l'assistant. Affichez les proprits de celui-ci et modifiez comme ci-dessous : - Nom : btnEffacerLesCriteres - Lgende : Effacer tout

III-B-4 - Le bouton "Imprimer le filtre"


On procdera comme ci-dessus. Les proprits modifier sont : - Nom : btnImprimerFiltre
- 15 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

- Lgende : Imprimer le Filtre

III-B-5 - La rcupration des statistiques


Afin de rcuprer la masse salariale calcule dans le pied du sous-formulaire, implantez une zone de texte dans le formulaire principal sous le sous-formulaire. Crez l'expression de calcul dans la source contrle de celui-ci par le gnrateur d'expression ou en tapant : =SF_FiltreAvecCode.Formulaire!txtMasseSalarialeSF

III-B-6 - Le Code VBA dans le formulaire


On trouvera du code sur plusieurs vnements du formulaire et de ses objets : - sur Ouverture du formulaire principal - sur Chargement du sous-formulaire - sur Clic du bouton "Effacer tout" - sur Clic du bouton "Imprimer le filtre" - sur Double-clic de la zone de liste "Employs"

III-B-6-a - La procdure "sur Ouverture" du formulaire principal


Cette procdure doit, en fait, afficher tout le contenu. Elle sera donc galement utilise sur le "clic" du bouton "Effacer tout". Nous crirons un routine qui pourra tre appele plusieurs fois
Sub InitialisationFormulaire() ' Initialisation des variables p_strSqlWhere = "" 'Rinitialisation du tableau Critres For p_intCompteur = 0 To UBound(p_tabCriteres, 2) p_tabCriteres(1, p_intCompteur) = "Pas de critre pour ce champ" Next ' Initialisation du sous formulaire et rinitialisation Me.SF_FiltreAvecCode.Form.RecordSource = cstSourceFiltre Me.SF_FiltreAvecCode.Requery ' Initialisation de la zone de liste et rinitialisation Me.lstEmploye.RowSource = cstSourceFiltre Me.lstEmploye.Requery End Sub

Dans ce code, on peut remarquer la partie "Rinitialisation des variables"


' Initialisation des variables p_strSqlWhere = "" 'Rinitialisation du tableau Critres For p_intCompteur = 0 To UBound(p_tabCriteres, 2) p_tabCriteres(1, p_intCompteur) = "Pas de critre pour ce champ" Next

Ces variables ont t dclares en public car elles sont rutilises dans diffrentes procdures du projet. La variable p_strSqlWhere est de type string, elle reprsente la clause WHERE qui sera applique la source du sous-formulaire et rcupre par concatnation, les diffrents critres slectionns. D'autre part, la variable p_tabCritres() est une variable tableau dont l'objet est de stocker les valeurs de critres choisies pour les imprimer dans l'tat (voir cahier des charges).

- 16 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

' Initialisation du sous formulaire et rinitialisation Me.SF_FiltreAvecCode.Form.RecordSource = cstSourceFiltre Me.SF_FiltreAvecCode.Requery ' Initialisation de la zone de liste et rinitialisation Me.lstEmploye.RowSource = cstSourceFiltre Me.lstEmploye.Requery

Il s'agit l de l'affectation de la source "cstSourceFiltre" au sous-formulaire et la zone de liste. Cette constante est dclare "Public" puisqu'elle sera rutilise comme source de l'tat. Cette procdure tant mise en place, on peut l'implanter sur l'vnement "Sur Ouverture" du formulaire
Private Sub Form_Open(Cancel As Integer) ' Initialisation du formulaire InitialisationFormulaire End Sub

III-B-6-b - La procdure "sur Clic" du bouton "Effacer tout"


En fait, il s'agit ici de rinitialiser tous les objets du formulaire principal.
Private Sub btnEffacerLesCriteres_Click() ' Initialisation du formulaire InitialisationFormulaire End Sub

III-B-6-c - La procdure "Sur Chargement" du sous-formulaire


Il s'agit en fait d'une procdure qui permettra d'appliquer facilement le mme process sur tous les contrles du sousformulaire. En effet, chaque contrle du sous-formulaire est sens ragir un double-clic rcuprant la valeur du champ pour l'utiliser en tant que critre. Cela sous-entend qu'il faut rpter la mme procdure pour chaque contrle (Ouf !!!, il n'y en aurait que 5). Afin d'viter un travail fastidieux, nous allons implanter par programmation, dans la proprit "sur double clic" de chaque contrle concern, une fonction qui rcuprera notre critre slectionn.
Private Sub Form_Load() ' Dclaration de la variable Dim ctlEnCours As Control ' Redimensionnement du tableau ReDim p_tabCriteres(1, p_intCompteur) ' Boucle sur toutes les zones de texte pour affecter la procdure de filtrage sur l'vnement DoubleClic For Each ctlEnCours In Me.Controls If ctlEnCours.ControlType = acTextBox Then If Left(ctlEnCours.Name, 3) <> "txt" Then ctlEnCours.Properties("onDblClick") = "=FiltreDonnees('" & ctlEnCours.Name & "' , " & ctlEnCours.Name & ")" ' renseigne le tableau avec les noms de champs RemplirTabCriteres (ctlEnCours.Name) End If End If Next ctlEnCours ' Dsactivation de la variable Set ctlEnCours = Nothing End Sub

Dans cette procdure on remarquera :

- 17 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

- La dclaration de la variable ctlEnCours - Le redimensionnement du tableau dynamique p_tabCriteres.


' Dclaration de la variable Dim ctlEnCours As Control ' Redimensionnement du tableau ReDim p_tabCriteres(1, p_intCompteur)

Dans le redimensionnement du tableau, on trouve une variable publique p_intCompteur qui est incrmente dans un sous programme : RemplirTabCriteres que l'on verra un peu plus loin dans l'article.
' Boucle sur toutes les zones de textes pour affecter la procdure de filtrage sur l'vnements DoubleClic For Each ctlEnCours In Me.Controls If ctlEnCours.ControlType = acTextBox Then If Left(ctlEnCours.Name, 3) <> "txt" Then ctlEnCours.Properties("onDblClick") = "=FiltreDonnees('" & ctlEnCours.Name & "' , " & ctlEnCours.Name & ")" ' renseigne le tableau avec les noms de champs RemplirTabCriteres (ctlEnCours.Name) End If End If Next ctlEnCours

Ci-dessus la boucle qui teste le type de contrle et qui implante la fonction FiltreDonnees sur l'vnement "sur Double Clic". Au fur et mesure de la boucle, on renseigne le tableau p_tabCriteres par l'appel de la procdure :
' renseigne le tableau avec les noms de champs RemplirTabCriteres (ctlEnCours.Name)

Dans le cahier des charges, on nous demande de faire apparatre les critres slectionns dans l'entte de l'tat. Pour pouvoir rcuprer les valeurs, je les stocke dans un tableau.
Sub RemplirTabCriteres(ByVal strNomChamp As String)

' Procdure qui permettra de respecter la consigne du cahier des charges : Imprimer les critres slectionns da ' On rcupre les noms des champs dans un tableau avec comme valeur par dfaut : "Pas de critre pour ce champ" If p_intCompteur > 0 Then ReDim Preserve p_tabCriteres(1, p_intCompteur) End If ' renseigne le tableau avec les noms de champs et la mention par dfaut ' qui seront affichs dans l'tat p_tabCriteres(0, p_intCompteur) = strNomChamp p_tabCriteres(1, p_intCompteur) = "Pas de critre pour ce champ" p_intCompteur = p_intCompteur + 1 End Sub

Dans cette procdure je ferai simplement un commentaire :


If p_intCompteur > 0 Then ReDim Preserve p_tabCriteres(1, p_intCompteur) End If

Ce test vrifie que le tableau contient des valeurs et redimensionne celui-ci tout en prservant le contenu dj stock. Enfin, il nous reste dcouvrir la procdure FiltreDonnees

- 18 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45) Function FiltreDonnees(ByVal strNomChamp As String, ByVal varValeurChamp As Variant) ' Teste le contenu du controle If IsNumeric(varValeurChamp) Then ' Initialisation du contenu de p_strSqlWhere sans ajout de quotes si le contenu est ALPHA If p_strSqlWhere = "" Then p_strSqlWhere = "WHERE " & strNomChamp & " = " & varValeurChamp Else p_strSqlWhere = p_strSqlWhere & " AND " & strNomChamp & " = " & varValeurChamp End If Else ' Initialisation du contenu de p_strSqlWhere avec ajout des quotes si le contenu est ALPHA If p_strSqlWhere = "" Then p_strSqlWhere = "WHERE " & strNomChamp & " = '" & varValeurChamp & "'" Else p_strSqlWhere = p_strSqlWhere & " AND " & strNomChamp & " = '" & varValeurChamp & "'" End If End If ' Rcupration de critre slectionn afin de reporter ces donnes dans l'tat For p_intCompteur = 0 To UBound(p_tabCriteres, 2) If p_tabCriteres(0, p_intCompteur) = strNomChamp Then p_tabCriteres(1, p_intCompteur) = varValeurChamp Exit For End If Next ' ractualisation du sous formulaire Me.RecordSource = cstSourceFiltre & p_strSqlWhere Me.Requery ' ractualisation de la zone de liste du formulaire principal With Forms("F_FiltreAvecCode").Controls("lstEmploye") .RowSource = cstSourceFiltre & p_strSqlWhere .Requery End With End Function

Comme vous pourrez le constater, il s'agit d'une fonction. Or une fonction est sense retourner une valeur mais pour ce cas, j'ai crit une procdure "Function" car je ne peux pas faire appel une procdure de type Sub directement dans une proprit du formulaire
' Teste le contenu du contrle If IsNumeric(varValeurChamp) Then ' Initialisation du contenu de p_strSqlWhere sans ajout de quotes si le contenu est ALPHA If p_strSqlWhere = "" Then p_strSqlWhere = "WHERE " & strNomChamp & " = " & varValeurChamp Else p_strSqlWhere = p_strSqlWhere & " AND " & strNomChamp & " = " & varValeurChamp End If Else ' Initialisation du contenu de p_strSqlWhere avec ajout des quotes si le contenu est ALPHA If p_strSqlWhere = "" Then p_strSqlWhere = "WHERE " & strNomChamp & " = '" & varValeurChamp & "'" Else p_strSqlWhere = p_strSqlWhere & " AND " & strNomChamp & " = '" & varValeurChamp & "'" End If End If

Cette partie de la procdure permet de tester le type de valeur rcupre afin d'ajouter les "'" autour de la valeur critre si celle-ci est alpha
' Rcupration de critre slectionn afin de reporter ces donnes dans l'tat For p_intCompteur = 0 To UBound(p_tabCriteres, 2) If p_tabCriteres(0, p_intCompteur) = strNomChamp Then p_tabCriteres(1, p_intCompteur) = varValeurChamp - 19 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45) Exit For End If

Next

Cette partie du code complte le tableau en stockant la valeur du critre slectionn.

III-B-6-d - La procdure "sur Clic" du bouton "Imprimer le filtre"


Private Sub btnImprimerFiltre_Click() On Error GoTo Err_btnImprimerFiltre_Click Dim stDocName As String stDocName = "E_ListePersonnelFiltreeAvecCode" DoCmd.OpenReport stDocName, acPreview Exit_btnImprimerFiltre_Click: Exit Sub Err_btnImprimerFiltre_Click: MsgBox Err.Description Resume Exit_btnImprimerFiltre_Click End Sub

Il s'agit d'une procdure simple, cre partir de l'assistant lors de la gnration du bouton.

III-B-6-e - La procdure "sur Double Clic" de la liste lstEmploye


Private Sub lstEmploye_DblClick(Cancel As Integer) DoCmd.OpenForm "F_FicheDetaillee",,, "CodeEmploye = " & lstEmploye End Sub

Il s'agit de l'ouverture du formulaire "F_FicheDetaillee" en fonction de CodeEmploye rcupr dans la zone de liste.

IV - LES ETATS IV-A - L'tat sans code IV-A-1 - Description de l'tat


Cet tat ne prsente pas de difficults particulires dans sa ralisation. Pour plus d'informations sur la cration d'un tat, je vous encourage lire : Description de la cration d'un tat. On remarquera cependant que dans l'entte d'tat, on retrouve 4 contrles indpendants dnomms : - txtAgence - txtDiplome - txtPosteOccupe - txtSituationFamille Ces champs seront renseigns par une macro place sur l'vnement "au formatage" de la section "Entte d'tat".

- 20 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

IV-A-2 - La macro "MiseAJourControle"


Pour crer cette macro, nous allons ouvrir la feuille macro "M_ImprimerFiltre". - Cliquez sur le groupe "Macros". - Cliquez droit sur la macro "M_ImprimerFiltre". - Cliquez "Mode Cration". - Dans la colonne "Nom macro", tapez "MiseAJourControle". Renseignez les actions et les arguments comme dans le tableau ci-dessous : Nom Macro MiseAjourControle Action DfinirValeur Elment Expression [tats]! VraiFaux([Formulaires]! [E_ListePersonnelFiltreeSansCode]! [F_FiltreSansCode]! [txtAgence] [cboAgence]=0;"Pas de critre sur ce champ";[Formulaires]! [F_FiltreSansCode]! [cboAgence].[column] (1)) [tats]! VraiFaux([Formulaires]! [E_ListePersonnelFiltreeSansCode]! [F_FiltreSansCode]! [txtDiplome] [cboDiplome]=0;"Pas de critre sur ce champ";[Formulaires]! [F_FiltreSansCode]! [cboDiplome]. [column](1)) [tats]! VraiFaux([Formulaires]! [E_ListePersonnelFiltreeSansCode]! [F_FiltreSansCode]! [txtSituationFamille] [cboSituationFamille]=0;"Pas de critre sur ce champ";[Formulaires]! [F_FiltreSansCode]! [cboSituationFamille]. [column](1)) [tats]! VraiFaux([Formulaires]! [E_ListePersonnelFiltreeSansCode]! [F_FiltreSansCode]! [txtPosteOccupe] [cboPosteOccupe]=0;"Pas de critre sur ce champ";[Formulaires]! [F_FiltreSansCode]! [cboPosteOccupe]. [column](1))

DfinirValeur

DfinirValeur

DfinirValeur

Fermez la macro et enregistrez.

IV-A-3 - Implantation de la macro


Pour implanter la macro, il nous faut afficher les proprits de l'entte d'tat : - Affichez l'tat en mode cration. - Cliquez droit dans la section "Entte d'tat". - Affichez la fentre des "Proprits". - Cliquez dans l'onglet "Evnements". - Cliquez dans l'vnement "Au formatage". - Choisissez dans la liste droulante, la macro "M_ImprimerFiltre.MiseAjourControle".

- 21 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

Fermez l'tat et enregistrez.

IV-B - L'tat avec Code IV-B-1 - Description de l'tat


Cet tat est la copie conforme de l'tat sans code, cependant la source de celui-ci variera en fonction des critres qui seront slectionns. On aura donc deux procdures dans cet tat : - A l'ouverture de l'tat qui rcupra une source. - Au formatage de l'entte d'tat pour rcuprer les critres slectionns.

IV-B-2 - Le Code VBA IV-B-2-a - La procdure "Sur Ouverture" de l'tat


Private Sub Report_Open(Cancel As Integer) Me.RecordSource = cstSourceFiltre & p_strSqlWhere

Il s'agit ici, de l'affectation de la source qui est compose de la concatnation de la constante cstSourceFiltre et de la variable p_strSqlWhere.

IV-B-2-b - La procdure "Au Formatage" de l'entte de l'tat


Private Sub Enttetat_Format(Cancel As Integer, FormatCount As Integer) For p_intCompteur = 0 To UBound(p_tabCriteres, 2) Me.Controls("lblCritere" & p_intCompteur).Caption = p_tabCriteres(0, p_intCompteur) Me.Controls("txtCritere" & p_intCompteur) = p_tabCriteres(1, p_intCompteur) Next End Sub

Il s'agit d'une boucle qui relit le tableau p_tabCriteres et qui affecte, aux diffrents contrles en fonction de leur type : - soit le nom du champ - soit la valeur du critre ou la mention par dfaut

V - CONCLUSION
J'ai voulu montr par cet article, deux faons d'apprhender une recherche multicritres. Elle vient complter les mthodes dj dcrites par : - Cafine dans son article : Recherche Multi-critres - Loufab dans son article : Formulaire de recherche prt l'emploi.

VI - TELECHARGEMENT
La base exemple : Recherche Multi-Critres

VII - REMERCIEMENTS
Je voudrais remercier l'ensemble de l'quipe DVP qui fait un travail norme qui a fait de Dveloppez.com ce qu'il est aujourd'hui et qui nous tire toujours vers le haut.
- 22 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)

Merci beaucoup galement : - Philippe Jochmans pour ses conseils aviss. - Heureux-Oli pour sa relecture attentive.

- 23 Copyright 2008 - Jean BALLAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Droits de diffusion permanents accords developpez LLC.
http://jeannot45.developpez.com/articles/access/recherchemulticriteres/

Vous aimerez peut-être aussi