Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction JOUR et Day bis

4 réponses
Avatar
Emcy
-J'ai pos=E9 cette question :

Pourquoi la formule Excel "=3DJOUR(58)" donne 27 et la=20
formule VBA "Day(58)" donne 26 ?

JOUR et Day ne font-ils pas la m=EAme chose ?

-On m'a r=E9pondu (si j'ai bien compris) que la cause=20
venait d'Excel qui consid=E8re (pour d'obscures raisons)=20
que l'ann=E9e 1900 est bissextile alors qu'elle ne l'ai=20
pas. A partir de l'ann=E9e 1904 tout rentrerait dans=20
l'ordre, le calendrier d'Excel concorderait avec le=20
calendrier de Visual Basic.

1 : Maintenant, j'ai mis dans la cellule B1, la=20
formule : =AB =3DFRANC((JOUR(MINUTE( A1 /38)/2+55)&"/4/"&=20
A1)/7;)*7-6 =BB (je ne sais plus qui l'=E0 fait ) =3D> cette=20
formule calcul le jour de p=E2ques de l'ann=E9e qui est=20
inscrite dans la cellule A1.

2 : Sur le forum, on m'a donn=E9 cette Fonction pour=20
calculer P=E2que en VBA (je sais plus qui est l'auteur):

Function FirstDayOfEaster(InputYear As Integer) As Long

Dim D As Integer
D =3D (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) +=20
21
FirstDayOfEaster =3D DateSerial(InputYear, 3, 1) + D +=20
(D > 48) + 6 - ((InputYear + InputYear \ 4 + D + (D > 48)=20
+ 1) Mod 7)

End Function

3 : J'ai converti litt=E9ralement la fonction Excel en VBA=20
ce qui donne :

JourPaques =3D CStr(CDate(CDbl(CInt(DateSerial(Etape1, 4,=20
(Day(Minute(Etape1 / 38) / 2 + 55))) / 7)) * 7 - 6))

4 : Pour v=E9rifier la fiabilit=E9 de ces solutions j'ai fait=20
ces deux macro :


1=E8re Macro :
Sub Main2()

Dim i As Integer

For i =3D 1900 To 2056

a =3D CStr(CDate(FirstDayOfEaster(i)))
b =3D CStr(CDate(CDbl(CInt(DateSerial(i, 4, (Day(Minute
(i / 38) / 2 + 55))) / 7)) * 7 - 6))
If a <> b Then

MsgBox (Str(i))
=20
End If

Next i

End Sub

2=E8me Macro :

Sub Main3()

Dim i As Integer

For i =3D 1900 To 2079

Range("A2").Value =3D i
a =3D CStr(CDate(FirstDayOfEaster(i)))
b =3D CStr(Range("B2").Value)
If a <> b Then

MsgBox (Str(i))
=20
End If

Next i

End Sub

La deuxi=E8me Macro me dit qu'il y a une erreur pour=20
l'ann=E9e 2079 et la premi=E8re m'indique pleins d'erreurs (=20
la premi=E8re erreur appara=EEt en 1943).

- Les erreurs doivent venir de l'utilisation des=20
commandes JOUR et Day. Ce que je voudrais savoir, c'est=20
qu'elle est la bonne formule ? (j'ai pas trop confiance =E0=20
la fonction Excel car elle utilise la fonction JOUR mais=20
peut-=EAtre que la personne qui a =E9crit cette formule=20
savait exactement ce qu'il faisait)=20

Remarque : je ne me rappel plus jusqu'=E0 quelle date les=20
fonctions ne marchent plus : l'erreur de la deuxi=E8me=20
Macro est peut-=EAtre du =E0 =E7a.

PS : Je voulais juste dire Merci =E0 toutes les personnes=20
qui m'avait r=E9pondues pr=E9c=E9demment.

4 réponses

Avatar
AV
La deuxième Macro me dit qu'il y a une erreur pour
l'année 2079


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

Avatar
Frédéric Sigonneau
Bonsoir,

Ce petit classeur pourrait t'intéresser (10Ko) :

http://perso.wanadoo.fr/frederic.sigonneau/code/Calendriers/PaquesEtFeries.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 !


-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.


Avatar
Emcy
Mecri !
... tu viens de casser tous mes espoires : moi qui
voulais créer la meilleures macro des 2 prochains
millénaires ...c'est foutu :(

-----Message d'origine-----
Bonsoir,

Ce petit classeur pourrait t'intéresser (10Ko) :

http://perso.wanadoo.fr/frederic.sigonneau/code/Calendrie
rs/PaquesEtFeries.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 !


-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.


.




Avatar
Emcy
Merci !

-----Message d'origine-----
La deuxième Macro me dit qu'il y a une erreur pour
l'année 2079


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


.