PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 22 nov. 2007 à 23:19
tu as juste à ajouter ceci avant le on error :
' pas de "/" If (InStr(1, sDate, "/") 0) And ((LenB(sDate) 12) Or (LenB(sDate) = 16)) Then
sDate = LeftB$(sDate, 4) & "/" & MidB$(sDate, 5, 4) & "/" & MidB$(sDate, 9)
End If
jimy neutron
Messages postés491Date d'inscriptionmercredi 1 février 2006StatutMembreDernière intervention18 novembre 20161 22 nov. 2007 à 20:19
Bien, je m'incline devant tant d'expérience, ton code et bien plus ...optimisé!
Mais sans vouloir te paraitre têtu, voir chi...Autant qu'utilisateur, j'apprécie de pouvoir saisir une date sans separateurs.22101972 pour la voir validé en 22/10/1972. mais peut-être suis-je le seul?!
Mais voyant ton niveau et le mien,c'est sans doute beaucoup de ligne pour peu de choses, j'en conviens.
Merci de ta participation.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 22 nov. 2007 à 01:25
totalement d'accord avec toi pour essayer d'envisager des cas improbables, mais à partir du moment où ton utilisateur veut saisir "01*05^2007", c'est plus ton code qu'il faut remettre en question mais l'utilisateur lui-même ^^
tu peux cumuler la fonction format avec une gestion d'erreur et une vérification avec IsDate, il n'en faut pas plus!
Function ConvertDate(ByRef sDate As String, Optional bBeforeNow As Boolean = True) As Boolean
Dim dRet As Date
On Local Error Resume Next
dRet = Format(sDate, "DD/MM/YYYY") If Err.Number 0 Then ConvertDate IsDate(dRet) Else Err.Clear
If ConvertDate Then If bBeforeNow And (CLng(dRet) >CLng(Date)) Then ConvertDate False
If ConvertDate Then sDate = CStr(dRet)
End If
End Function
jimy neutron
Messages postés491Date d'inscriptionmercredi 1 février 2006StatutMembreDernière intervention18 novembre 20161 21 nov. 2007 à 13:46
Par contre, merci pour 'CLng', je ne connaissais pas et c'est très pratique.
jimy neutron
Messages postés491Date d'inscriptionmercredi 1 février 2006StatutMembreDernière intervention18 novembre 20161 21 nov. 2007 à 13:28
Salut,
Merci de ton interet,mais je ne suis pas d'accord avec toi, en effet:
si LaDateChaine = "21à12@1990"
madate = Format(LaDateChaine, "DD/MM/YYYY") renvoi 21à12@1990
de même si si LaDateChaine = "21121990" une erreur "depassement de capacité" intervient.
Le but de cette fonction est de palier à l'absence de separateur ou au séparateurs non conforme à une date.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 21 nov. 2007 à 11:37
salut,
par chance VB contient déjà des fonctions toutes faites, il faut les utiliser :
MaDate=format(LaDateChaine,"DD/MM/YYYY")
après éventuellement tu refuses si clng(Madate)>clng(date)
22 nov. 2007 à 23:19
' pas de "/" If (InStr(1, sDate, "/") 0) And ((LenB(sDate) 12) Or (LenB(sDate) = 16)) Then
sDate = LeftB$(sDate, 4) & "/" & MidB$(sDate, 5, 4) & "/" & MidB$(sDate, 9)
End If
22 nov. 2007 à 20:19
Mais sans vouloir te paraitre têtu, voir chi...Autant qu'utilisateur, j'apprécie de pouvoir saisir une date sans separateurs.22101972 pour la voir validé en 22/10/1972. mais peut-être suis-je le seul?!
Mais voyant ton niveau et le mien,c'est sans doute beaucoup de ligne pour peu de choses, j'en conviens.
Merci de ta participation.
22 nov. 2007 à 01:25
tu peux cumuler la fonction format avec une gestion d'erreur et une vérification avec IsDate, il n'en faut pas plus!
Function ConvertDate(ByRef sDate As String, Optional bBeforeNow As Boolean = True) As Boolean
Dim dRet As Date
On Local Error Resume Next
dRet = Format(sDate, "DD/MM/YYYY") If Err.Number 0 Then ConvertDate IsDate(dRet) Else Err.Clear
If ConvertDate Then If bBeforeNow And (CLng(dRet) >CLng(Date)) Then ConvertDate False
If ConvertDate Then sDate = CStr(dRet)
End If
End Function
21 nov. 2007 à 13:46
21 nov. 2007 à 13:28
Merci de ton interet,mais je ne suis pas d'accord avec toi, en effet:
si LaDateChaine = "21à12@1990"
madate = Format(LaDateChaine, "DD/MM/YYYY") renvoi 21à12@1990
de même si si LaDateChaine = "21121990" une erreur "depassement de capacité" intervient.
Le but de cette fonction est de palier à l'absence de separateur ou au séparateurs non conforme à une date.
21 nov. 2007 à 11:37
par chance VB contient déjà des fonctions toutes faites, il faut les utiliser :
MaDate=format(LaDateChaine,"DD/MM/YYYY")
après éventuellement tu refuses si clng(Madate)>clng(date)