Le test du cumul écrit comme ceci semble mieux fonctionner.
Dans les sous select, il ne me reste plus qu'a test dans l'ordre :Code:
1
2 Case 401 To 700
cumul_1 < 400
cumul_1 compris entre 401 et 700...
Version imprimable
Le test du cumul écrit comme ceci semble mieux fonctionner.
Dans les sous select, il ne me reste plus qu'a test dans l'ordre :Code:
1
2 Case 401 To 700
cumul_1 < 400
cumul_1 compris entre 401 et 700...
Le programme fonctionne !!! :ccool:
Voici donc le code :
Par contre, j'ai juste un petit problème de référence circulaire entre la fonction et la cellule AD2 par exemple, étant donné que AD2 dépend de D2 et que AD2 est en paramètre dans la fonction... Mais dans notre cas, il va être rare qu'un salarié soit abondé à un tranche < à 150% dès le premier mois.Code:
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 Function Abondement(Cumul As Currency, Cumul_1 As Currency, Versement As Currency, CumulAbondement As Currency) Dim I As Integer Dim CumulA, Part150, Part135, Part110, Part075, Part0 As Currency Dim AbondementMaximal As Currency AbondementMaximal = 1296.8 Select Case Cumul Case Is <= 400 ' Abondement à 150% Abondement = Versement * 1.5 Case 401 To 700 'Abondement 135% Select Case Cumul_1 '------------------------------------------------------------------------------------------ Case Is <= 400 'Abondement lorsque changement de tranche 150% vers 135% Part135 = (Cumul - 401) * 1.35 Part150 = (Versement - (Cumul - 400)) * 1.5 Abondement = Part135 + Part150 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case Is > 400 'Abondement 135% Abondement = Versement * 1.35 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement End Select Case 701 To 900 'Abondement 110% Select Case Cumul_1 '------------------------------------------------------------------------------------------ Case Is <= 400 'Abondement lorsque changement de tranche 150% vers 110% Part150 = (400 - Cumul_1) * 1.5 Part135 = 299 * 1.35 Part110 = (Cumul - 701) * 1.1 Abondement = Part110 + Part135 + Part150 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 401 To 700 'Abondement lorsque changement de tranche 135% vers 110% Part135 = (700 - Cumul_1) * 1.35 Part110 = (Cumul - 701) * 1.1 Abondement = Part110 + Part135 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 701 To 900 'Abondement 110% Abondement = Versement * 1.1 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement End Select Case 901 To 1000 'Abondement 75% Select Case Cumul_1 '------------------------------------------------------------------------------------------ Case Is <= 400 'Abondement lorsque changement de tranche 150% vers 75% Part150 = (400 - Cumul_1) * 1.5 Part135 = 299 * 1.35 Part110 = 199 * 1.1 Part075 = (Cumul - 901) * 0.75 Abondement = Part075 + Part110 + Part135 + Part150 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 401 To 700 'Abondement lorsque changement de tranche 135% vers 75% Part075 = (Cumul - 901) * 0.75 Part110 = 199 * 1.1 Part135 = (700 - Cumul_1) * 1.35 Abondement = Part075 + Part110 + Part135 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 701 To 900 'Abondement lorsque changement de tranche 110% vers 75% Part110 = (900 - Cumul_1) * 1.1 Part075 = (Cumul - 901) * 0.75 Abondement = Part110 + Part075 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 901 To 1000 'Abondement lorsque changement de tranche 75% Abondement = Versement * 0.75 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement End Select Case Is > 1000 'Abondement lorsque changement de tranche 75% vers 0% If Cumul_1 <= 1000 Then Part075 = (Versement - (Cumul - 1000)) * 0.75 Abondement = Part075 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement End If End Select End Function
Pour la petite histoire, ce système d'abondement de Plan d'épargne Entreprise a été mis en place pour ne pas défavoriser les bas salaires lors des placements... Et bien je suis assez pour, mais la complexité de ce code me laisse un peu migraineux !!! La SSII qui gère notre logiciel RH a semble t-il, encore du mal à faire fonctionner cet abondement dans notre logiciel de paye...
Encore un merci à vous et à Eric KERGRESSE pour l'intérêt et le temps passé à m'aider. Je vous en suis très reconnaissant, cela va nous permettre d'apporter des contrôles rigoureux sur les mois à venir...
A bientôt.
Bonsoir,
J'ai souhaité terminer ce que j'avais commencé.
La fonction AbondementTotal calcule l'abondement soit sur le total des versements cumulés pour l'année soit sur le cumul des versements d'un mois. L'abondement pour un mois est égal à la différence de l'abondement du mois M - celui du mois M-1
Le calcul réalisé par la fonction répond aux conditions de ce tableau : http://www.developpez.net/forums/att...1&d=1370984066
Le tableau de calcul se présente de la façon suivante :
http://www.developpez.net/forums/att...1&d=1370984010
La fonction est la suivante :
Cordialement.Code:
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 Function Abondement(ByVal Versement As Range) As Currency Dim AbondementMaximal As Currency Dim Limite1 As Currency Dim Limite2 As Currency Dim Limite3 As Currency Dim Limite4 As Currency Dim ValeurVersement As Currency Dim Taux1 As Single Dim Taux2 As Single Dim Taux3 As Single Dim Taux4 As Single AbondementMaximal = 1296.8 Limite1 = 400# Limite2 = 700# Limite3 = 900# Limite4 = 1000# Taux1 = 1.5 Taux2 = 1.35 Taux3 = 1.1 Taux4 = 0.75 ValeurVersement = CCur(Versement.Value) Abondement = 0# Select Case ValeurVersement Case Is <= Limite1 ' Abondement à 150% Abondement = ValeurVersement * Taux1 Case Limite1 + 1 To Limite2 'Abondement 135% Abondement = Limite1 * Taux1 + (ValeurVersement - Limite1) * Taux2 Case Limite2 + 1 To Limite3 'Abondement 110% Abondement = Limite1 * Taux1 + (Limite2 - Limite1) * Taux2 + (ValeurVersement - Limite2) * Taux3 Case Limite3 + 1 To Limite4 'Abondement 75% Abondement = Limite1 * Taux1 + (Limite2 - Limite1) * Taux2 + (Limite3 - Limite2) * Taux3 + (ValeurVersement - Limite3) * Taux4 If Abondement > AbondementMaximal Then Abondement = AbondementMaximal Case Is > Limite4 Abondement = AbondementMaximal End Select End Function
Merci pour ce code simplifié mais je vais rester sur la première solution.
Cela m'a pris déjà beaucoup de temps et comme nous gérons une grosse quantité de salarié, il est mieux d'avoir une ligne à chaque fois.
A bientôt.
Voici le code finalisé et qui fonctionne
Eric, nous avons quelques euros d'écarts, peu être dus aux tranches...Code:
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209 Function Abdt(Cumul As Currency, Cumul_1 As Currency, Versement As Currency, CumulAbondement As Currency) Dim I As Integer Dim CumulA, Part150, Part135, Part110, Part075, Part0 As Currency Dim AbondementMaximal As Currency AbondementMaximal = 1296.8 Select Case Cumul Case Is <= 400 ' Abondement à 150% Abdt = Versement * 1.5 Case 401 To 700 'Abondement 135% Select Case Cumul_1 '------------------------------------------------------------------------------------------ Case Is <= 400 'Abondement lorsque changement de tranche 150% vers 135% Part135 = (Cumul - 401) * 1.35 Part150 = (Versement - (Cumul - 400)) * 1.5 Abdt = Part135 + Part150 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case Is > 400 'Abondement 135% Abondement = Versement * 1.35 CumulA = CumulAbondement + Abondement If CumulA > AbondementMaximal Then Abondement = AbondementMaximal - CumulAbondement End Select Case 701 To 900 'Abondement 110% Select Case Cumul_1 '------------------------------------------------------------------------------------------ Case Is <= 400 'Abondement lorsque changement de tranche 150% vers 110% Part150 = (400 - Cumul_1) * 1.5 Part135 = 299 * 1.35 Part110 = (Cumul - 701) * 1.1 Abdt = Part110 + Part135 + Part150 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 401 To 700 'Abondement lorsque changement de tranche 135% vers 110% Part135 = (700 - Cumul_1) * 1.35 Part110 = (Cumul - 701) * 1.1 Abdt = Part110 + Part135 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 701 To 900 'Abondement 110% Abdt = Versement * 1.1 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement End Select Case 901 To 1000 'Abondement 75% Select Case Cumul_1 '------------------------------------------------------------------------------------------ Case Is <= 400 'Abondement lorsque changement de tranche 150% vers 75% Part150 = (400 - Cumul_1) * 1.5 Part135 = 299 * 1.35 Part110 = 199 * 1.1 Part075 = (Cumul - 901) * 0.75 Abdt = Part075 + Part110 + Part135 + Part150 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 401 To 700 'Abondement lorsque changement de tranche 135% vers 75% Part075 = (Cumul - 901) * 0.75 Part110 = 199 * 1.1 Part135 = (700 - Cumul_1) * 1.35 Abdt = Part075 + Part110 + Part135 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 701 To 900 'Abondement lorsque changement de tranche 110% vers 75% Part110 = (900 - Cumul_1) * 1.1 Part075 = (Cumul - 901) * 0.75 Abdt = Part110 + Part075 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 901 To 1000 'Abondement lorsque changement de tranche 75% Abdt = Versement * 0.75 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement End Select Case Is > 1000 'Abondement lorsque changement de tranche 75% vers 0% Select Case Cumul_1 '------------------------------------------------------------------------------------------ Case Is <= 400 'Abondement lorsque changement de tranche 150% vers 75% Part150 = (400 - Cumul_1) * 1.5 Part135 = 299 * 1.35 Part110 = 199 * 1.1 Part075 = (1000 - 901) * 0.75 Abdt = Part075 + Part110 + Part135 + Part150 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 401 To 700 'Abondement lorsque changement de tranche 135% vers 75% Part075 = (1000 - 901) * 0.75 Part110 = 199 * 1.1 Part135 = (700 - Cumul_1) * 1.35 Abdt = Part075 + Part110 + Part135 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 701 To 900 'Abondement lorsque changement de tranche 110% vers 75% Part110 = (900 - Cumul_1) * 1.1 Part075 = (1000 - 901) * 0.75 Abdt = Part110 + Part075 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement '------------------------------------------------------------------------------------------ Case 901 To 1000 'Abondement lorsque changement de tranche 75% Abdt = (1000 - Cumul_1) * 0.75 'Test de l'abondement maximal 1296 CumulA = CumulAbondement + Abdt If CumulA > AbondementMaximal Then Abdt = AbondementMaximal - CumulAbondement End Select End Select End Function
A bientôt
Bonjour,
Votre calcul Part135 = 299 * 1.35 n'est pas correct, il faut prendre la différence entre les deux tranches idem pour 701. Il faut distinguer la sélection que fait le select case du calcul proprement dit.
Regardez ce que j'ai fait dans ma fonction.
Cordialement.
Je ne suis pas d'accord, nos tranches sont abondés comme cela :
400*1.5 = 600
299 (soit de 401 à 700 à 135%) = 403.65
199 (soit de 701 à 900 à 110% = 218.90
99 (soi de 901 à 1000 à 75%) = 74.25
C'est le cahier des charges de l'organisme gestionnaire du PEE qui est définit comme cela... Il me semble que mon code respecte cela...
De plus, dans la logique, si j'abonde le 400ieme euro à 150 %, je ne peux l'abonder à 135% sur la tranche suivante...
Je vais m'assurer de ce que vous dites... Mon raisonnement étant basé sur une brochure interne, je ne peux pas vous dire comment raisonne l'abondement sur les bulletins... Je vais creuser... Merci.
Je me suis trompé vous avez raison... :mouarf:
La brochure a été simplifiée, mais reste tout de même fausse...
Bonjour,
il y a quelques temps, j'avais sollicité le forum pour m'aider à créer un algo assez prise de tête concernant un calcul d'abondement d'un plan d'épargne entreprise (PEE). Je rappelle sommairement le principe : en fonction d'un versement mensuel sur ce PEE, un abondement est calculé en fonction de plusieurs tranches (onglet Tableau des tranches)
Aujourd'hui mon problème est autre.
J'aimerais que ce tableau soit automatiquement crée en fonction d'un nombre de salarié répertorié dans une liste (feuil1 du fichier ci-joint). Autrement dit, en fonction de la mise à jour de cette liste, le nombre de ligne du tableau se met à jour automatiquement.
De plus, il me faudrait garder les totaux en bas de tableau.
Je n'ai jamais construit des tableaux de cette manière. Je ne sais comment m'y prendre.
A votre dispo pour des précisions supplémentaires si besoin.
Par avance merci.
PS : fichier joint