Problème calcul date N-1

jim7963

XLDnaute Junior
Bonjour et Joyeuses Pâques à tous.

Je fais appelle à votre savoir car je bloque sur un code que je pensais avoir finalisé grâce à votre aide mais qui finalement fait apparaitre un nouveau problème.

Je vous joins le fichier pour que vous puissiez voir directement.

Sur la colonne 2012, j'ai les numéros des jours et les numéros des semaines de l'année dernière en comparable avec ceux de cette année.
Jusqu'à présent le code marchait très bien, sauf que pour ce mois d'Avril les dates se décalent d'une semaine. Le lundi 2 Avril 2012 qui en réalité était en semaine 14, se retrouve en semaine 15 et ainsi de suite.
A priori, je pense que le problème doit venir du fait que le 1er est un lundi et ça doit ne pas lui plaire car les autres mois ce n'est pas le cas et alors tout se calcul bien. C'est la seule différence que je vois qui pourrait avoir une influence. Mais bon, je n'en suis pas sur non plus.

Ce problème dépassant mon niveau, je fais donc appelle à vous pour m'aider à résoudre ce problème.

Merci par avance.
 

Pièces jointes

  • Suivi Avril.xlsm
    183.3 KB · Affichages: 68
  • Suivi Avril.xlsm
    183.3 KB · Affichages: 69
  • Suivi Avril.xlsm
    183.3 KB · Affichages: 66

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Problème calcul date N-1

Bonjour jim7963,

Une piste peut-être ?:

Quand on utilise des fonctions travaillant sur les dates en VBA, il faut se rappeler que le VBA est américain et utilise par défaut des conventions relatives au système américain (notamment pour la numérotation des semaines). Pour cela, il vaut mieux utiliser l'aide d'excel (pas si mal que ça pour excel 2010) qui précise les choses.

Si on consulte l'aide pour datepart , on s'aperçoit que datepart a deux paramètres supplémentaires:
DatePart(interval, date[,firstdayofweek, firstweekofyear]])

Le premier firstdayofweek indique le premier jour de la semaine.
Le second firstweekofyear est la règle à utiliser pour déterminer quelle est la première semaine d'une année.

En gros pour l'Europe, on aurait les choix suivant à utiliser:
pour le 1ier jour de la semaine : vbMonday (à vérifier, peut-être vbSunday je ne me souviens plus)
pour la règle de la semaine n°1 : vbFirstFourDays.

Le mieux est de lire l'aide en entier puis de faire des tests. Mais d'autres membres te répondront sans doute plus utilement et précisément. D'ailleurs ce n'est qu'une piste...
 

sixair

XLDnaute Junior
Re : Problème calcul date N-1

Bonjour jim7963,

La fonction "Semaine" a bien été intégrée dans Excel, mais elle ne correspond toujours pas au système
européen, où la semaine 1 est la première semaine contenant au moins 4 jours...
Pour y remédier, il suffit de créer sa propre fonction.
Le calcul étant plutôt complexe, j'utilise une fonction simplifiée qui me permet de couvrir le XXème et XXIéme siècle (ça suffit dans bien des cas).
tu remplaces
Code:
DatePart("ww", Range("E1"))
par ta fonction
Code:
CalculSemaine(Range("E1"))
Ma fonction par exemple:
Code:
CalculSemaine = Int((MaDate - (DateSerial(Year(MaDate - Weekday(MaDate - 1) + 4), 1, 3) - Weekday(DateSerial(Year(MaDate - Weekday(MaDate - 1) + 4), 1, 3))) + 5) / 7)

Cordialement
 

Pièces jointes

  • Suivi Avril.xlsm
    179 KB · Affichages: 49
  • Suivi Avril.xlsm
    179 KB · Affichages: 55
  • Suivi Avril.xlsm
    179 KB · Affichages: 54

jim7963

XLDnaute Junior
Re : Problème calcul date N-1

Bonjour à vous deux et merci pour votre aide.

Sixair, ta formule améliore effectivement un petit peu mon problème mais ne le règle pas. Effectivement, maintenant le numéro des semaines de 2012 correspond bien aux dates mais la comparaison des semaines se décale.

Dans le cas présent avec une date saisie au 01/04/2013, il me compare la semaine 14 de 2013 avec la semaine 13 de 2012. Or ce n'est pas ce que je souhaite, je veux conserver la comparaison semaine 14 de 2013 avec semaine 14 de 2012.
J'ai testé pour d'autres mois comme Mars et Mai 2013, ça fonctionne bien, mais pour Avril ça pose toujours problème.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Problème calcul date N-1

Bonjour à tous,

Uniquement pour Excel de version >= 2010.

En fait, me semble-t-il, ce n'est qu'à partir de 2010, qu'Excel intègre la norme EU pour les numéros de semaine avec la fonction (le paramètre 21 correspond à la norme EU):
Code:
=NO.SEMAINE(A2;21)

En VBA la fonction DatePart avec le bon choix de paramètres donne les mêmes résultats:
Code:
DatePart("ww", range("A2"), vbMonday, vbFirstFourDays)

Ces deux expressions sont comparées à la formule de Laurent Longre qui fonctionne bien sûr avec toutes les versions de Excel
Code:
:=ENT((A2-(DATE(ANNEE(A2-JOURSEM(A2-1)+4);1;3)-JOURSEM(DATE(ANNEE(A2-JOURSEM(A2-1)+4);1;3)))+5)/7)
 

Pièces jointes

  • Num Sem (excel v2010 et plus).xlsm
    16.8 KB · Affichages: 51

jim7963

XLDnaute Junior
Re : Problème calcul date N-1

Bonjour Mapomme,

merci du complément pour ma formule mais en fait je retombe sur le même problème qu'avec la formule de sixair.
Les dates et semaines de 2012 sont justes mais décalées d'une semaine par rapport à 2013.
Il compare la semaine 14 de 2013 avec la 13 de 2012 au lieu de la 14, et ainsi de suite jusqu'à la fin du tableau.
Je ne vois pas comment lui faire comprendre de ne pas se décaler ainsi.
 

Pièces jointes

  • Suivi Avril.xlsm
    182.8 KB · Affichages: 46
  • Suivi Avril.xlsm
    182.8 KB · Affichages: 50
  • Suivi Avril.xlsm
    182.8 KB · Affichages: 48

Jacou

XLDnaute Impliqué
Re : Problème calcul date N-1

Bonsoir Jim, bonsoir à tous,

la différence ne vient-elle pas du mode de calcul différent pour les datepart de la colonne B et celles de la colonne D?
en effet pour la colonne B on fait DatePart("ww", Range("E1")) équivalent (si j'ai bien compris l'aide d'Excel) à
DatePart("ww", Range("E1"),vbSunday,vbFirstJan1) alors que pour la colonne D on fait
DatePart("ww", anneeprec, vbMonday, vbFirstFourDays).
donc en 2013, la semaine 1 commence le dimanche 30 décembre 2012 et pour 2012, elle commence le lundi 2 janvier 2012.
En 2012, le 1er avril est un dimanche : c'est donc le dernier jour de la semaine 13 de 2012 (qui commence le lundi 26 mars) alors qu'en 2013, c'est un lundi : c'est donc le deuxième jour de la semaine 14 de 2013 (qui commence le dimanche 31 mars).

donc en résumé, le problème sera peut être résolu si on utilise le même mode de calcul pour les deux années.

bon maintenant je vais aller prendre deux aspirines car avec cet effort de raisonnement, ça chauffe ;)

Bonne nuit à tous
(avec la victoire du PSG si j'ai bien entendu)
Il semble que j'ai mal entendu : match nul - bref je n'ai pas bien suivi !
 
Dernière édition:

peper_eliot

XLDnaute Junior
Re : Problème calcul date N-1

Tu veux donc comparer la semaine 14-2013 avec la 14-2012... Mais, comme précisé, dans le système européen la semaine 1 est la première semaine contenant au moins 4 jours... (J-V-S-D) d'ou ton décalage
En 2013, la semaine 1 commence le lundi 31 décembre
En 2012, la semaine 1 commence le lundi 2 janvier

Donc ton décalage est... normal... on peut laisser tomber l'aspirine ;)

Pour comparer S14/2013-S14/2012, le mieux est de prendre une référence identique... Le 1/4:
-pour le 1/4/2013, calculer le n° de semaine pour 2013
-Pour le 1/4/2012, calculer le N° de semaine pour 2012

Vérif N° de semaine pour la concordance
Si N° Semaine 2012 < à N° Semaine 2013, alors point de départ = 1/4/2012+1 (soit le 2/4/12)
Si N° Semaine 2012 > à N° Semaine 2013, alors point de départ = 1/4/2012-1 (soit le 31/3/12)
Sinon... c'est Ok
En l'occurrence, pour 2012... Il y a bien un décalage...
captur13.jpg

Le classeur joint ne reprend pas ton projet, mais j'espère qu'il pourra t'aider a comprendre le décalage
 

Pièces jointes

  • xls_dates_heures.xlsx
    148.4 KB · Affichages: 55
Dernière édition:

Discussions similaires

Réponses
15
Affichages
403

Statistiques des forums

Discussions
312 203
Messages
2 086 183
Membres
103 152
dernier inscrit
Karibu