Vous avez srement dj utilis un contrle de formulaire pour paramtrer une requte Select. Mais avec une requte d'analyse croise... ?! Cet article se propose de vous guider dans la ralisation de cette tche.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
1 - Avertissement 2 - Pr requis - Les objets ACCESS ncessaires pour l'exercice. 2.1 - Formulaire et zone liste modifiable 2.2 - La table 3 - La requte d'analyse croise 3.1 - Cration 3.2 - Le critre de slection 4 - Mthode "Full Queries" 4.1 - Les objets requtes 4.2 - La procdure Visual Basic 5 - Mthode Visual Basic pour Application 5.1 - Cration de la requte 5.2 - Cration de la procdure Visual Basic 6 - Conclusion 7 - Remerciements
-2Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
1 - Avertissement
Ce tutoriel n'ayant pas pour but l'apprentissage du Visual Basic pour Application ni du langage SQL, mais la dmonstration que certaines impossibilits d'ACCESS peuvent tre contournes, j'ai choisi de ne pas agrmenter le code du traitement des erreurs et autres vrifications d'usages, ni la zone liste d'une liste dynamique. L'utilisation de la touche F1 est vivement conseille tous les stades de l'utilisation d'ACCESS. L'amlioration constante de l'aide en fait un partenaire de choix dans l'apprentissage permanent d'ACCESS. Personnellement je ne peux m'en passer, ne serait-ce que pour mmoire.
-3Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
2.2 - La table
Crez une table nomme Vente avec les champs suivants : Nom des champs Type longueur/type Vendeur Texte 50 Montant Montaire Anne Numrique Entier Et comme une table ACCESS n'est jamais vide, saisissez les enregistrements ci-dessous.
Vu de la table
-4Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
Ouvrez une nouvelle requte et insrez la table Vente. Fermez le panneau d'insertion de table. Slectionnez dans le menu Requte l'item Analyse Croise. Puis faites glisser les champs de la table un un comme l'exemple prsent ci-dessous :
Excutez la requte... Une erreur se produit dont le message est plus qu'explicite.
Le vilain message d'erreur ! Nous venons de dmontrer que la requte d'analyse croise dans Access ne supporte pas les critres lis. Si vous remplacez le critre "[forms]![Analyse Croise].[zl_critere]" par "2001" vous verrez que cela fonctionne. Vous pouvez essayer avec une requte Select intermdiaire pour le critre, le rsultat est malheureusement identique, cause de la rfrence faite un contrle de formulaire. Ce problme peut tre contourn de trois manires. La premire consiste utiliser le tableau des paramtres clic droit / Paramtres de la requte et d'y inscrire les liens vers les contrles. [forms]![Analyse Croise].[zl_critere] n'oubliez pas de mettre le type de donnes dans la 2me colonne ! Il arrive que sur de grosses requtes trop complexes, Access prouve des problmes d'excution. Dans ce cas il faut utiliser d'autres mthodes.
-5Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
La deuxime est base de requtes. En pleine contradiction avec notre dmonstration ?!. Pas tout fait puisqu'elle consiste crer une table temporaire ne contenant que les enregistrements concerns pour l'analyse. Facile mettre en oeuvre car sans utilisation du VBA, elle peut tre automatise dans une macro. L'autre fait appel au VBA et l'avantage d'tre plus rapide excuter sur de gros volumes de donnes car ne mettant en oeuvre qu'une seule requte.
-6Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
La requte Select transformer. Cette requte permet de slectionner les enregistrements traiter dans la requte d'analyse croise. A l'aide du menu Requte transformez-la en Requte Cration de table...
Un menu prcieux. Sauvegardez la requte sous le nom suivant : Gen_Temp_AC En Choisissant un nom explicite lors d'un dveloppement multi-utilisateur, indiquant qu'il s'agit d'un objet temporaire, vous pourrez dterminer rapidement les tables garder dans l'ihm et celles inclure dans le fichier de donnes partag.
La requte finale. Sauvegardez celle-ci sous Analyse Rsultat par An Nos objets sont prt : Liste des objets Gen_Temp Temp_AC Analyse Rsultat par An Permet de copier les enregistrements de Vente analyser. Table cre avec les enregistrements issues de Vente. Requte d'analyse croise finale base sur Temp_AC.
-7Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
Le bouton d'accs VBA Code insrer dans la procdure Private Sub Btn_FullQueries_Click()
DoCmd.SetWarnings False DoCmd.DeleteObject acTable, "Temp_AC" DoCmd.OpenQuery "Gen_Temp_AC", acViewNormal DoCmd.OpenQuery "Analyse Croise", acViewNormal docmd.setWarnings True ' ' ' ' ' message off supprime la table temporaire cration de la table temporaire affiche l'analyse croise message on
La mthode base de requte est maintenant termine. En slectionnant le critre dans la zone liste et en cliquant sur le bouton vous aurez une belle requte d'analyse croise base sur le critre de la liste.
-8Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
Tiens !? un air de dj vu... Passez en mode SQL l'aide du bouton liste de la barre d'outils requte.
SQL le langage d'interrogation des tables. Le code SQL apparat faites en une copie l'aide de la combinaison de touches Ctrl+C.
Modifiez le code comme suit en respectant bien les espaces aprs les double-ctes Code modifi
Dim Sql As String Sql Sql Sql Sql Sql Sql = = = = = = ' declare la variable Sql
"TRANSFORM Sum(Vente.Montant) AS SommeDeMontant" Sql & " SELECT Vente.Vendeur" Sql & " FROM Vente" Sql & " WHERE (((Vente.Anne) = 2001))" Sql & " GROUP BY Vente.Vendeur" Sql & " PIVOT Vente.Anne;" ' compose la chane SQL
-9Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
Code modifi
DoCmd.DeleteObject acQuery, "AnalyseAnne" CurrentDb.CreateQueryDef "AnalyseAnne", Sql DoCmd.OpenQuery "AnalyseAnne" ' supprime la requte AnalyseAnne ' cre la nouvelle requete ' ouvre la requete
Dernire modification du code et la plus importante ; elle concerne le remplacement du critre statique (2001) par le critre dynamique Me.Zl_critere. Cette instruction fait rfrence la valeur de la zone liste Zl_critere du formulaire courant (me). Elle peut galement tre crite ; Me.Zl_critere.value ou bien Zl_critere.value. Dernire modification effectuer.
'Remplacez cette ligne Sql = Sql & " WHERE (((Vente.Anne) = 2001))" 'Par celle-ci Sql = Sql & " WHERE (((Vente.Anne) = " & Me.Zl_critere & "))"
Notez que l'on peut galement modifier le code SQL d'une requte en faisant rfrence la proprit SQL de l'objet DAO.QueryDef dont un excellent exemple est prsent dans la FAQ.
- 10 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
6 - Conclusion
Si la premire mthode, "Full Queries", est ralisable sans aucune connaissance du VBA, elle pose quelques problmes importants. Avantages Peut tre mise en oeuvre par un rfractaire au VBA. Traage d'erreurs plus simple puisque ne faisant appel qu'au gnrateur de requtes. Je n'en vois pas d'autres... La deuxime mthode, "VBA", est de loin ma prfre. Avantages Inconvnients Excution d'une seule requte permettant un Ne peut tre mise en oeuvre par un gain de temps. rfractaire au VBA. Pas de cration de table temporaire. Traage d'erreurs ncessitant l'intervention 2 niveaux ; VBA et Requte. Modification plus simple ; remplacement de Je n'en vois pas d'autres... la requte dans le code. Si le traage des erreurs dans le code SQL est pour vous un gros problme sachez que les points d'arrts (F9) ainsi que le passage en mode cration de la requte finale vous permettra de la dboguer par le gnrateur de requte. Inconvnients Ncessite l'excution de 2 requtes (slection et analyse croise) qui peut tre rdhibitoire sur un gros volumes de donnes. Implique la cration d'une table temporaire sur le poste client, toujours contraignante en terme d'occupation disque. Ncessite l'intervention sur 2 objets requtes en cas de modification.
- 11 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
7 - Remerciements
Je tiens remercier : GreyBird, Anomaly, Loulou24, srjd, ChristopheJ, FRED.G et Super.Nono40 pour les prcieuses informations dispences dans l'utilisation de l'diteur XML et les diffrents outils et procdures de Developpez.com. Maxence HUBICHE pour son acceuil et ses conseils aviss ainsi que l'quipe du forum ACCESS. A FRED.G (encore et toujours) pour la pertinence de ses corrections, sous oublier les relecteurs de l'ombre. A l'quipe de Developpez.com pour la qualit du site. Je prsente mes plus plates excuses ceux que j'aurais omis de remercier. "Access ne nous rend que ce qu'on lui donne."
- 12 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
Comment crer des requtes d'analyses croises conditionnelles par Fabrice CONSTANS (autres articles)
- 13 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.