Bonjour à tous,
Je travaille en Access sur un graph qui représente "l'âge" de chaque enregistrement. En ordonnées, j'ai le nombre d'ordres (d'entregistrements) et en abcisse, j'ai les années et les mois. La difficulté est que je dois également afficher les valeurs nulles sur l'axe des abcisses. Donc, si par exemple il n'y a pas de données pendant un mois, je dois malgré tout voir ce mois sur mon axe. (cfr screenshot)
Dès lors j'ai pensé à plusieurs requêtes:
- Age_tableau : toutes les valeurs possibles pour chaque semaine
- Age_comptage: requête qui compte et regroupe toutes les valeurs non nulles de chaque semaine
- Age_ToInsert: requête qui est la jointure entre les deux (LEFT JOIN) et qui est ajouté dans la table qui sert de source pour le graphique
SQL de Age_ToInsert:
Au niveau du code, j'utilise 2 boucles imbriquées pour "remplir" ma table Age_STATS:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Age_tableau.*, Age_Comptage.Nombre FROM Age_tableau LEFT JOIN Age_Comptage ON (Age_tableau.[Type de MNT] = Age_Comptage.[Type de MNT]);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 While YearMin <= YearMax While MonthMin <= MonthMax 'paramétrisation de la requete strsql = "SELECT [Type de MNT], Count([Ordre de travail]) AS Nombre" strsql = strsql & " FROM Affichage WHERE Year(DateRef) = " & YearMin & " AND Month(DateRef) =" & MonthMin & "" strsql = strsql & " GROUP BY [Type de MNT]" CurrentDb.QueryDefs("Age_Comptage").SQL = strsql 'ajout dans la table Age_Stats strsql = "INSERT INTO Age_STATS SELECT Age_ToInsert.* FROM Age_ToInsert" CurrentDb.Execute (strsql) 'update du mois et de l'année strsql = "UPDATE Age_STATS SET Annee = " & YearMin & " WHERE Isnull(Annee)" CurrentDb.Execute (strsql) strsql = "UPDATE Age_STATS SET Mois = " & MonthMin & " WHERE Isnull(Mois)" CurrentDb.Execute (strsql) MonthMin = MonthMin + 1 Wend MonthMin = 1 YearMin = YearMin + 1 If YearMin = Year(Now) Then MonthMax = Month(Now) Else MonthMax = 12 End If Wend
Le problème est que lorsque je veux afficher ce graphe sur le serveur (qui est très très lent), il faut patienter plus de 2 minutes...!
J'imagine donc que cette lenteur vient des 2 boucles imbriquées.
Est-ce que quelqu'un a une solution plus efficace pour afficher les valeurs nulles sur un graphe Access?
Merci à tous !
Partager