none
Meilleur article VB.NET pour 15.10.2010 – 15.11.2010 RRS feed

  • Discussion générale

  • Félicitations a M. Joseph Attila PUSZTAY pour son article et pour toute sa contribution dans les forums MSDN France !  

     

     

    CALCUL DES FETES MOBILES POUR UNE ANNEE
    PÂQUES, L.PAQUES, ASCENSION, PENTECOTE, L.PENTECOTE

    Tous les calculs sont basés sur la date de Pâques, qui est la date anniversaire de la  résurrection de notre Christ.
    A partir de cette date de Pâques nous trouvons les 5 dates des fêtes religieues (jours fériés mobiles) ; soit : Pâques, Lundi de Pâques (Pâques + 1 jour), Ascension (Pâques + 39 jours "élévation de notre Christ"), Pentecôte (Pâques + 49 jours "descente de l'esprit Saint") et lundi de Pentecôte (Pâques + 50 jours).
    Nota bene : on compte 40 et 50 jours après Pâques pour respectivementl'Ascension et la Pentecôte, mais c'est parce qu'on compte les deux extrêmes.

    Pâques est célébré le dimanche qui suit le quatorzième jour de la lune (NL) qui atteint cet âge au 21 mars (équinoxe) ou immédiatement après (concile de Nicée "Turquie" en l'an 325).
    Les dates extrêmes incluses de Pâques vont du 22 mars au 25 avril lors de la PL. Toutefois la NL qui sert de base ("Lune" dixit le concile de Nicée) est la NL éclésiastique et non pas astronomique. En effet, à l'époque depuis le moyen-orient on ne savait pas exactement quand avait lieu la NL, puisqu'invisible de la terre, alors on attendait de voir le premier croissant pour déterminer la NL. Ceci crée une divergeance de quelques heures qui peuvent repousser jusqu'à 34 jours au maximum le calcul de Pâques ; d'autant que les calculs astronomiques se font pour l'équateur ou à l'équinoxe le jour et la nuit à la même durée.

    Exemples pour 2010 : le 1er jour de la NL juste avant l'équinoxe est le 15 mars, on va donc faire 15 mars + 14 jours = 29 mars, ici la NL a commencé avant l'équinoxe et 14 jours après nous avons dépassé ce dernier, donc les condition sont réunies, mais le 29 mars étant un lundi on va devoir avancer jusqu'au prochain dimanche qui sera Pâques le dimanche 4 Avril 2010.

    Le code du programme a été testé avec trois objets (form1, textBox1 et button1).
    Le Texte de l'année admis doit être entre 2049 et 34 inclus. Le calcul est dans le code du bouton, donc, bien penser à saisir l'année voulue en totalité, le résultat est dans un MessageBox.

    Option Explicit On
    Public Class Form1
     Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     TextBox1.Text = "Saisir l'année en entier"
     End Sub
    
     Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
     TextBox1.Focus()
     End Sub
    
     Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
     Select Asc(e.KeyChar)
      Case Is < 8 : e.KeyChar = vbNullChar
      Case 8
      Case 9 To 12 : e.KeyChar = vbNullChar
      Case 13
      Call Button1_Click(sender, e)
      Exit Sub
      Case 14 To 47 : e.KeyChar = vbNullChar
      Case Is > 57 : e.KeyChar = vbNullChar
     End Select
     End Sub
    
     Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     Dim an As Long = Val(TextBox1.Text)
     Dim jour As Long
     Dim mois As Long
     Dim A As Long
     Dim C As Long
     Dim D As Long
     Dim F As Long
     Dim G As Long
     Dim H As Long
     Dim I As Long
     Dim J As Long
     Dim K As Long
     Dim M As Long
     Dim N As Long
     Dim O As Long
     Dim P As Long
     Dim Q As Long
     Dim sngR As Double
     Dim chaine As String
     Dim paques As Date
     Dim lundiPaques As Date
     Dim ascension As Date
     Dim pentecote As Date
     Dim lundiPentecote As Date
     '
     If an < 34 Or an > 2049 Then
      MsgBox("L'année doit être comprise entre 2049 et 34, remédier ... ", vbExclamation)
      TextBox1.Focus()
      Exit Sub
     End If
     '
     A = an Mod 19
     c = Int(an / 100)
     D = 100 * ((an / 100) - Int(an / 100))
     F = Int(c / 4)
     G = 4 * (c / 4 - Int(c / 4))
     H = Int((8 + c) / 25)
     I = Int((1 + C - H) / 3)
     J = 15 + 19 * A + C - F - I
     K = Int(0.5 + 30 * (J / 30 - Int(J / 30)))
     M = Int(D / 4)
     N = 4 * (D / 4 - Int(D / 4))
     O = 32 + 2 * (G + m) - k - N
     P = Int(7 * (O / 7 - Int(O / 7)) + 0.5)
     Q = Int((a + 11 * k + 22 * p) / 451)
     sngR = (114 + k + p - 7 * Q) / 31
     mois = Int(sngR)
     jour = Int(31 * (sngR - Int(sngR)) + 1.5)
     '
     paques = DateSerial(an, mois, jour)
     lundiPaques = paques.AddDays(1)
     ascension = paques.AddDays(39)
     pentecote = paques.AddDays(49)
     lundiPentecote = paques.AddDays(50)
     '
     chaine = an & vbLf & vbLf
     chaine = chaine & "Dimanche " & paques & vbLf
     chaine = chaine & "Lundi " & lundiPaques & vbLf
     chaine = chaine & "Jeudi " & ascension & vbLf
     chaine = chaine & "Dimanche " & pentecote & vbLf
     chaine = chaine & "Lundi " & lundiPentecote & vbLf
     MsgBox(chaine)
     TextBox1.Focus()
     End Sub ' button1_click
    End Class
    

    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire

    Suivez MSDN sur Twitter 

    mercredi 17 novembre 2010 11:32