Bonjour Manuella, Arnaud, le Forum
Je ne partage pas l'avis de mettre en déclaration de Variable "As Variant" dans le simple but d'éviter un plantage si la valeur initialisée ne correspond pas au type attendu.
Sinon alors on mets tout en Variant, (ou carrément on ne déclare plus rien du tout) et par conséquent on ne s'étonne pas d'avoir des résultats on ne peut plus aléatoire dans la fiabilité de la petite application que l'on espère développer.
Non, pour ce cas de figure Format Date dans une TextBox avec un retour de Date Valide dans une cellule par exemple (qui est largement commenté dans un tas de Fils de Discussion de ce Forum, faire une recherche...) On doit prendre la responsabilité de déclarer la Valeur attendue, on a deux choix :
Dim TheDateDansLaTextBox As Date
ou
Dim TheDateDansLaTextBox As Long
C'est un peu en fonction des besoins, en général le premier choix est adéquate.
Maintenant une démo toute simpliste :
Matériel Nécessaire
1 UserForm => UserForm1
1 TextBox => TextBox1
1 CommandButton
Option Explicit
Private TheDateDansLaTextBox As Date 'Variable Publique niveau UserForm
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox1
If .Value = "" Then Exit Sub 'On sort si Vide
If Not IsDate(.Value) Then
.SelStart = 0
.SetFocus
.SelLength = Len(.Text)
Cancel = True
Else
TheDateDansLaTextBox = .Value
.Text = Format(.Value, "DD/MM/YYYY")
End If
End With
End Sub
Private Sub CommandButton1_Click()
If TheDateDansLaTextBox = 0 Then Exit Sub 'On sort si non initialisée
Range("A1") = TheDateDansLaTextBox
MsgBox "Pour Vérifier La Valeur Date, vous venez de Saisir " & _
Format(TheDateDansLaTextBox, "DDDD, DD MMMM YYYY") & vbCrLf & _
"Soit " & Date - TheDateDansLaTextBox & " jours de différence avec aujourd'hui"
End Sub
Voilà, là on ne risque pas de planter, vu que l'on ne peut pas sortir de la textBox tant que l'on n'a pas saisi une date correcte...
Bon Appétit
@+Thierry