OVH Cloud OVH Cloud

fontion Pâques

9 réponses
Avatar
Freedo
Bonjour =E0 Toutes et =E0 Tous,
j'ai r=E9cup=E9r=E9 une macro pour le calcul du jour de P=E2ques=20
et ses d=E9riv=E9s.
Mais je n'arrive pas =E0 l'utiliser dans mons classeur
avec la formule tel que : =3Dp=E2ques(C3)
Pourtant j'ai cr=E9=E9 un classur Paques o=F9 j'ai mis dans un=20
module la macro et j'ai souvegard=E9 en xla ensuite j'ai=20
plac=E9cette macro xla dans le r=E9pertoire Macrolib.
mais cela ne fonctionne pas encore.
O=F9 me suis-je tromp=E9 ?
Merci de suivre,
Freedo=20
Public Function PAQUES(ann=E9e As Variant) As String
Dim lAnnee As Long
Dim retour As Long
Dim jour As String
lAnnee =3D CLng(ann=E9e)
If lAnnee >=3D 1 Then
retour =3D calculerPaques(lAnnee)
If retour > 31 Then
jour =3D CStr(retour - 31) & ".04." & CStr(ann=E9e)
Else
jour =3D CStr(retour) & ".03." & CStr(ann=E9e)
End If
Else
jour =3D ""
End If
PAQUES =3D jour
End Function

Private Function calculerPaques(annee As Long) As Long
Dim m As Long
Dim n As Long
m =3D (19 * (annee Mod 19) + 24) Mod 30
n =3D (2 * (annee Mod 4) + 4 * (annee Mod 7) + 6 * m +=20
5) Mod 7
calculerPaques =3D m + n + 22
End Function

9 réponses

Avatar
Denis Michon
Bonjour Freedo,


Est-ce que ta macro complémentaire s'affiche dans la fenêtre Barre des menus / outils / macro complémentaire ? si oui,
tu la coches et au besoin tu prends le bouton parcourir, et tu lui montres l'endroit où tu as caché le fichier de ta
macro complémentaire.

Ce n'est pas parce que tu as placé dans le répertoire des macros complémentaires qu'elle va se charger automatiquement !
Elle est au même rang que toutes les autres! ;-)



Salutations!



"Freedo" a écrit dans le message de
news:001e01c3a172$b026c3a0$
Bonjour à Toutes et à Tous,
j'ai récupéré une macro pour le calcul du jour de Pâques
et ses dérivés.
Mais je n'arrive pas à l'utiliser dans mons classeur
avec la formule tel que : =pâques(C3)
Pourtant j'ai créé un classur Paques où j'ai mis dans un
module la macro et j'ai souvegardé en xla ensuite j'ai
placécette macro xla dans le répertoire Macrolib.
mais cela ne fonctionne pas encore.
Où me suis-je trompé ?
Merci de suivre,
Freedo
Public Function PAQUES(année As Variant) As String
Dim lAnnee As Long
Dim retour As Long
Dim jour As String
lAnnee = CLng(année)
If lAnnee >= 1 Then
retour = calculerPaques(lAnnee)
If retour > 31 Then
jour = CStr(retour - 31) & ".04." & CStr(année)
Else
jour = CStr(retour) & ".03." & CStr(année)
End If
Else
jour = ""
End If
PAQUES = jour
End Function

Private Function calculerPaques(annee As Long) As Long
Dim m As Long
Dim n As Long
m = (19 * (annee Mod 19) + 24) Mod 30
n = (2 * (annee Mod 4) + 4 * (annee Mod 7) + 6 * m +
5) Mod 7
calculerPaques = m + n + 22
End Function
Avatar
gee-dee-
Bonsoir,
en place de fonction peronnalisée, il est possible d'utiliser une formule
à choisir parmi les 20 suivantes : (compilation de Hans Herber
http://www.herber.de)

la variable ANN représente l'année

=FRANC((JOUR(MINUTE(ANN/38)/2+55)&"/4/"&ANN)/7;)*7-6

=FRANC(("4/"&ANN)/7+MOD(19*MOD(ANN;19)-7;30)*14%;)*7-6

=FRANC(DATE(ANN;4;MOD(18,37*MOD(ANN;19)-5;29))/7;)*7-6

=FRANC(DATE(ANN;5;-MOD(6-349*MOD(ANN/19;1);29))/7;0)*7-6

=7*TRONQUE(DATE(ANN;3;MOD(18,37*MOD(ANN;19)-6;29))/7)+29

)+7*TRONQUE(DATE(ANN;3;MOD(19*MOD(ANN;19)-6;30)*96%)/7)

=TRONQUE(DATE(ANN;4;MOD(19*MOD(ANN;19)-6;30)*96%-3)/7)*7+1

=TRONQUE(PLANCHER("3/5/"&ANN;29,5311)/7-(MOD(ANN;95)))*7-6

=PLAFOND(("17/4/"&ANN)-TRONQUE(MOD(11*MOD(ANN;19)+5;30)-1,5);7)+1

=TRONQUE(DATE(ANN;7;-CODE(STXT("NYdQJT_LWbOZeR]KU`";MOD(ANN;19)+1;1)))/7)*7
+8

=PLAFOND(DATE(ANN;4;20)-MOD(6+11*MOD(ANN;19);30)-(MOD(6+11*MOD(ANN;19);30)<3
);7)+1

=ARRONDI.SUP((("21/3/"&ANN)+MOD(204-11*MOD(ANN;19);30))/7-(ABS(ABS(ANN-2015)
-47,5),5);)*7+1

=7*TRONQUE((MOD(MOD(ANN;19)*19-6;30)+365,25*ANN-693881)/7)-SI(OU(ANN50+{4
;31;99;126});7)-6

ÚTE(ANN;3;28)+MOD(24-MOD(ANN;19)*10,63;29)-MOD(TRONQUE(ANN*5/4)+MOD(24-MOD
(ANN;19)*10,63;29)+1;7)

ÚTE(ANN;3;29,56+0,979*MOD(204-11*MOD(ANN;19);30)-JOURSEM(DATE(ANN;3;28,56+
0,979*MOD(204-11*MOD(ANN;19);30))))

ÚTE(ANN;3;28+MOD(204-11*MOD(ANN;19);30))-MOD(DATE(ANN;3;6+MOD(204-11*MOD(A
NN;19);30));7)-SI(OU(ANN54;ANN81;ANN 49;ANN 76);7)

=TRONQUE(365,25*ANN-693894)+SI(OU(ANN54;ANN81;ANN 49;ANN 76);;7)+M
OD(24-11*MOD(ANN;19);30)-MOD(ANN+TRONQUE(ANN/4)+MOD(24-11*MOD(ANN;19);30)+1;
7)

ÚTE(ANN;4;MOD(24-11*MOD(ANN;19);30)-MOD(1+ENT(ANN*5/4)+MOD(24-11*MOD(ANN;1
9);30)-(MOD(24-11*MOD(ANN;19);30)>27);7)-(MOD(24-11*MOD(ANN;19);30)>27)-3)

ÚTE(ANN;3;28)+MOD(24-11*MOD(ANN;19);30)-(MOD(24-11*MOD(ANN;19);30)>27)-MOD
(ENT(5*ANN/4)+1+MOD(24-11*MOD(ANN;19);30)-(MOD(24-11*MOD(ANN;19);30)>27);7)

ÚTE(ANN;3;28)+MOD(24+19*MOD(ANN;19);30)-(MOD(24+19*MOD(ANN;19);30)>27)-MOD
(ENT(ANN+ANN/4)+MOD(24+19*MOD(ANN;19);30)-(MOD(24+19*MOD(ANN;19);30)>27)+1;7
)




concernant ton probleme ....

2 constatations

le séparateur de date utilisé est le "point"

la restitution est au format texte.



voici le code corrigé :

Public Function PAQUES(année As Variant) As Date
Dim lAnnee As Long
Dim retour As Long
Dim jour As String
lAnnee = CLng(année)
If lAnnee >= 1 Then
retour = calculerPaques(lAnnee)
If retour > 31 Then
jour = CStr(retour - 31) & "/04/" & CStr(année)
Else
jour = CStr(retour) & "/03/" & CStr(année)
End If
Else
jour = ""
End If
PAQUES = CDate(jour)
End Function



Private Function calculerPaques(annee As Long) As Long
Dim m As Long
Dim n As Long
m = (19 * (annee Mod 19) + 24) Mod 30
n = (2 * (annee Mod 4) + 4 * (annee Mod 7) + 6 * m + 5) Mod 7
calculerPaques = m + n + 22
End Function

@+
Avatar
Daniel.M
Salut Modeste,

concernant ton probleme ....
2 constatations
le séparateur de date utilisé est le "point"
la restitution est au format texte.


AMA, une fonction Paques() pourrait retourner une date (autant que faire se
peut). Le formattage pourrait être effectué au niveau de la cellule qui contient
le résultat, ce qui conduit à un maximum de flexibilité.

Public Function PAQUES5(lannee As Long) As Variant
If lannee > 0 Then
PAQUES5 = DateSerial(lannee, 3, calculerPaques(lannee))
' ou une variation de ceci, si on tient à une chaîne
' PAQUES5 = Format(DateSerial(lannee, 3, _
' calculerPaques(lannee)), "dd.mm.yyyy")
Else
PAQUES5 = ""
End If
End Function

Salutations,

Daniel M.

Avatar
Daniel.M
La fonction donnée pourrait évidemment être imbriquée dans une seule.
Mais c'était pour rester cohérent avec cette ficelle.

Salutations,

Daniel M.
Avatar
Freedo
Bonjour Geedee,
merci pour la profusion de solutions, c'est OK
Cordialement,
freedo
-----Message d'origine-----
Bonsoir,
en place de fonction peronnalisée, il est possible
d'utiliser une formule

à choisir parmi les 20 suivantes : (compilation de Hans
Herber

http://www.herber.de)

la variable ANN représente l'année

=FRANC((JOUR(MINUTE(ANN/38)/2+55)&"/4/"&ANN)/7;)*7-6

=FRANC(("4/"&ANN)/7+MOD(19*MOD(ANN;19)-7;30)*14%;)*7-6

=FRANC(DATE(ANN;4;MOD(18,37*MOD(ANN;19)-5;29))/7;)*7-6

=FRANC(DATE(ANN;5;-MOD(6-349*MOD(ANN/19;1);29))/7;0)*7-6

=7*TRONQUE(DATE(ANN;3;MOD(18,37*MOD(ANN;19)-6;29))/7)+29

)+7*TRONQUE(DATE(ANN;3;MOD(19*MOD(ANN;19)-6;30)*96%)/7)

=TRONQUE(DATE(ANN;4;MOD(19*MOD(ANN;19)-6;30)*96%-3)/7)
*7+1


=TRONQUE(PLANCHER("3/5/"&ANN;29,5311)/7-(MOD(ANN;95)))
*7-6


=PLAFOND(("17/4/"&ANN)-TRONQUE(MOD(11*MOD(ANN;19)+5;30)-
1,5);7)+1


=TRONQUE(DATE(ANN;7;-CODE(STXT("NYdQJT_LWbOZeR]KU`";MOD
(ANN;19)+1;1)))/7)*7

+8

=PLAFOND(DATE(ANN;4;20)-MOD(6+11*MOD(ANN;19);30)-(MOD
(6+11*MOD(ANN;19);30)<3

);7)+1

=ARRONDI.SUP((("21/3/"&ANN)+MOD(204-11*MOD
(ANN;19);30))/7-(ABS(ABS(ANN-2015)

-47,5),5);)*7+1

=7*TRONQUE((MOD(MOD(ANN;19)*19-6;30)+365,25*ANN-
693881)/7)-SI(OU(ANN50+{4

;31;99;126});7)-6

TE(ANN;3;28)+MOD(24-MOD(ANN;19)*10,63;29)-MOD(TRONQUE
(ANN*5/4)+MOD(24-MOD

(ANN;19)*10,63;29)+1;7)

TE(ANN;3;29,56+0,979*MOD(204-11*MOD(ANN;19);30)-
JOURSEM(DATE(ANN;3;28,56+

0,979*MOD(204-11*MOD(ANN;19);30))))

TE(ANN;3;28+MOD(204-11*MOD(ANN;19);30))-MOD(DATE
(ANN;3;6+MOD(204-11*MOD(A

NN;19);30));7)-SI(OU
(ANN54;ANN81;ANN 49;ANN 76);7)


=TRONQUE(365,25*ANN-693894)+SI(OU
(ANN54;ANN81;ANN 49;ANN 76);;7)+M

OD(24-11*MOD(ANN;19);30)-MOD(ANN+TRONQUE(ANN/4)+MOD(24-
11*MOD(ANN;19);30)+1;

7)

TE(ANN;4;MOD(24-11*MOD(ANN;19);30)-MOD(1+ENT(ANN*5/4)
+MOD(24-11*MOD(ANN;1

9);30)-(MOD(24-11*MOD(ANN;19);30)>27);7)-(MOD(24-11*MOD
(ANN;19);30)>27)-3)


TE(ANN;3;28)+MOD(24-11*MOD(ANN;19);30)-(MOD(24-11*MOD
(ANN;19);30)>27)-MOD

(ENT(5*ANN/4)+1+MOD(24-11*MOD(ANN;19);30)-(MOD(24-11*MOD
(ANN;19);30)>27);7)


TE(ANN;3;28)+MOD(24+19*MOD(ANN;19);30)-(MOD(24+19*MOD
(ANN;19);30)>27)-MOD

(ENT(ANN+ANN/4)+MOD(24+19*MOD(ANN;19);30)-(MOD(24+19*MOD
(ANN;19);30)>27)+1;7

)




concernant ton probleme ....

2 constatations

le séparateur de date utilisé est le "point"

la restitution est au format texte.



voici le code corrigé :

Public Function PAQUES(année As Variant) As Date
Dim lAnnee As Long
Dim retour As Long
Dim jour As String
lAnnee = CLng(année)
If lAnnee >= 1 Then
retour = calculerPaques(lAnnee)
If retour > 31 Then
jour = CStr(retour - 31) & "/04/" & CStr
(année)

Else
jour = CStr(retour) & "/03/" & CStr(année)
End If
Else
jour = ""
End If
PAQUES = CDate(jour)
End Function



Private Function calculerPaques(annee As Long) As Long
Dim m As Long
Dim n As Long
m = (19 * (annee Mod 19) + 24) Mod 30
n = (2 * (annee Mod 4) + 4 * (annee Mod 7) + 6 * m +
5) Mod 7

calculerPaques = m + n + 22
End Function

@+





.



Avatar
Freedo
bonjour Alain,
Merci pour tes conseils, mais tout ce que tu me dis , je
l'ai fait et cela apparait bien dands les macros
complémentaires, et coché; mais cela ne vas pas.
@+
freedo
-----Message d'origine-----
Bonjour Freedo,


Est-ce que ta macro complémentaire s'affiche dans la
fenêtre Barre des menus / outils / macro complémentaire ?

si oui,
tu la coches et au besoin tu prends le bouton parcourir,
et tu lui montres l'endroit où tu as caché le fichier de

ta
macro complémentaire.

Ce n'est pas parce que tu as placé dans le répertoire
des macros complémentaires qu'elle va se charger

automatiquement !
Elle est au même rang que toutes les autres! ;-)



Salutations!



"Freedo" a
écrit dans le message de

news:001e01c3a172$b026c3a0$
Bonjour à Toutes et à Tous,
j'ai récupéré une macro pour le calcul du jour de Pâques
et ses dérivés.
Mais je n'arrive pas à l'utiliser dans mons classeur
avec la formule tel que : =pâques(C3)
Pourtant j'ai créé un classur Paques où j'ai mis dans un
module la macro et j'ai souvegardé en xla ensuite j'ai
placécette macro xla dans le répertoire Macrolib.
mais cela ne fonctionne pas encore.
Où me suis-je trompé ?
Merci de suivre,
Freedo
Public Function PAQUES(année As Variant) As String
Dim lAnnee As Long
Dim retour As Long
Dim jour As String
lAnnee = CLng(année)
If lAnnee >= 1 Then
retour = calculerPaques(lAnnee)
If retour > 31 Then
jour = CStr(retour - 31) & ".04." & CStr
(année)

Else
jour = CStr(retour) & ".03." & CStr(année)
End If
Else
jour = ""
End If
PAQUES = jour
End Function

Private Function calculerPaques(annee As Long) As Long
Dim m As Long
Dim n As Long
m = (19 * (annee Mod 19) + 24) Mod 30
n = (2 * (annee Mod 4) + 4 * (annee Mod 7) + 6 * m +
5) Mod 7
calculerPaques = m + n + 22
End Function


.



Avatar
Freedo
Bonjour Daniel,
Merci pour le suivi, mais justement si tout est imbriqué
cela se présenterait comment ?
merci de suivre,
Freedo
-----Message d'origine-----
La fonction donnée pourrait évidemment être imbriquée
dans une seule.

Mais c'était pour rester cohérent avec cette ficelle.

Salutations,

Daniel M.


.



Avatar
Pascal
Une autre très lourde mais éfficace

'ÚTE(An;SI((25-MOD((11*MOD(An-1900;19)+4-ENT((7*MOD(An-1900;19)+1)/19));29
)-MOD(An-1900+ENT((An-1900)/4)+31-MOD((11*MOD(An-1900;19)+4-ENT((7*MOD(An-19
00;19)+1)/19));29);7))>0;4;3);SI((25-MOD((11*MOD(An-1900;19)+4-ENT((7*MOD(An
-1900;19)+1)/19));29)-MOD(An-1900+ENT((An-1900)/4)+31-MOD((11*MOD(An-1900;19
)+4-ENT((7*MOD(An-1900;19)+1)/19));29);7))>0;(25-MOD((11*MOD(An-1900;19)+4-E
NT((7*MOD(An-1900;19)+1)/19));29)-MOD(An-1900+ENT((An-1900)/4)+31-MOD((11*MO
D(An-1900;19)+4-ENT((7*MOD(An-1900;19)+1)/19));29);7));31+(25-MOD((11*MOD(An
-1900;19)+4-ENT((7*MOD(An-1900;19)+1)/19));29)-MOD(An-1900+ENT((An-1900)/4)+
31-MOD((11*MOD(An-1900;19)+4-ENT((7*MOD(An-1900;19)+1)/19));29);7))))


Fonction de JP MESTERS.

Ou encore

'=FRANC((JOUR(MINUTE(An/38)/2+55)&"/4/"&An)/7;)*7-6

Ou alors

'=ARRONDI(DATE(An;4;MOD(234-11*MOD(An;19);30))/7;)*7-6

Pascal



"gee-dee-" a écrit dans le message de news:
#
Bonsoir,
en place de fonction peronnalisée, il est possible d'utiliser une formule
à choisir parmi les 20 suivantes : (compilation de Hans Herber
http://www.herber.de)

la variable ANN représente l'année

=FRANC((JOUR(MINUTE(ANN/38)/2+55)&"/4/"&ANN)/7;)*7-6

=FRANC(("4/"&ANN)/7+MOD(19*MOD(ANN;19)-7;30)*14%;)*7-6

=FRANC(DATE(ANN;4;MOD(18,37*MOD(ANN;19)-5;29))/7;)*7-6

=FRANC(DATE(ANN;5;-MOD(6-349*MOD(ANN/19;1);29))/7;0)*7-6

=7*TRONQUE(DATE(ANN;3;MOD(18,37*MOD(ANN;19)-6;29))/7)+29

)+7*TRONQUE(DATE(ANN;3;MOD(19*MOD(ANN;19)-6;30)*96%)/7)

=TRONQUE(DATE(ANN;4;MOD(19*MOD(ANN;19)-6;30)*96%-3)/7)*7+1

=TRONQUE(PLANCHER("3/5/"&ANN;29,5311)/7-(MOD(ANN;95)))*7-6

=PLAFOND(("17/4/"&ANN)-TRONQUE(MOD(11*MOD(ANN;19)+5;30)-1,5);7)+1


=TRONQUE(DATE(ANN;7;-CODE(STXT("NYdQJT_LWbOZeR]KU`";MOD(ANN;19)+1;1)))/7)*7

+8


=PLAFOND(DATE(ANN;4;20)-MOD(6+11*MOD(ANN;19);30)-(MOD(6+11*MOD(ANN;19);30)<3

);7)+1


=ARRONDI.SUP((("21/3/"&ANN)+MOD(204-11*MOD(ANN;19);30))/7-(ABS(ABS(ANN-2015)

-47,5),5);)*7+1


=7*TRONQUE((MOD(MOD(ANN;19)*19-6;30)+365,25*ANN-693881)/7)-SI(OU(ANN50+{4

;31;99;126});7)-6


ÚTE(ANN;3;28)+MOD(24-MOD(ANN;19)*10,63;29)-MOD(TRONQUE(ANN*5/4)+MOD(24-MOD

(ANN;19)*10,63;29)+1;7)


ÚTE(ANN;3;29,56+0,979*MOD(204-11*MOD(ANN;19);30)-JOURSEM(DATE(ANN;3;28,56+

0,979*MOD(204-11*MOD(ANN;19);30))))


ÚTE(ANN;3;28+MOD(204-11*MOD(ANN;19);30))-MOD(DATE(ANN;3;6+MOD(204-11*MOD(A

NN;19);30));7)-SI(OU(ANN54;ANN81;ANN 49;ANN 76);7)


=TRONQUE(365,25*ANN-693894)+SI(OU(ANN54;ANN81;ANN 49;ANN 76);;7)+M


OD(24-11*MOD(ANN;19);30)-MOD(ANN+TRONQUE(ANN/4)+MOD(24-11*MOD(ANN;19);30)+1;

7)


ÚTE(ANN;4;MOD(24-11*MOD(ANN;19);30)-MOD(1+ENT(ANN*5/4)+MOD(24-11*MOD(ANN;1

9);30)-(MOD(24-11*MOD(ANN;19);30)>27);7)-(MOD(24-11*MOD(ANN;19);30)>27)-3)


ÚTE(ANN;3;28)+MOD(24-11*MOD(ANN;19);30)-(MOD(24-11*MOD(ANN;19);30)>27)-MOD


(ENT(5*ANN/4)+1+MOD(24-11*MOD(ANN;19);30)-(MOD(24-11*MOD(ANN;19);30)>27);7)



ÚTE(ANN;3;28)+MOD(24+19*MOD(ANN;19);30)-(MOD(24+19*MOD(ANN;19);30)>27)-MOD


(ENT(ANN+ANN/4)+MOD(24+19*MOD(ANN;19);30)-(MOD(24+19*MOD(ANN;19);30)>27)+1;7

)




concernant ton probleme ....

2 constatations

le séparateur de date utilisé est le "point"

la restitution est au format texte.



voici le code corrigé :

Public Function PAQUES(année As Variant) As Date
Dim lAnnee As Long
Dim retour As Long
Dim jour As String
lAnnee = CLng(année)
If lAnnee >= 1 Then
retour = calculerPaques(lAnnee)
If retour > 31 Then
jour = CStr(retour - 31) & "/04/" & CStr(année)
Else
jour = CStr(retour) & "/03/" & CStr(année)
End If
Else
jour = ""
End If
PAQUES = CDate(jour)
End Function



Private Function calculerPaques(annee As Long) As Long
Dim m As Long
Dim n As Long
m = (19 * (annee Mod 19) + 24) Mod 30
n = (2 * (annee Mod 4) + 4 * (annee Mod 7) + 6 * m + 5) Mod 7
calculerPaques = m + n + 22
End Function

@+







Avatar
Daniel.M
Salut Freedo,

Un exemple d'une implantation VBA ci-dessous. Comme indiqué précédemment, tu
formattes tes cellules sous format date dans ta feuille de calcul.

En passant, cette fonction a tendance a disjoncter très sérieusement à partir de
2100.
Si tu utilises VBA, il n'y a pas de raison de ne pas utiliser celle disponible
sur le site de Frédéric Sigonneau qui fonctionne toujours (elle s'appelle
PAQUES()).

Public Function PAQUES2(an As Long) As Variant
Dim m As Long, n As Long
If an > 0 Then
m = (19 * (an Mod 19) + 24) Mod 30
n = (2 * (an Mod 4) + 4 * (an Mod 7) + 6 * m + 5) Mod 7
m = m + n + 22
PAQUES2 = DateSerial(an, 3, m)
Else
PAQUES2 = ""
End If
End Function

Salutations,

Daniel M.

"Freedo" wrote in message
news:0f4701c3a227$bfca5b40$
Bonjour Daniel,
Merci pour le suivi, mais justement si tout est imbriqué
cela se présenterait comment ?
merci de suivre,
Freedo