Fonction JOUR et Day bis
Le
Emcy
-J'ai posé cette question :
Pourquoi la formule Excel "=JOUR(58)" donne 27 et la
formule VBA "Day(58)" donne 26 ?
JOUR et Day ne font-ils pas la même chose ?
-On m'a répondu (si j'ai bien compris) que la cause
venait d'Excel qui considère (pour d'obscures raisons)
que l'année 1900 est bissextile alors qu'elle ne l'ai
pas. A partir de l'année 1904 tout rentrerait dans
l'ordre, le calendrier d'Excel concorderait avec le
calendrier de Visual Basic.
1 : Maintenant, j'ai mis dans la cellule B1, la
formule : « =FRANC((JOUR(MINUTE( A1 /38)/2+55)&"/4/"&
A1)/7;)*7-6 » (je ne sais plus qui l'à fait ) => cette
formule calcul le jour de pâques de l'année qui est
inscrite dans la cellule A1.
2 : Sur le forum, on m'a donné cette Fonction pour
calculer Pâque en VBA (je sais plus qui est l'auteur):
Function FirstDayOfEaster(InputYear As Integer) As Long
Dim D As Integer
D = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) +
21
FirstDayOfEaster = DateSerial(InputYear, 3, 1) + D +
(D > 48) + 6 - ((InputYear + InputYear \ 4 + D + (D > 48)
+ 1) Mod 7)
End Function
3 : J'ai converti littéralement la fonction Excel en VBA
ce qui donne :
JourPaques = CStr(CDate(CDbl(CInt(DateSerial(Etape1, 4,
(Day(Minute(Etape1 / 38) / 2 + 55))) / 7)) * 7 - 6))
4 : Pour vérifier la fiabilité de ces solutions j'ai fait
ces deux macro :
1ère Macro :
Sub Main2()
Dim i As Integer
For i = 1900 To 2056
a = CStr(CDate(FirstDayOfEaster(i)))
b = CStr(CDate(CDbl(CInt(DateSerial(i, 4, (Day(Minute
(i / 38) / 2 + 55))) / 7)) * 7 - 6))
If a <> b Then
MsgBox (Str(i))
End If
Next i
End Sub
2ème Macro :
Sub Main3()
Dim i As Integer
For i = 1900 To 2079
Range("A2").Value = i
a = CStr(CDate(FirstDayOfEaster(i)))
b = CStr(Range("B2").Value)
If a <> b Then
MsgBox (Str(i))
End If
Next i
End Sub
La deuxième Macro me dit qu'il y a une erreur pour
l'année 2079 et la première m'indique pleins d'erreurs (
la première erreur apparaît en 1943).
- Les erreurs doivent venir de l'utilisation des
commandes JOUR et Day. Ce que je voudrais savoir, c'est
qu'elle est la bonne formule ? (j'ai pas trop confiance à
la fonction Excel car elle utilise la fonction JOUR mais
peut-être que la personne qui a écrit cette formule
savait exactement ce qu'il faisait)
Remarque : je ne me rappel plus jusqu'à quelle date les
fonctions ne marchent plus : l'erreur de la deuxième
Macro est peut-être du à ça.
PS : Je voulais juste dire Merci à toutes les personnes
qui m'avait répondues précédemment.
Pourquoi la formule Excel "=JOUR(58)" donne 27 et la
formule VBA "Day(58)" donne 26 ?
JOUR et Day ne font-ils pas la même chose ?
-On m'a répondu (si j'ai bien compris) que la cause
venait d'Excel qui considère (pour d'obscures raisons)
que l'année 1900 est bissextile alors qu'elle ne l'ai
pas. A partir de l'année 1904 tout rentrerait dans
l'ordre, le calendrier d'Excel concorderait avec le
calendrier de Visual Basic.
1 : Maintenant, j'ai mis dans la cellule B1, la
formule : « =FRANC((JOUR(MINUTE( A1 /38)/2+55)&"/4/"&
A1)/7;)*7-6 » (je ne sais plus qui l'à fait ) => cette
formule calcul le jour de pâques de l'année qui est
inscrite dans la cellule A1.
2 : Sur le forum, on m'a donné cette Fonction pour
calculer Pâque en VBA (je sais plus qui est l'auteur):
Function FirstDayOfEaster(InputYear As Integer) As Long
Dim D As Integer
D = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) +
21
FirstDayOfEaster = DateSerial(InputYear, 3, 1) + D +
(D > 48) + 6 - ((InputYear + InputYear \ 4 + D + (D > 48)
+ 1) Mod 7)
End Function
3 : J'ai converti littéralement la fonction Excel en VBA
ce qui donne :
JourPaques = CStr(CDate(CDbl(CInt(DateSerial(Etape1, 4,
(Day(Minute(Etape1 / 38) / 2 + 55))) / 7)) * 7 - 6))
4 : Pour vérifier la fiabilité de ces solutions j'ai fait
ces deux macro :
1ère Macro :
Sub Main2()
Dim i As Integer
For i = 1900 To 2056
a = CStr(CDate(FirstDayOfEaster(i)))
b = CStr(CDate(CDbl(CInt(DateSerial(i, 4, (Day(Minute
(i / 38) / 2 + 55))) / 7)) * 7 - 6))
If a <> b Then
MsgBox (Str(i))
End If
Next i
End Sub
2ème Macro :
Sub Main3()
Dim i As Integer
For i = 1900 To 2079
Range("A2").Value = i
a = CStr(CDate(FirstDayOfEaster(i)))
b = CStr(Range("B2").Value)
If a <> b Then
MsgBox (Str(i))
End If
Next i
End Sub
La deuxième Macro me dit qu'il y a une erreur pour
l'année 2079 et la première m'indique pleins d'erreurs (
la première erreur apparaît en 1943).
- Les erreurs doivent venir de l'utilisation des
commandes JOUR et Day. Ce que je voudrais savoir, c'est
qu'elle est la bonne formule ? (j'ai pas trop confiance à
la fonction Excel car elle utilise la fonction JOUR mais
peut-être que la personne qui a écrit cette formule
savait exactement ce qu'il faisait)
Remarque : je ne me rappel plus jusqu'à quelle date les
fonctions ne marchent plus : l'erreur de la deuxième
Macro est peut-être du à ça.
PS : Je voulais juste dire Merci à toutes les personnes
qui m'avait répondues précédemment.

Poser une question


C'est un problème connu de la formule de LL
Une soluce parmi :
=FRANC((JOUR(MINUTE($A$1/38)/2+55)&"/4/"&$A$1)/7;)*7-6+7*(A1 79)
AV
Ce petit classeur pourrait t'intéresser (10Ko) :
http://perso.wanadoo.fr/frederic.si...Feries.zip
Il compare les résultats de 4 formules et 2 fonctions VBA pour le calcul du jour
de Pâques. Dont celles que tu as testées de ton côté.
Il faut savoir qu'auncune d'entre elles ne donne un résultat exact à tous les
coups dans l'étendue des dates valides d'Excel (ie jusqu'au 31/12/9999
actuellement).
Des résultats corrects jusqu'en 2078 me semblent une précision acceptable (c'est
quand même dans 75 ans, il aura coulé de l'eau sous les ponts d'ici là !). La
formule de N Hetterich a cette précision (=FRANC((JOUR(MINUTE etc..).
Au-delà, la formule de JP Mesters et les fonctions VBA sont fiables sur de plus
longues durées (fais des tests je n'ai plus les résultats en tête). L'une ou
l'autre de ces 3 dernières options devraient pouvoir te convenir
(personnellement j'utilise la plupart du temps la formule de JP Mesters, qui a
de plus l'avantage, pour l'usage que j'en fais, d'être insensible au calendrier
du classeur).
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
... tu viens de casser tous mes espoires : moi qui
voulais créer la meilleures macro des 2 prochains
millénaires ...c'est foutu :(