bonjour Steelson
un module classe !!!!!et on perd donc la notion de transportabilité
je m'en viens donc te montrer comment on classe des textboxs sans module classe
alors pour l'exemple
prend un userform et met lui 3 textbox l(laisse leur nom d'origine)
le userform appelle le "ufclassetextbox"c'est très important
tu va reprendre ma fonction ici on va prendre la FR et la mettre dans le module userform
Private Sub CtrL_KeyDown(ByVal TxtB As MSForms.TextBox, ByVal KeyCode As MSForms.ReturnInteger)
Dim X&, Xl&, D$, M$, A, T$, mask, C2, D2: mask = "__/__/____"
'pour ceux qui n'ont pas le pavé numerique conversion du keycode du pavé haut du clavier
If KeyCode >= 48 And KeyCode <= 57 Then KeyCode = KeyCode + 48
'c'est parti on démarre le controle!!
With TxtB
Xl = .SelLength: If Xl = 0 Then Xl = 1 'Xl= la longeur de texte selectionné
.Value = IIf(.Value = "", mask, .Value): If KeyCode = 8 And Xl > 1 Then KeyCode = 46
T = .Value: .SelStart = IIf(T = mask, 0, .SelStart): X = .SelStart:
Select Case KeyCode
Case 96 To 105 'pavé numerique haut et bas (Attention!!!pas besoins de bloquer la touche MAJ!!!!!!!!le code se charge de convertir)
If X = 10 Then KeyCode = 0: Exit Sub
If X = 2 Or X = 5 Then X = X + 1
Mid(T, X + 1, Xl) = Chr(KeyCode - 48) & Mid(mask, X + 2, Xl - 1)
X = X + 1: Xl = 0: If X = 2 Or X = 5 Then X = X + 1
'le plus gros tu traitement se passe avec controle de validité de date en fait!!!
If Val(T) > 31 Or Val(Mid(T, 1, 1)) > 3 Then X = 0: Xl = 2: Mid(T, 1, 2) = Mid(mask, 1, 2): Beep
If Val(Mid(T, 4, 2)) > 12 Or Val(Mid(T, 4, 1)) > 1 Then Mid(T, 4.2) = Mid(mask, 4, 2): X = 3: Xl = 2: Beep
D = Mid(T, 1, 2): M = Mid(T, 4, 2): A = Mid(T, 7, 4)
If IsDate(D & "/" & M) And Not IsDate(D & "/" & M & "/2000") Then Mid(T, 4, 2) = Mid(mask, 4, 2): X = 3: Xl = 2: Beep: KeyCode = 0
If X = 10 And Not IsDate(T) Then Mid(T, 7, 10) = Mid(mask, 7, 10): X = 6: Xl = 4: Beep
Case 8:
If X = 0 Then KeyCode = 0:: .Value = "": Exit Sub Else Mid(T, X, 1) = Mid(mask, X, 1): X = X - 1: Xl = 0
If T = mask Then T = ""
Case 46:
If X = 10 Then Exit Sub Else Mid(T, X + 1, Xl) = Mid(mask, X + 1, Xl): X = X: Xl = 0: If X = 2 Or X = 5 Then X = X + 1
If T = mask Then T = ""
Case Else: KeyCode = 0 ' a pour effet d'inhiber toutes les autre touches
End Select
.Value = T 'restitution
.SelStart = X: .SelLength = Xl: KeyCode = 0
End With
End Sub
nous reste maintenant a faire communiquer ces trois textboxs avec cette sub
la belle affaire
on va donc en haut de module de ce userform remettre mon entête et les déclarations
'********************************************************************
'COLLECTION TEXTBOX FORMATE EPISODE 1 EXERCICE 1 *
'des DATEBOX avec masque de saisformat FR (1 seul sub et 1 seul events *
'en version simplifié a but école *
'auteur patricktoulon sur exceldownload et excel pratique *
'version 3.7 *
' *
'le moteur séparé de l'event pour utilisation multi textbox *
'********************************************************************
Option Explicit
Public WithEvents TxT As MSForms.TextBox
Dim cls(1 To 3) As New ufclassetextbox
là deja tu commence a comprendre mais peut etre que tu l'ignorais et ca te semble pas logique mais passons
on va ajouter dans le module du userform l'event activate et on va classer les textboxs dans cet event
Private Sub UserForm_Activate()
Dim i&
For i = 1 To 3
Set cls(i).TxT = Me.Controls("TextBox" & i)
Next
End Sub
voila c'est pas compliqué
maintenant ben il nous reste plus qu'a rajouter le map de l'event keydown
'!!!!!!!!!!!!!!!!!!!!!!!un seul event pour tout les textboxs!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Private Sub TxT_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
CtrL_KeyDown TxT, KeyCode
End Sub
tu teste et là tu me dis mais bon sang de bonsoir un userform n'est pas un module classe
ben je te dis QUE"SI!!!!"
LOL
je fourni les aspro aussi si tu veux
il va me maudir le Steelson