XL 2019 VBA : tester une date

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour !

Je voudrais faire un test pour voir si la date entrée est bien une date au format dd/mm/yyyy mais, étant débutante, je ne sais pas comment faire.
Je commence le code comme :

VB:
Option Explicit

    Private Sub Worksheet_Change(ByVal Target As Range)
  
    If Not Intersect(Target, Range("Ma_date")) Is Nothing Then
        Call CLICK_INFOS
    End If
End Sub


Merci beaucoup pour votre aide !
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous feriez mieux je crois de tester le type de donnée de la valeur de la cellule, ce qui est complètement différent de ce qu'on y voit.
Son format d'affichage n'a rien à voir avec ça, et n'est pas appliqué si sa valeur n'est pas numérique.
Par contre VarType(Target.Value) = vbDate, là oui, c'est vrai si on n'a modifié qu'une seule cellule et si du coup sa valeur est demeurée ou devenue une date.
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour.
Vous feriez mieux je crois de tester le type de donnée de la valeur de la cellule, ce qui est complètement différent de ce qu'on y voit.
Son format d'affichage n'a rien à voir avec ça, et n'est pas appliqué si sa valeur n'est pas numérique.
Par contre VarType(Target.Value) = vbDate, là oui, c'est vrai si on n'a modifié qu'une seule cellule et si du coup sa valeur est demeurée ou devenue une date.
Merci, ça marche, mon code :
VB:
    Private Sub Worksheet_Change(ByVal Target As Range)
 
    If Not Intersect(Target, Range("Ma_date")) Is Nothing And VarType(Target.Value) = vbDate Then
        Call CLICK_INFOS_OPOC
    End If
    If Not Intersect(Target, Range("Ma_date")) Is Nothing And VarType(Target.Value) <> vbDate Then
       MsgBox "Entrez la date en format jj/mm/aaaa"
    End If
    End Sub

Est-ce que c'est correct ?
 

Dranreb

XLDnaute Barbatruc
Oui, pratiquement. Mais j'aurais peut être plutôt écrit :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address <> Range("Ma_date").Address Then Exit Sub
   If VarType(Target.Value) = vbDate Then
      Call CLICK_INFOS_OPOC
   Else
      MsgBox "Entrez la date en format jj/mm/aaaa", vbExclamation, "Vérification"
      End If
   End Sub
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Oui, pratiquement. Mais j'aurais peut être plutôt écrit :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address <> Range("Ma_date").Address Then Exit Sub
   If VarType(Target.Value) = vbDate Then
      Call CLICK_INFOS_OPOC
   Else
      MsgBox "Entrez la date en format jj/mm/aaaa", vbExclamation, "Vérification"
      End If
   End Sub
Merci, ça marche !
Pourriez-vous m'expliquer cette fonction :If Target.Address <> Range("Ma_date").Address
 

Discussions similaires