Bonjour
Avant de poster, j'ai cherché sur ce site et sur google la solution à mon problème, excusez moi si elle existe et que je ne l'ai pas trouvée.
J'ai créé une Requête croisée pour avoir des totaux par mois pour certaines données. Ma requête croisée va donc évoluer de mois en mois et alimente deux sous états, l'un pour avoir une courbe, l'autre pour l'affichage des données en tableau.
Je préfèrerais ne pas avoir à modifier mes états tous les mois pour avoir un mois supplémentaire.
J'ai donc trouvé sur ce site un code excellent que je remet ici pour que mon état tableau s'adapte à la Requête croisée.
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140 Option Compare Database Option Explicit '****** Declaration des variables ********* Const Nombre_colonnes = 13 ' Nombre maximum d'étiquettes sur l'état (par rapport à l'exemple) & _ on peut en afficher plus et donc modifier cette variable Dim dbBase As DAO.Database Dim rstEnregistrement As DAO.Recordset Dim Nbcolonnes As Integer Dim Total_colonnes(1 To Nombre_colonnes) As Long Dim Total_etat As Long Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer) Dim entX As Integer If Not rstEnregistrement.EOF Then If Me.FormatCount = 1 Then For entX = 1 To Nbcolonnes Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0) Next entX For entX = Nbcolonnes + 2 To Nombre_colonnes Me("Detail" + Format(entX)).Visible = False Next entX rstEnregistrement.MoveNext End If End If End Sub Private Sub Report_Open(Annuler As Integer) Dim rstRequete As DAO.QueryDef Set dbBase = CurrentDb Set rstRequete = dbBase.QueryDefs("RC_QC_CUMUL_SERV") Set rstEnregistrement = rstRequete.OpenRecordset() 'Définit le nombre de colonnes de la requête Nbcolonnes = rstRequete.Fields.Count End Sub Private Sub EntêteEtat_Format(Annuler As Integer, FormatCount As Integer) ' Pour la version 2002 : remplacer EntêtePage_Format par Zone EntêtePage_Format. A voir pour les autres versions Dim entX As Integer ' Met les entêtes de colonnes dans des zones de texte dans la section Entête. For entX = 1 To Nbcolonnes Me("Entete" + Format(entX)) = Enregistrement(entX - 1).Name Next entX 'Crée l'entête Totaux de la prochaine zone de liste disponible Me("Entete" + Format(entX)) = "Totaux" ' Cache les zones de texte inutilisées dans la section Entête. For entX = (Nbcolonnes + 2) To Nombre_colonnes Me("Entete" + Format(entX)).Visible = False Next entX End Sub Private Sub PiedÉtat_Format(Annuler As Integer, NBimpression As Integer) Dim entX As Integer ' Affecte la valeur Total_Colonne(entX) des champs en colonne au champs total For entX = 2 To Nbcolonnes Me("Total" + Format(entX)) = Total_colonnes(entX) Next entX ' Place TotalEtat dans une boite de texte dans le pied d'état. Me("Total" + Format(Nbcolonnes + 1)) = Total_etat ' Cache les zones de texte inutilisées dans le pied d'état. For entX = (Nbcolonnes + 2) To Nombre_colonnes Me("Total" + Format(entX)).Visible = False Next entX End Sub Private Sub Report_NoData(Annuler As Integer) MsgBox "Aucun enregistrement n'a été trouvé.", vbExclamation, "Information" rstEnregistrement.Close Annuler = True End Sub Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer) Dim entX As Integer Dim Nblignes As Long If Me.PrintCount = 1 Then Nblignes = 0 For entX = 2 To Nbcolonnes Nblignes = Nblignes + Me("Detail" + Format(entX)) Total_colonnes(entX) = Total_colonnes(entX) + Me("Detail" + Format(entX)) Next entX Me("Detail" + Format(Nbcolonnes + 1)) = Nblignes Total_etat = Total_etat + Nblignes End If End Sub Private Sub Détail_Retreat() rstEnregistrement.MovePrevious End Sub Private Sub Initvar() Dim entX As Integer Total_etat = 0 For entX = 1 To Nbcolonnes Total_colonnes(entX) = 0 Next entX End Sub Private Sub EntêteÉtat_Format(Annuler As Integer, FormatCount As Integer) rstEnregistrement.MoveFirst Initvar End Sub
Pourtant, 2 problèmes subsistent à l'affichage de l'état : les entêtes ne s'affichent pas, et la colonne de droite correspond au cumul des autres, et je n'ai pas besoin de total par ligne.
Si vous pouviez me dire à quel endroit je dois modifier ce code pour répondre à mes besoins, merci d'avance.
Cordialement
Pamynx75
Tous les jours meilleur pour être simplement bon
Partager