Cumul mobile

lizarajim Messages postés 16 Date d'inscription mardi 28 mai 2002 Statut Membre Dernière intervention 24 octobre 2006 - 29 mai 2002 à 16:54
lizarajim Messages postés 16 Date d'inscription mardi 28 mai 2002 Statut Membre Dernière intervention 24 octobre 2006 - 4 juin 2002 à 13:55
salut,

my problem:
j'ai une table "recettes" qui se présente comme ceci:

date | montant
....
01/04/97 | 500
01/05/97 | 400
01/06/97 | 300
01/07/97 | 1000
01/08/97 | 600
01/09/97 | 2500
01/10/97 | 100
01/11/97 | 3000
01/12/97 | 400
01/01/98 | 800
01/02/98 | 700
01/03/98 | 150
....

maintenant, je veux créé un champ "cumul" qui fait, pour chaque ligne, la somme des montants des 12 mois précédents (c'est un cumul mobile sur 12 mois en fait).

je pensais faire qqchose du style:

somdom("[recettes]![montant]","[recettes]","prendre les 12 mois précédents")

et je ne sais pas écrire "prendre les 12 mois précédents"

je ne sais pas me servir de cette fonction et la syntaxe n'est sûrement pas bonne.

6 réponses

skrol29 Messages postés 114 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 17 novembre 2014
4 juin 2002 à 09:33
somdom( "[recettes]![montant]" ; "[recettes]" ; "([dateR]>#" & format$(diffdate("m";-12;[dateR]);"mm-jj-aaaa") & "#) and ([dateR]<=#" & format$([dateR];"mm-jj-aaaa") & "#)")

3 remarques :

1/ La fonction Format$() permet de formater la date au format américain qui est celui reconnu dans les requêtes SQL écrites (par opposition à celles montées avec l'éditeur de requêtes).

2/ J'ai remplacer le champ [date] par [dateR] car il y a un risque d'embiguïté avec la fonction date() qui retourne la date du jour.

3/ La fonction est au final assez compliquée et couteuse en perf. Je conseille plutôt d'ulitiser un état Access qui gère très facilement le calcul de cumul grâce à une simple propriété des contrôles.

-------------
Skrol 29
-------------
0
lizarajim Messages postés 16 Date d'inscription mardi 28 mai 2002 Statut Membre Dernière intervention 24 octobre 2006
4 juin 2002 à 10:14
Merci mais çà ne marche pas.
Ce que tu me proposes est un cumul simple ligne à ligne.
Voici la formule que j'ai rentré:
cumul: SomDom("[recettes_real]![ticket unité]";"[recettes_real]";"([identifiant]>#" & Format$(DiffDate("m";-12;[identifiant]);"mm-jj-aaaa") & "#) and ([identifiant]<=#" & Format$([identifiant];"mm-jj-aaaa") & "#)")

Voilà ce que j'obtiens:

identifiant ticket unité cumul
01/01/96 0,00 0
01/02/96 0,00 0
01/03/96 0,00 0
01/04/96 0,00 0
01/05/96 0,00 0
01/06/96 0,00 0
01/07/96 0,00 0
01/08/96 0,00 0
01/09/96 0,00 0
01/10/96 0,00 0
01/11/96 0,00 0
01/12/96 0,00 0
01/01/97 153 171,02 153171,02
01/02/97 134 949,85 288120,87
01/03/97 149 819,12 437939,99
01/04/97 163 864,70 601804,69
01/05/97 149 472,30 751276,99
01/06/97 162 242,49 913519,48
01/07/97 167 037,93 1080557,41
01/08/97 149 125,48 1229682,89
01/09/97 206 087,90 1435770,79
01/10/97 188 314,33 1624085,12
01/11/97 166 508,93 1790594,05
01/12/97 192 432,58 1983026,63
01/01/98 186 433,71 2169460,34
01/02/98 167 766,18 2337226,52
01/03/98 183 112,16 2520338,68

Si tu regardes bien jusqu'au 01/12/97 c effectivement ce que je veux mais après ce n'est plus bon.
En effet, pour le cumul du 01/01/98, je dois avoir la somme du 01/02/97 jusqu'au 01/01/98 càd un cumul mobile sur 12 mois (soit 2 016 289.32 au lieu de 2 169 460.34 !!!!)

Pour le cumul du 01/02/98 c la somme du 01/03/97 jusqu'au 01/02/98 et ainsi de suite...

Enfin bon c pas grave, je v me résoudre à passer par du VBA car il me semble qu'une requête SQL soit impossible pour ce que je demande.

Merci encore.

;-) Lizarajim (-;
0
skrol29 Messages postés 114 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 17 novembre 2014
4 juin 2002 à 11:03
La formule me semble correcte. (à l'ajustement du mois près).
Ton champ [identifiant] ne serait pas du type texte par hasard ?

-------------
Skrol 29
-------------
0
lizarajim Messages postés 16 Date d'inscription mardi 28 mai 2002 Statut Membre Dernière intervention 24 octobre 2006
4 juin 2002 à 11:24
non non.
mon champ [identifiant] est bien du type date abrégé.

;-) Lizarajim (-;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
skrol29 Messages postés 114 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 17 novembre 2014
4 juin 2002 à 12:04
J'ai compris ma bourde : c'est pas la fonction DiffDate mais AjDate qu'il faut utiliser.

Voici la formule corrigée :

SomDom("[recettes_real]![ticket unité]";"[recettes_real]";"([identifiant]>#" & Format$(AjDate("m";-12;[identifiant]);"mm-jj-aaaa") & "#) and ([identifiant]<=#" & Format$([identifiant];"mm-jj-aaaa") & "#)")

Enjoy,
-------------
Skrol 29
-------------
0
lizarajim Messages postés 16 Date d'inscription mardi 28 mai 2002 Statut Membre Dernière intervention 24 octobre 2006
4 juin 2002 à 13:55
oui c exactement çà.

il fallait quand même la convertir en numérique:

cumul ticket unité: CDbl(SomDom("[recettes_real]![ticket unité]";"[recettes_real]";"([identifiant]>#" & Format$(AjDate("m";-12;[identifiant]);"mm-jj-aaaa") & "#) and ([identifiant]<=#" & Format$([identifiant];"mm-jj-aaaa") & "#)"))

c quand même une sacrée requête.
enfin, c toujours mieux que les 24 pages de VB que j'avais entamé mais que je v vite supprimer.

un grand merci :-)

;-) Lizarajim (-;
0
Rejoignez-nous