Date type error 13 type mismatch

Résolu
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 - 18 mars 2020 à 10:30
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 - 20 mars 2020 à 15:57
Bonjour,
Dim HistoDate() As Date
HistoDate(i) = Left$(Record, 19) 
==> Erreur : 13 : Type mismatch

Je comprends bien que la raison est que le format du string n'est pas une date valide.
Ma question : comment vérifier le string avant afin d'éviter l'erreur (msgbox si pas correct) ?
Merci
A voir également:

9 réponses

Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
18 mars 2020 à 11:58
Bonjour

avec une regex ou l'operateur Like.
Pour Like, ça fait trop longtemps que j'ai pas codé en VB6 ou VBA pour te faire un exemple de tête mais pour les regex, voir ici (lien à copier coller)
http://regexstorm.net/tester?p=%28%280%5b1-9%5d%7c%5b1-2%5d%5b0-9%5d%7c3%5b0-1%5d%29%2f%280%5b13578%5d%7c1%5b02%5d%29%7c%280%5b1-9%5d%7c%5b1-2%5d%5b0-9%5d%7c30%29%2f%280%5b469%5d%7c11%29%7c%280%5b1-9%5d%7c%5b1-2%5d%5b0-9%5d%29%2f02%29%2f%5cd%7b4%7d&i=01%2f00%2f2020%0d%0a01%2f01%2f2020%0d%0a01%2f11%2f2020%0d%0a01%2f21%2f2020%0d%0a01%2f01%2f2020%0d%0a00%2f01%2f2020%0d%0a11%2f01%2f2020%0d%0a21%2f01%2f2020%0d%0a31%2f01%2f2020%0d%0a41%2f01%2f2020%0d%0a01%2f13%2f2020%0d%0a32%2f01%2f2020%0d%0a10%2f01%2f2020%0d%0a10%2f10%2f2020%0d%0a31%2f04%2f2020%0d%0a30%2f02%2f2020%0d%0a29%2f02%2f2019%0d%0a


Dans la case Pattern la regex, dans la case Input différent textes ressemblants à des dates.
Le seul truc c'est que le 29 février d'une année non bissextile est accepté

Tu peux voir le détail des capture en cliquant sur l'onglet "Table"
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
Modifié le 18 mars 2020 à 16:23
Merci pour ta réponse mais je ne comprends pas comment on l'utilise.
Je ne vois pas de code !

Autre possibilité : j'ai un "on error goto" dans cette sub.
si erreur 13 => msgbox, exit
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
18 mars 2020 à 16:48
Bonjour
Ta question devrait être : comment vérifier une variable type Date avant afin d'éviter l'erreur (msgbox si pas correct) ?
Déjà comment obtiens-tu le tableau de Date HistoDate ? Saisie au clavier, exploration d'un fichier ou autre ?
Concernant le type Date de VB6 il y a les fonctions Year, Month et Day qui te permettent d'extraire les 3 données d'une date ( ces 3 fonctions retournent un Integer )
- entre 1 et 31 pour le numéro du jour
- entre 1 et 12 pour le mois
ensuite c'est à toi de vérifier que le jour et le mois sont corrects ( pas de 30 février ou de 31 avril par exemple )
Concernant On Error Goto celui-ci ne doit être utilisé que dans les erreurs imprévues ( coupure réseau par exemple ) . Il vaut mieux tester si des valeurs sont dans la bonne fourchette que de mettre des On Error Goto à tout bout de champ
N'ayant plus VB 6 depuis plus de 10 ans difficile de t'en dire plus .
Un salut à Whis en passant .

0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
18 mars 2020 à 17:40
Salut vb

Herve, je ne sais plus comment on se sert d'une regex en vb6, je t'ai "juste" pondu la syntaxe et montré un exemple de capture.

Pour l'utilisation https://lite.qwant.com/?q=regex+vb6&client=opensearch
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
18 mars 2020 à 18:56
"comment obtiens-tu le tableau de Date HistoDate ?"
comme je l'ai écrit, comme ceci
HistoDate(i) = Left$(Record, 19)

Quant au string Record il est construit par un sélecteur de date : il s'agit d'une form, on ne peut pas saisir une date erronée, par exemple si on choisit le mois 4 on ne peut choisir que les jours 1 à 30
l'erreur ne peut donc pas venir de là, en fait c'est mon problème : pourquoi record n'est-il parfois pas correct (2 cas sur 5.217 utilisations) ?
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
18 mars 2020 à 21:32
Bonsoir
tu ne peux obtenir ton tableau ainsi
HistoDate(i) = Left$(Record, 19)
car Left$ est une fonction pour les String alors que HistoDate est de type Date
Maintenant tu nous dis que Record n'est pas correct ( 2 cas sur 5217 utilisations )
Peux-tu préciser ces 2 cas ?
sinon tu peux utiliser la fonction CDate que convertir une chaine de caractères ( 20/12/1989 ) et valeur de type Date
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
19 mars 2020 à 01:26
Pardon : il faut lire "en valeur de type Date"
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
19 mars 2020 à 13:51
Je ne peux peut-être pas obtenir le tableau ainsi mais c'est ainsi que ça fonctionne.
Je ne sais pas dans quelle mesure Record n'est pas correct, je ne connais pas le contenu de ce string; je ne parviens pas à reproduire l'erreur et les 2 utilisateurs différents qui ont eu le cas ne se souviennent plus comment ils on fait; maintenant chez eux ça fonctionne mais il ne savent pas non plus comment ils y sont arrivés.
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
19 mars 2020 à 14:21
Bonjour
Si tu nous mettais un exemple de ce que devrait contenir le tableau Record ?
Car ton code fonctionne si une string au bon format est entrée dans Record ( exemple 20/12/2019 soit les 2 chiffres du jour, les 2 du mois et les 4 de l'année )
Mais si
Left$(Record,19)
ne contient pas une chaine représentant une date avec le format correct cela plante ou va au On Error Goto que tu as mis .
De plus il y a les heures, minutes et secondes dans ton sélecteur . Je ne sais pas quelle incidence cela peut avoir .
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
19 mars 2020 à 14:28
Bonjour
Est ce que ta boite de saisie bloque le 29 février ?
Attention une année bissextile est:
  • soit divisible par 400
  • soit divisible par 4 mais pas par 100

Il s’agit bien d’un ou exclusif.
=> 1700, 1800, 1900 et 2100 ne sont pas bissextiles, alors que 1600 et 2000 si.
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
20 mars 2020 à 15:57
Record peut contenir par exemple "06/03/2020 14:51:51 25.3 25.4 34.8 7.95 8.17"
dans ce cas Left$(Record,19) = "06/03/2020 14:51:51"
l'erreur vient du fait que 2 fois sur 5000 Record était vide et j'ai compris pourquoi et j'ai corrigé.
Pas besoin de vérifier si la syntaxe est correcte puisque la Form fait en sorte qu'elle le soit.
C'est donc résolu.
0
Rejoignez-nous