Vous êtes sur la page 1sur 13

Comment crer des requtes d'analyses croises conditionnelles

par Fabrice CONSTANS (autres articles)

Date de publication : 20/04/2005 Dernire mise jour : 01/09/2006

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 - Pr requis - Les objets ACCESS ncessaires pour l'exercice.


Pour raliser cet exercice ACCESS nous aurons besoin de crer une petite IHM simple compose d'un formulaire contenant une zone de liste et deux boutons de commandes. IHM : Interface Homme-Machine tout ce qui permet l'utilisateur d'exploiter des donnes. Les formulaires et tats sont les composants d'une IHM.

2.1 - Formulaire et zone liste modifiable


Pour commencer nous allons dfinir les objets ncessaires pour la ralisation de l'exercice. Ouvrez un fichier de base de donnes Microsoft ACCESS vierge. Commencez par crer un formulaire que vous nommerez Analyse Croise. Dans ce formulaire ajoutez une zone de liste droulante nomme Zl_critere. Celle-ci contiendra le critre pour la requte d'analyse croise. Les proprits de Zl_critere sont les suivantes : Proprit Valeur Nom Zl_critere Origine source Liste de valeurs Contenu 2001;2002 Nbre colonnes 1 Sauvegardez le formulaire, passez-le en mode utilisation et slectionnez la valeur 2001 dans la zone liste. La valeur de cette zone liste constituera notre critre.

Voici Zl_critere ! Ne fermez pas le formulaire avant la fin de l'exercice.

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)

3 - La requte d'analyse croise 3.1 - Cration


Pour la requte d'analyse croise nous allons faire trs simple. Ce n'est qu'un exercice.

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 :

Vu de la requte en mode cration. Testez la requte et sauvegardez-la sans la fermer.

3.2 - Le critre de slection


Nous allons tenter prsent de lier la zone liste contenant le critre notre belle requte. Pour cela nous allons devoir rajouter du code dans la cellule Critre de la dernire colonne la place du 2001. Le lien vers notre critre
[formulaires]![Analyse Croise].[Zl_Critere]

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)

4 - Mthode "Full Queries"


Pour mettre en oeuvre cette mthode vous devez crer une requte cration de table, une requte d'analyse croise et une procdure en Visual Basic pour Application (possible par macro).

4.1 - Les objets requtes


Pour crer la premire requte, procdez de la mme manire que pour la cration d'une requte de type Select, suivant le modle prsent ci-dessous.

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.

4.2 - La procdure Visual Basic


Bien que cette procdure puisse tre ralise dans une macro, nous allons plutt la raliser en VBA. Passez le formulaire Analyse Croise en mode cration. Crer un bouton de commande que vous nommez Btn_FullQueries et qui porte Analyse Croise Full Queries comme lgende. Sur l'vnement Sur Clic slectionnez [Procdure vnementielle] puis cliquez sur le bouton pour crer une procdure VBA.

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

5 - Mthode Visual Basic pour Application


La mthode base de Visual Basic pour Application est beaucoup plus simple mettre en oeuvre pour un peu qu'on connaisse le langage VBA et les requtes. Il est conseill de crer une requte d'analyse croise l'aide du gnrateur, cela vite les erreurs potentielles.

5.1 - Cration de la requte


Crez la requte d'analyse croise identique la premire ralise.

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.

Enregistrez la requte sous le nom AnalyseAnne.

5.2 - Cration de la procdure Visual Basic


Dans le formulaire crez un deuxime bouton que vous nommez Btn_FullVBA avec la lgende Analyse Croise Full VBA. Crez de la mme manire que pour le premier bouton une procdure VBA sur l'vnement Sur Clic Insrez la chane SQL prcdemment copie. La chaine SQL insre.
TRANSFORM Sum(Vente.Montant) AS SommeDeMontant SELECT Vente.Vendeur FROM Vente WHERE (((Vente.Anne)=2001)) GROUP BY Vente.Vendeur PIVOT Vente.Anne;

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.