Option Explicit
Implements TypeContrôle
Dim Patron As GroupeDeContrôles, WithEvents TBx As MSForms.TextBox, Colonne As Long, Dsgn As String, _
MsgErr As String, Obligat As Boolean, Valeur As Variant, TypeDon As VbVarType, ClauseFrappe As Byte
'
Private Sub TypeContrôle_Init(ByVal Boss As GroupeDeContrôles, ByVal Obj As Object, _
ByVal Col As Long, ByVal Désign As String, ByVal Options As Variant)
Dim P As Long
Set Patron = Boss: Set TBx = Obj: Colonne = Col: Dsgn = Désign
For P = 0 To UBound(Options)
Select Case VarType(Options(P))
Case vbString: ClauseFrappe = InStr("?? NOM PHR PRÉ VIR", UCase$(Left$(Options(P), 3))) \ 4
Case vbBoolean: Obligat = Options(P)
Case Else: TypeDon = Options(P): End Select
Next P
End Sub
'
Private Property Let TypeContrôle_Valeur(RHS As Variant)
TBx.Text = CStr(RHS)
End Property
'
Private Function TypeContrôle_MsgErr() As String
Call Valoriser: TypeContrôle_MsgErr = MsgErr
End Function
'
Private Sub TBx_Change()
Call Valoriser: Patron.ActeurContrôleChange Colonne, Valeur, MsgErr
End Sub
'
Private Sub Valoriser()
MsgErr = ""
If TBx.Text <> "" Then
On Error Resume Next
Select Case TypeDon
Case vbInteger, vbLong, vbByte: Valeur = CLng(TBx.Text): If Err Then MsgErr = "nombre entier"
Case vbSingle, vbDouble: Valeur = CDbl(TBx.Text): If Err Then MsgErr = "nombre décimal"
Case vbCurrency: Valeur = CCur(TBx.Text): If Err Then MsgErr = "valeur monétaire"
Case vbDate: Valeur = CDate(TBx.Text): If Err Then MsgErr = "date"
Case Else: Valeur = TBx.Text
End Select
If Err Then Valeur = CVErr(xlErrValue): MsgErr = Dsgn & " """ & TBx.Text _
& """ :" & vbLf & "Ne peut s'interpreter comme " & MsgErr & "."
On Error GoTo 0
ElseIf Obligat Then
Valeur = CVErr(xlErrNA): MsgErr = Dsgn & " obligatoire."
Else: Valeur = Empty: End If
End Sub
'
Private Sub TBx_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim C As String * 1, PrécLettre As Boolean
On ClauseFrappe GoTo Nom, Phrase, Prénom, Virgule
Exit Sub
Nom: KeyAscii.Value = Asc(UCase$(Chr$(KeyAscii.Value)))
Exit Sub
Phrase: If TBx.SelStart = 0 Then KeyAscii.Value = Asc(UCase$(Chr$(KeyAscii.Value)))
Exit Sub
Prénom: If TBx.SelStart > 0 Then C = Mid$(TBx.Text, TBx.SelStart, 1)
If UCase$(C) <> LCase$(C) Then KeyAscii.Value = Asc(LCase$(Chr$(KeyAscii.Value))) _
Else KeyAscii.Value = Asc(UCase$(Chr$(KeyAscii.Value)))
Exit Sub
Virgule: If KeyAscii.Value = Asc(".") Then KeyAscii.Value = Asc(",")
End Sub
'
Private Property Let TypeContrôle_Enabled(ByVal RHS As Boolean)
TBx.Enabled = RHS
End Property