Pages

[AC-2003] Sommer sur 4 semaines précédentes à cheval sur 2 années sujet

vendredi 28 mars 2014




Bonjour,

J'ai un probleme en essayant de sommer des valeurs de 4 semaines consécutives au passage d'une année à l'autre.

Je dispose d'une table Tonnages où les champs Client, Volume, numéro de semaine, numéro d'année sont remplis automatiquement à partir d'un fichier excel.

Je traite ensuite les numéros de semaine et d'année afin de générer une date correspondant au premier jour de la semaine avec un module.

J'aimerais ensuite sommer les volumes sur 4 semaines consécutives (en demandant pour l'instant à l'utilisateur d'entrer le numéro de semaine) de l'année N et N-1 (afin de comparer).
Par exemple si l'utilisateur entre "5", la requete va calculer la somme des volumes de la semaine 1 à 4 pour chaque année.

Cela fonctionne pour moi mais je rencontre un problème lorsque la "fenetre" de 4 semaines est sur 2 années.
Ex: si l'utilisateur entre "2", la requete doit calculer la somme des volumes 50/année prec., 51/année prec., 52/année prec et 01/année.
Dans mon cas la requete ne franchit pas la "barrière" entre les 2 années, ne conservant que le volume 01/année.

Quelqu'un peut m'aider?

Voici mon module pour générer la date:

Code:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function convDate( _
ByVal intAnnee As Long, _
Optional ByVal intSemaine As Long = 1)

Dim dt As Date

' Trouver le 1er jour de la semaine 1 de l'année
' (pas forcément le 1/1/aaaa en France !)
dt = DateSerial(intAnnee, 1, 1)
While DatePart("ww", dt, vbMonday, vbFirstFourDays) <> 1
dt = dt + 1
Wend

' Calculer le 1er jour de la semaine demandée
dt = dt - DatePart("w", dt, vbMonday) + 1
dt = dt + 7 * (intSemaine - 1)

convDate = dt
End Function


Et voici ma requête:


Code:


1
2
3
4
SELECT Tonnages.Client, Sum(Tonnages.Volume) AS SommeDeVolume, Tonnages.numAnnee
FROM Tonnages
WHERE Tonnages.tDate>=DateAdd("ww",-4,convDate(Tonnages.numAnnee,[SemaineACalculer])) And Tonnages.tDate<convDate(Tonnages.numAnnee,[SemaineACalculer])
GROUP BY Tonnages.Client, Tonnages.tDate, Tonnages.numAnnee;


En vous remerciant d'avance de vos réponses,

Ostrich95




Aucun commentaire:

Enregistrer un commentaire