Académique Documents
Professionnel Documents
Culture Documents
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).
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
Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)
-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).
-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
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])
-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)
Ces expressions de calcul pourront tre cres par l'intermdiaire du gnrateur d'expressions. Voir l'utilisation plus haut dans cet article.
Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)
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).
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
- 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".
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"
- 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.
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.
- 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)
Cration d'un formulaire de recherche multicritres par Jean BALLAT (Espace perso de jeannot45)
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
- 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)
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
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
Il s'agit d'une procdure simple, cre partir de l'assistant lors de la gnration du bouton.
Il s'agit de l'ouverture du formulaire "F_FicheDetaillee" en fonction de CodeEmploye rcupr dans la zone de liste.
- 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)
DfinirValeur
DfinirValeur
DfinirValeur
- 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)
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.
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/