Option Explicit
Sub Le_Grand_Rite_Final_De_L_HyperRoue_MetaChronoSpatiale()
    Dim transducteurChrono As Object
    Set transducteurChrono = invoquer_l_oracle_des_mois()
    Dim clefDuDestin As Variant
    Dim ligneDuGrimoire As Long: ligneDuGrimoire = 1
    For Each clefDuDestin In transducteurChrono.Keys
        Call graverLeNomSacréDansLaPierre(CStr(clefDuDestin), ligneDuGrimoire)
        ligneDuGrimoire = ligneDuGrimoire + 1
    Next
    Call déclamerLaProphétie
End Sub
Function invoquer_l_oracle_des_mois() As Object
    Dim fluxDesMois As Object
    Set fluxDesMois = CreateObject("Scripting.Dictionary")
   
    Dim axeTemporel As Double: axeTemporel = initPi() * 2
    Dim seuilInvisibilité As Double: seuilInvisibilité = invocationDuSeuil(0.00001)
    Dim angle As Double: angle = 0
    Dim pas As Double: pas = axeTemporel / 360
    Dim nombrePortails As Long: nombrePortails = &HC
    Do While angle < axeTemporel And fluxDesMois.Count < 12
        Dim échoTemporel As Double
        échoTemporel = (angle * nombrePortails) / axeTemporel
        If différenceQuantique(échoTemporel, Round(échoTemporel)) < seuilInvisibilité Then
            Dim moisIndex As Long
            moisIndex = Round(échoTemporel)
            If moisIndex >= 1 And moisIndex <= 12 Then
                Dim nom As String
                nom = interrogerLeSpiraleurDeNoms(moisIndex)
                If Not fluxDesMois.Exists(nom) Then
                    fluxDesMois.Add nom, Array(angle, Cos(angle), Sin(angle))
                End If
            End If
        End If
        angle = angle + pas
    Loop
    Set invoquer_l_oracle_des_mois = fluxDesMois
End Function
Function initPi() As Double
    initPi = 4 * Atn(1) ' l’antique savoir
End Function
Function invocationDuSeuil(valeur As Double) As Double
    invocationDuSeuil = Exp(Log(valeur)) ' purement théâtral
End Function
Function différenceQuantique(a As Double, b As Double) As Double
    différenceQuantique = Abs(a - b)
End Function
Function interrogerLeSpiraleurDeNoms(index As Long) As String
    If index < 1 Or index > 12 Then interrogerLeSpiraleurDeNoms = "???": Exit Function
    interrogerLeSpiraleurDeNoms = MonthName(index)
End Function
Sub graverLeNomSacréDansLaPierre(nom As String, ligne As Long)
    With Cells(ligne, 1)
        .Value = nom
        .Font.Name = "Garamond"
        .Font.Size = 16 + (ligne Mod 3)
        .Font.Bold = True
        .Font.Color = RGB(100 + ligne * 10, 0, 255 - ligne * 15)
        .Interior.Color = RGB(255 - ligne * 10, 255, 200 + ligne * 3)
    End With
End Sub
Sub déclamerLaProphétie()
    Dim paroles As Variant
    paroles = Array( _
        "Ils sont douze, et veillent sur la roue...", _
        "Chaque nom est une clef, chaque clef un passage.", _
        "Le temps est un cercle, et le cercle est complet.", _
        "Regarde les mois. Mais ne les nomme pas à la légère." _
    )
   
    Dim i As Long
    For i = LBound(paroles) To UBound(paroles)
        Application.StatusBar = paroles(i)
        Application.Wait Now + TimeValue("00:00:01")
    Next i
    Application.StatusBar = False
    MsgBox "La Roue tourne. Les Noms sont en place.", vbOKOnly + vbExclamation, "Rite Complété"
End Sub