Test date réelle
Résolu
geo3701
Messages postés
60
Statut
Membre
-
pijaku Messages postés 13513 Statut Modérateur -
pijaku Messages postés 13513 Statut Modérateur -
Bonjour à tous,
J'ai un fichier Excel où je rentre des dates.
Afin d'éviter toute faute de frappe, je voudrais faire une macro de type :
Sub Worksheet_Change(ByVal Target As Range).
J'ai tenté d'utiliser la fonction isDate mais celle-ci ne vérifie pas si la date existe réellement, à savoir qu'on peut taper "32/02/14"...
Avez-vous la solution miracle?
Merci d'avance
J'ai un fichier Excel où je rentre des dates.
Afin d'éviter toute faute de frappe, je voudrais faire une macro de type :
Sub Worksheet_Change(ByVal Target As Range).
J'ai tenté d'utiliser la fonction isDate mais celle-ci ne vérifie pas si la date existe réellement, à savoir qu'on peut taper "32/02/14"...
Avez-vous la solution miracle?
Merci d'avance
A voir également:
- Test date réelle
- Test performance pc - Guide
- Test steam deck oled - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Test composant pc - Guide
- Test batterie pc - Guide
3 réponses
Bonjour,
Haaa ce problème de dates sous Excel...
32/02/14 est considéré par VBA comme étant le 14 février 2032 donc comme étant une date valide.
Pour pallier ce souci, il nous faut connaitre le ou les formats de saisie que tu utilises.
Soit tu saisis toujours tes dates au format jj/mm/aa soit tu peux en utiliser d'autres.
Par exemple :
mm/jj/aa
jj/mm/aaaa
etc...
Dis nous
Haaa ce problème de dates sous Excel...
32/02/14 est considéré par VBA comme étant le 14 février 2032 donc comme étant une date valide.
Pour pallier ce souci, il nous faut connaitre le ou les formats de saisie que tu utilises.
Soit tu saisis toujours tes dates au format jj/mm/aa soit tu peux en utiliser d'autres.
Par exemple :
mm/jj/aa
jj/mm/aaaa
etc...
Dis nous
Réponse un peu moins rapide...
A tester...
A tester...
Private Sub Worksheet_Change(ByVal Target As Range)
'ici on ne vérifiera les dates que pour la 4ème colonne (D) si la cellule n'est pas vide
If Target.Column <> 4 Or Target.Value = "" Then Exit Sub
If Not EstUneDate(CStr(Target.Value)) Then
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
MsgBox "La date saisie n'est pas valide!", vbCritical
End If
End Sub
Function EstUneDate(maDate As String) As Boolean
Dim Jour As Integer, Mois As Integer, Annee As Integer
EstUneDate = False
On Error GoTo TraiteErreur
Jour = CInt(Left(maDate, 2))
If Jour < 1 Then GoTo TraiteErreur
Mois = CInt(Mid(maDate, 4, 2))
If Mois < 1 Or Mois > 12 Then GoTo TraiteErreur
Annee = CInt(Right(maDate, 4))
Select Case Mois
Case 1, 3, 5, 7, 8, 10, 12 'mois de 31 jours
If Jour > 31 Then GoTo TraiteErreur
Case 4, 6, 9, 11 'mois de 30 jours
If Jour > 30 Then GoTo TraiteErreur
Case 2 'mois de février
If Annee Mod 4 = 0 Or Annee Mod 400 = 0 Then
'années bissextiles
If Jour > 29 Then GoTo TraiteErreur
Else
'années NON bissextiles
If Jour > 28 Then GoTo TraiteErreur
End If
End Select
EstUneDate = True
TraiteErreur:
Exit Function
End Function
Sub EnCasDePlantageDeMacro()
Application.EnableEvents = True
End Sub