Problème de date en VBA

Bonsoir,

Dans le fichier ci-joint, si j’introduis un texte en C2, le programme m’indique si j’ai inscrit une date ou non.

Savez-vous pourquoi si j’inscris une donnée du genre 01.010.2017 (format de date suisse, mais faites donc un essai avec un format de date de votre pays par exemple 01/010/2017), ça considère que c’est une date ?

Cordialement.

17demo.xlsm (92.59 Ko)

Bonsoir,

il faut peut-être forcer la propriété Value de Target pour éviter que VBA prenne en compte le format de la cellule plutôt que sa valeur...

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("C2")) Is Nothing Then
        If Not IsDate(Target.Value) Then
            MsgBox "Il y a un problème"
        End If
    End If
End Sub

@ bientôt

LouReeD

Bonsoir Yvouille, LouReed

Ce qui apparaît avec ton expérience : si je tapes 01/010/2017, Excel ne reconnaît pas une date, le texte se cadre à gauche, mais par contre VBA reconnaît là une date ! Soit que le texte est convertible en date, ce qui est le sens de la fonction IsDate.

Ce que l'on peut vérifier, en complétant ta macro dans ce sens :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("C2")) Is Nothing Then
        If Not IsDate(Target) Then
            MsgBox "Il y a un problème"
        Else
            Application.EnableEvents = False
            Target.Value = CDate(Target)
            Application.EnableEvents = True
        End If
    End If
End Sub

Et en effet la conversion avec CDate produit une date, reconnue alors par Excel qui la cadre à droite.

On peut déjà en conclure que la reconnaissance des dates diffère quelque peu pour Excel et VBA. On savait déjà d'ailleurs que VBA reconnaît les dates antérieures à 1900, ce qui n'est pas le cas d'Excel...

La manoeuvre échoue si l'on tapes 01.010.2017. Excel ne reconnaît pas une date, VBA non plus et la conversion échoue avec ou sans condition...

VBA reconnaît nativement le / et - comme séparateurs date, Excel également. Le point n'est pas reconnu.

Là c'est à toi de nous dire si cet aspect tient aux paramètres régionaux, et s'il peut être reconnu sous certains paramètres régionaux...

On en a jamais fini avec les dates !

Cordialement.

Merci à tous deux pour vos explications et idées qui m'ont permis de bien avancer.

@ LouReeD

Je ne vois pas de grandes différences entre les deux variantes.

@MFerrard

Ton instruction Target.Value = CDate(Target) transforme la date au format anglo-saxon (mm.jj.aaaa), mais en décomposant la date (jour-mois-année), on arrive à récréer une date utilisable.

MFerrand a écrit :

VBA reconnaît nativement le / et - comme séparateurs date, Excel également. Le point n'est pas reconnu.

Je pense que ça a à voir avec les données des paramètres régionaux. Sur mon ordi, avec des paramètres suisses, le point est utilisable en VBA pour les dates. Dès que le reste du Monde aura accepté de passer au système de dates suisses, le 95 % des problèmes de dates dans Excel seront résolus capture

Chaleureusement.

Bonsoir et bonjour à vous deux !

En effet, encore un message pour ne rien dire... Oups !

je n'y connais vraiment rien en VBA et Excel !

@ bientôt

LouReeD

Allons LouReed à quoi joues-tu ?

Bonne journée à tous deux...

Bonsoir tout le monde,

@LouReeD

Désolé si je me suis mal exprimé, mais j’ai simplement voulu dire que lorsque je place ton code dans un fichier – par exemple dans le fichier ci-joint – et que j’inscris une date erronée en C2 du genre 01.020.2000 (ou, je présume, 01/020/2000 sur une machine ayant ces paramètres régionaux), ça passe quand même, ce n’est pas reconnu comme une date incorrecte.

Si tu as testé chez toi et que ça donne un résultat différent, je n’y comprends plus grand-chose.

Amicalement.

6demo-loureed.xlsm (94.16 Ko)

Pas de soucis !

J'ai juste voulu dire que quelques fois, quelques soirs, je lance des réponses qui sont complétement à coté de la plaque !!!

Et là je dois dire que j'ai fait fort !

Ceci dit, merci de vos sollicitudes envers moi Yvouille et MFerrand !

@ bientôt

LouReeD

Ouf, j'aime mieux ça ; j'ai vraiment eu peur de t'avoir vexé. Excellente continuation à toi

Rechercher des sujets similaires à "probleme date vba"