GNT sans publicité, site mobile, fonctionnalitées exclusives...

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.
Lire les 4 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
AV
Le #222418
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

Frédéric Sigonneau
Le #222970
Bonsoir,

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 !


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


Emcy
Le #222807
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.si.../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.


.




Emcy
Le #222806
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


.




Publicité
Suivre les réponses
Poster une réponse
Anonyme