Option Explicit
Public region As Variant 'region 0,1,2
Public Result As Variant ' ou date ou ancienne date ou rien
Dim posLeft As Long, posTop As Long, Obj As Object
Public Oldvalue
Public WithEvents Bout As MSForms.Label 'map pour 42 bouton
Private clavier(43) As New calendar 'tableau d'instance de l'userform
Private Sub UserForm_Activate()
Dim I&
config
If TypeName(Obj) = "Range" Then placementRange Obj Else placementUF Obj
Oldvalue = Obj.Value
ldate = IIf(region > 0, "Aujourd'hui", "Todays is") & vbCrLf & IIf(region = 0, Format(Date, "mm/dd/yyyy"), IIf(region = 1, Date, Format(Date, "yyyy-mm-dd")))
Me.Caption = IIf(region = 0, "Calendar", "Calendrier")
'mappage pour evenement unique (42 boutons) (intra userform sans module classe)
For I = 1 To 42: Set clavier(I).Bout = Me.Controls("j" & I): Next
End Sub
'evenement unique pour 42 boutons
Private Sub bout_Click(): putDate Bout: End Sub
Public Sub putDate(ByVal q As Object)
Dim Forme
Forme = Switch(calendar.region = 0, "mm/dd/yyyy", calendar.region = 1, "dd/mm/yyyy", calendar.region = 2, "yyyy-mm-dd")
If TypeName(Obj) = "Range" Then
calendar.Result = CDate(DateSerial(calendar.Cbyear.Value, calendar.Cbmonth.ListIndex + 1, q.Caption))
Else
calendar.Result = Format(DateSerial(calendar.Cbyear.Value, calendar.Cbmonth.ListIndex + 1, q.Caption), Forme)
End If
calendar.Hide
End Sub