XL 2019 VBA : tester une date

MarieParis

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.
 

MarieParis

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
 

MarieParis

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
 

Statistiques des forums

Discussions
294 232
Messages
1 937 074
Membres
188 145
dernier inscrit
Peres2