mais ton expression a besoin de cette transformation en numérique
sin'est pas une valeur numérique ... tu "additionnes" des choux et des carottes
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me("Detail" + Format(entX))![]()
mais ton expression a besoin de cette transformation en numérique
sin'est pas une valeur numérique ... tu "additionnes" des choux et des carottes
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me("Detail" + Format(entX))![]()
alors comment faire pour ne prendre en compte que des champ texte?
Quelle solution pour avoir ma requete d'analyse croisé transformat en etat?
Bonsoir,
Je suis d'accord avec Mout1234.
La notion de total par ligne ne correspond à rien.
On ne peut pas additionner des valeurs hétérogènes.
Le mieux pour toi serait de virer la colonne "Totaux" et le code qui va avec.
C'est ce que j'ai dans le code ci-dessous.
- Nombre de colonnes passé de 34 à 35 (35 n'est plus "Totaux")
- Code relatif au "Totaux" mis en commentaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part Const Nombre_colonnes = 35
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 Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer) Dim entX As Integer Dim Nblignes As Long If Not rstEnregistrement.EOF Then If Me.FormatCount = 1 Then Me("Detail1") = Nz(rstEnregistrement(0), 0) For entX = 2 To NbColonnes Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0) ' Nblignes = Nblignes + Me("Detail" + Format(entX)) Next entX For entX = NbColonnes + 2 To Nombre_colonnes Me("Detail" + Format(entX)).Visible = False Next entX 'Me("Detail" + Format(Nombre_colonnes + 1)) = Nblignes rstEnregistrement.MoveNext End If End If End SubA+
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 Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer) 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)) = rstEnregistrement(entX - 1).Name Next entX ' Crée l'entête Totaux de la prochaine zone de liste disponible. 'Me("Entete" + Format(Nombre_colonnes + 1)) = "Totaux" ' Cache les zones de texte inutilisées dans la section Entête. For entX = (NbColonnes + 1) To Nombre_colonnes Me("Entete" + Format(entX)).Visible = False Next entX End Sub
Merci parfait j'avai oublie la fonction total que je ne me sers pas en plus.
BOnjour
Toujour un petit probleme avec ce type d etat vous pouvez m'aide stp?, je joint ma base d'exemple
Bonjour,
Voici les erreurs:
Detail10 2448 Impossible d'attribuer une valeur à cet objet.
Detail11 2465 Microsoft Office Access ne trouve pas le champ 'Detail11' auquel il est fait référence dans votre expression.
Detail12 2465 Microsoft Office Access ne trouve pas le champ 'Detail12' auquel il est fait référence dans votre expression.
Detail13 2465 Microsoft Office Access ne trouve pas le champ 'Detail13' auquel il est fait référence dans votre expression.
J'ai modifié le code de l'état pour intercepter les deux erreurs ci-dessus.
J'ai viré les déclarations qui ne servait à rien et ajouté un message d'avertissement si recordset a plus de colonnes que l'état.
Code complet de l'état :
Il te reste à modifier ton état, pour que les valeurs aillent dans les bonne cases, et peut-être ajouter les contrôles manquants.
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191 Option Compare Database Option Explicit ' ***** déclaration des variables ***** ' Const Nombre_colonnes = 9 ' 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_état As Long Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer) Dim entX As Integer Dim Nblignes As Long On Error GoTo ErrH If Not rstEnregistrement.EOF Then If Me.FormatCount = 1 Then Me("Detail1") = Nz(rstEnregistrement(0), 0) For entX = 2 To NbColonnes Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0) ' Nblignes = Nblignes + Me("Detail" + Format(entX)) Next entX For entX = NbColonnes + 2 To Nombre_colonnes Me("Detail" + Format(entX)).Visible = False Next entX 'Me("Detail" + Format(Nombre_colonnes + 1)) = Nblignes rstEnregistrement.MoveNext End If End If Sortie: Exit Sub ErrH: Select Case Err.Number Case 2448, 2465 If rstEnregistrement.AbsolutePosition = 0 Then Debug.Print "Detail" + Format(entX) & " " & Err.Number & " " & Err.Description End If Resume Next Case Else MsgBox "Erreur N° '" & Err.Number & "' : " & Err.Description Resume Sortie End Select End Sub Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer) Dim Hauteur As Single Dim Gauche01 As Single, Gauche02 As Single, Gauche03 As Single, Gauche04 As Single, Gauche05 As Single Dim Gauche06 As Single, Gauche07 As Single, Gauche08 As Single, Gauche09 As Single, Gauche10 As Single Dim Gauche11 As Single, Gauche12 As Single, Gauche13 As Single, Gauche14 As Single, Gauche15 As Single Dim Gauche16 As Single, Gauche17 As Single, Gauche35 As Single, Gauche18 As Single, Gauche19 As Single Dim Gauche20 As Single, Gauche21 As Single, Gauche22 As Single, Gauche23 As Single, Gauche24 As Single Dim Gauche25 As Single, Gauche26 As Single, Gauche27 As Single, Gauche28 As Single, Gauche29 As Single Dim Gauche30 As Single, Gauche31 As Single, Gauche32 As Single, Gauche33 As Single, Gauche34 As Single Dim Gauche36 As Single Hauteur = Me.Height Gauche01 = 0 * 567 Gauche02 = 4.07 * 567 Gauche03 = 5.96 * 567 Gauche04 = 7.84 * 567 Gauche05 = 10.69 * 567 Gauche06 = 13.53 * 567 Gauche07 = 16.36 * 567 Gauche08 = 19.2 * 567 Gauche09 = 22.06 * 567 Gauche10 = 24.04 * 567 Gauche11 = 28.28 * 567 Me.DrawMode = 1 Me.DrawStyle = 0 Me.Report.Line (Gauche01, 0)-(Gauche01, Hauteur) Me.Report.Line (Gauche02, 0)-(Gauche02, Hauteur) Me.Report.Line (Gauche03, 0)-(Gauche03, Hauteur) Me.Report.Line (Gauche04, 0)-(Gauche04, Hauteur) Me.Report.Line (Gauche05, 0)-(Gauche05, Hauteur) Me.Report.Line (Gauche06, 0)-(Gauche06, Hauteur) Me.Report.Line (Gauche07, 0)-(Gauche07, Hauteur) Me.Report.Line (Gauche08, 0)-(Gauche08, Hauteur) Me.Report.Line (Gauche09, 0)-(Gauche09, Hauteur) Me.Report.Line (Gauche10, 0)-(Gauche10, Hauteur) Me.Report.Line (Gauche11, 0)-(Gauche11, Hauteur) Me.Report.Line (Gauche12, 0)-(Gauche12, Hauteur) Me.Report.Line (Gauche13, 0)-(Gauche13, Hauteur) Me.Report.Line (Gauche14, 0)-(Gauche14, Hauteur) Me.Report.Line (Gauche15, 0)-(Gauche15, Hauteur) Me.Report.Line (Gauche16, 0)-(Gauche16, Hauteur) Me.Report.Line (Gauche17, 0)-(Gauche17, Hauteur) Me.Report.Line (Gauche18, 0)-(Gauche18, Hauteur) Me.Report.Line (Gauche19, 0)-(Gauche19, Hauteur) Me.Report.Line (Gauche20, 0)-(Gauche20, Hauteur) Me.Report.Line (Gauche21, 0)-(Gauche21, Hauteur) Me.Report.Line (Gauche22, 0)-(Gauche22, Hauteur) Me.Report.Line (Gauche23, 0)-(Gauche23, Hauteur) Me.Report.Line (Gauche24, 0)-(Gauche24, Hauteur) Me.Report.Line (Gauche25, 0)-(Gauche25, Hauteur) Me.Report.Line (Gauche26, 0)-(Gauche26, Hauteur) Me.Report.Line (Gauche27, 0)-(Gauche27, Hauteur) Me.Report.Line (Gauche28, 0)-(Gauche28, Hauteur) Me.Report.Line (Gauche29, 0)-(Gauche29, Hauteur) Me.Report.Line (Gauche30, 0)-(Gauche30, Hauteur) Me.Report.Line (Gauche31, 0)-(Gauche31, Hauteur) Me.Report.Line (Gauche32, 0)-(Gauche32, Hauteur) Me.Report.Line (Gauche33, 0)-(Gauche33, Hauteur) Me.Report.Line (Gauche34, 0)-(Gauche34, Hauteur) Me.Report.Line (Gauche35, 0)-(Gauche35, Hauteur) Me.Report.Line (Gauche36, 0)-(Gauche36, Hauteur) End Sub Private Sub Détail_Retreat() rstEnregistrement.MovePrevious End Sub Private Sub EntêteÉtat_Format(Cancel As Integer, FormatCount As Integer) rstEnregistrement.MoveFirst End Sub Private Sub EntêteGroupe1_Format(Cancel As Integer, FormatCount As Integer) If Not rstEnregistrement.EOF Then Me("Detail1") = Nz(rstEnregistrement(0), "") End If End Sub Private Sub Report_Close() rstEnregistrement.Close End Sub Private Sub Report_NoData(Cancel As Integer) MsgBox "Impossible d'ouvrir l'état : Auncune donné à imprimer", vbCritical Cancel = True End Sub Private Sub Report_Open(Cancel As Integer) Dim rstRequete As DAO.QueryDef Set dbBase = CurrentDb Set rstRequete = dbBase.QueryDefs("Analyse croise planning AG") rstRequete.Parameters(0) = Eval(rstRequete.Parameters(0).Name) Set rstEnregistrement = rstRequete.OpenRecordset() 'Définit le nombre de colonnes de la requête NbColonnes = rstEnregistrement.Fields.Count If (NbColonnes - 1) > Nombre_colonnes Then MsgBox "Le nombre de colonnes (" & (NbColonnes - 1) & _ ") excède celui du rapport (" & Nombre_colonnes & ")", vbInformation End If End Sub Private Sub ZoneEntêtePage_Print(Cancel As Integer, PrintCount As Integer) Dim Hauteur As Single Dim Gauche01 As Single, Gauche02 As Single, Gauche03 As Single, Gauche04 As Single, Gauche05 As Single Dim Gauche06 As Single, Gauche07 As Single, Gauche08 As Single, Gauche09 As Single, Gauche10 As Single Dim Gauche11 As Single Hauteur = Me.Height Gauche01 = 0 * 567 Gauche02 = 4.07 * 567 Gauche03 = 5.96 * 567 Gauche04 = 7.84 * 567 Gauche09 = 22.06 * 567 Gauche10 = 24.04 * 567 Gauche11 = 28.28 * 567 Me.DrawMode = 1 Me.DrawStyle = 0 Me.Report.Line (Gauche01, 0)-(Gauche01, Hauteur) Me.Report.Line (Gauche02, 0)-(Gauche02, Hauteur) Me.Report.Line (Gauche03, 0)-(Gauche03, Hauteur) Me.Report.Line (Gauche04, 0)-(Gauche04, Hauteur) Me.Report.Line (Gauche06, 0)-(Gauche06, Hauteur) Me.Report.Line (Gauche07, 0)-(Gauche07, Hauteur) Me.Report.Line (Gauche08, 0)-(Gauche08, Hauteur) Me.Report.Line (Gauche09, 0)-(Gauche09, Hauteur) Me.Report.Line (Gauche10, 0)-(Gauche10, Hauteur) Me.Report.Line (Gauche11, 0)-(Gauche11, Hauteur) End Sub
A+
J'ai utilise ton code et modifier la requete d'anaylse croisée mais j'ai toujour une erreur a l'ouverture de l'etat.
J'ai essai aussi d'ajoute l'ensemble des mois en colonne en fixe mais j'ai un probleme avec les mois 10 et 11 et 12 car il sont juste apres le mois 1 dans la requete comment y faire??
je te joint la nouvelle base modier
Bonjour,
Ton état a un regroupement sur "NUM_OPERATION".
Ce champ n'existe pas dans la source de l'état (Analyse croise planning AG).
Voila, c'est tout ce que j'ai vu.
- Remplace "NUM_OPERATION" par "NOM_OPERATION"
Vérifie que le groupe "En-tête de groupe NOM_OPERATION" a bien son nom définit à "EntêteGroupe1",
pour que la procédure événementielle Sub EntêteGroupe1_Format(...) soit appelée.
Vérifie aussi que le lien entre l'événement "Au formatage" et la procédure événementielle existe bien.
Ce n'était pas le cas dans ton état. Nom Groupe = EntêteGroupe0 mais procédure événementielle "EntêteGroupe1_Format"
 - Lorsqu'on fait un regroupement avec un état, il y a un tri selon le regroupement.
Il peut être différent de celui de la source (requête "Analyse croise planning AG").
Il faut donc que la requête "Analyse croise planning AG" soit triée de la même façon, pour qu'il y ait correspondance entre le tri de l'état et le tri du recordset rstEnregistrement.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 PARAMETERS [Forms]![Planning AG]![datedebut] DateTime; TRANSFORM First(planning_AG.chValeur) AS PremierDechValeur SELECT planning_AG.NOM_OPERATION, planning_AG.NOM_LISTE_SUIVI_AG, planning_AG.COMMENTAIRE_PREVU FROM TYPE_MOIS LEFT JOIN planning_AG ON TYPE_MOIS.NUM_MOIS = planning_AG.mois GROUP BY planning_AG.NUM_OPERATION, planning_AG.ORDRE_IMPRESSION, planning_AG.TYPE, planning_AG.NUM_AUTO_SUIVI_AG, planning_AG.Ligne, planning_AG.NOM_OPERATION, planning_AG.NOM_LISTE_SUIVI_AG, planning_AG.DATE_PREVU, planning_AG.COMMENTAIRE_PREVU ORDER BY planning_AG.NOM_OPERATION, planning_AG.ORDRE_IMPRESSION, planning_AG.TYPE, planning_AG.NUM_AUTO_SUIVI_AG, planning_AG.Ligne, planning_AG.DATE_PREVU, [NUM_MOIS] & " " & [NOM_MOIS] PIVOT [NUM_MOIS] & " " & [NOM_MOIS];- Dans la procédure Détail_Format(...), cette ligne ne sert à rien
C'est déjà fait par EntêteGroupe1_Format(...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me("Detail1") = Nz(rstEnregistrement(0), 0)
De toutes façons ça n'écrit pas dans le bon groupe. Ça modifie l'en-tête de groupe à venir, et non celui en cours.
A+
Bonjour a tous
petite question au expert
j'ai ce code ( et oui toujours le même pour un nouveau projet)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Option Compare Database Option Explicit ' ***** déclaration des variables ***** ' Const Nombre_colonnes = 34 ' 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_état As LongJe souhaiterai pour la colonne Total faire le total de la ligne sur les champ Détail mais que un sur deux.
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 Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer) Dim entX As Integer Dim Nblignes As Long If Not rstEnregistrement.EOF Then If Me.FormatCount = 1 Then Me("Detail1") = Nz(rstEnregistrement(0), 0) For entX = 2 To NbColonnes Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0) Total_colonnes(entX) = Total_colonnes(entX) + Me("Detail" + Format(entX)) Nblignes = Nblignes + Me("Detail" + Format(entX)) Next entX For entX = NbColonnes + 2 To Nombre_colonnes Me("Detail" + Format(entX)).Visible = False Next entX Me("Detail" + Format(Nombre_colonnes + 1)) = Nblignes Total_état = Total_état + Nblignes rstEnregistrement.MoveNext End If End If End Sub
faire la somme de Détail1 + Détail3 + détail5 +.....
je ne peux pas prendre le détail 2, détail 4 ..... car je cache ces colonnes pour un autre calcul en colonne et il ne faut surtout par qu'il soit pris dans le total de droite vous pouvez me dire si cela est possible.??
J'aimerai ensuite si sa marche faire un 2éme total avec les valeur détail 2, détail 4 .....
Pour plus s'expliquation je te joint ma base :
formulaire "Gestion Impression Réserve" puis impression "Suivi Logt et PC / Ent"
Les total sont a droite
Bonjour,
Essaie ça :
Les totaux de contrôles d'indice impair (Detail3, Detail5, ...) et pair (Detail2, Detail4, ...) se font dans les variables TotalLigneImpair et TotalLignePair.
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 Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer) Dim entX As Integer Dim Nblignes As Long Dim TotalLigneImpair As Long, TotalLignePair As Long If Not rstEnregistrement.EOF Then If Me.FormatCount = 1 Then Me("Detail1") = Nz(rstEnregistrement(0), 0) TotalLignePair = 0: TotalLigneImpair = 0 For entX = 2 To NbColonnes Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0) Total_colonnes(entX) = Total_colonnes(entX) + Me("Detail" + Format(entX)) Nblignes = Nblignes + Me("Detail" + Format(entX)) ' Totaux ligne If entX Mod 2 = 0 Then TotalLignePair = TotalLignePair + Me("Detail" + Format(entX)) Else TotalLigneImpair = TotalLigneImpair + Me("Detail" + Format(entX)) End If Next entX For entX = NbColonnes + 2 To Nombre_colonnes Me("Detail" + Format(entX)).Visible = False Next entX ' Totaux ligne Me("Detail" + Format(Nombre_colonnes + 1)) = TotalLignePair Me("Detail" + Format(Nombre_colonnes + 2)) = TotalLigneImpair ' Total_état = Total_état + Nblignes rstEnregistrement.MoveNext End If End If End Sub
Ils sont ensuite affectés aux contrôles Me("Detail" + Format(Nombre_colonnes + 1)) et Me("Detail" + Format(Nombre_colonnes + 2)).
A+
Merci j'ai bien mes deux total qui marche par contre pour le total général en dessous il me dit 46 au lieu de 20 il doit me prendre que les total pair tu peux encore m'aide stp?
je te joint la base modifier
Bonjour,
J'applique le même principe dans PiedÉtat_Format que celui utilisé dans Détail_Format.
Deux variables TotalPair et TotalImpair pour les totaux, respectivement, des totaux pairs et des totaux impairs.
A+
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 Private Sub PiedÉtat_Format(Cancel As Integer, FormatCount As Integer) Dim entX As Integer, TotalPair As Long, TotalImpair As Long TotalPair = 0: TotalImpair = 0 ' 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) If entX Mod 2 = 0 Then TotalPair = TotalPair + Total_colonnes(entX) Else TotalImpair = TotalImpair + Total_colonnes(entX) End If Next entX ' Place TotalEtat dans une boite de texte dans le pied d'état. Me("Total" + Format(Nombre_colonnes + 1)) = TotalPair Me("Total" + Format(Nombre_colonnes + 2)) = TotalImpair ' Cache les zones de texte inutilisées dans le pied d'état. For entX = (NbColonnes + 1) To Nombre_colonnes Me("Total" + Format(entX)).Visible = False Next entX End Sub
Merci bcp sa marche super j'ai réusi a l'utiliser pour un autre etat parfait![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager