begin process at 2010 02 10 03:09:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date & Heure

 > GESTION DE DATE

GESTION DE DATE


 Information sur la source

Note :
Aucune note
Catégorie :Date & Heure Classé sous :Date, Format date, Sasie date Niveau :Débutant Date de création :21/11/2007 Date de mise à jour :21/11/2007 11:19:05 Vu :6 466

Auteur : jimy neutron

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Bonjour à tous,

Voila, dévellopant un Répertoire d'adresse SQL que je voudrais le plus pratique possible, je me suis rendu compte que la saisie des dates (de naissance en l'occurence)pouvait être vite pénible par la nécessité de respecter un format xx/xx/xx ou xx/xx/xxxx avec les séparateurs.

J'ai donc dévelloper une fonction (niveau débutant, que je suis)qui assure un format identique quelques soit la saisie,donc:

un 22?10@1972 ou 22101972 donnera 22/10/1972
un 22a10%72 ou 221072 donnera 22/10/72

Voilà

Source

  • Function ConverDate(DateN As String) As String
  • Dim LongN As Integer
  • Dim Index As Integer
  • Dim Coupe As String
  • Dim DNais As String
  • LongN = Len(DateN)
  • If LongN = 0 Then Exit Function
  • ' On ne retient que les chiffres
  • For Index = 1 To LongN
  • 'On extrait un caractere
  • Coupe = Right(DateN, 1)
  • 'on verifie qu'il s'agit d'un chiffre
  • If Asc(Coupe) > 47 And Asc(Coupe) < 58 Then
  • DNais = Coupe & DNais
  • End If
  • 'on soustrait le caractere extrait
  • DateN = Left(DateN, LongN - Index)
  • Next Index
  • ' On verifie le format du resultat '*******************
  • LongN = Len(DNais)
  • If LongN = 6 Then ' format 22/10/72
  • GoTo Reconstruction6
  • Else
  • If LongN = 8 Then
  • GoTo Reconstruction8 ' format 22/10/1972
  • Else
  • GoTo erreur
  • End If
  • End If
  • Reconstruction6: 'pour les date au format 01/01/01*******************
  • DateN = ""
  • For Index = 2 To LongN Step 2
  • 'On extrait deux caracteres
  • Coupe = Right(DNais, 2)
  • If Len(DateN) < 2 Then
  • 'On recontruit l'année au format voulu
  • DateN = Coupe
  • Else
  • If Len(DateN) = 2 Then 'Gestion du mois
  • If Val(Coupe) = 0 Or Val(Coupe) > 12 Then GoTo erreur
  • 'On recontruit le mois
  • DateN = Coupe & "/" & DateN
  • Else 'Gestion du jour
  • If Val(Coupe) = 0 Or Val(Coupe) > 31 Then GoTo erreur
  • 'On recontruit le jour
  • DateN = Coupe & "/" & DateN
  • End If
  • End If
  • 'on supprime de la date source la partie extraite
  • DNais = Left(DNais, LongN - Index)
  • Next Index
  • ConverDate = DateN
  • Exit Function
  • Reconstruction8: 'pour les date au format 01/01/1901 ***************
  • DateN = ""
  • For Index = 2 To LongN Step 2
  • 'On extrait deux caracteres
  • Coupe = Right(DNais, 2)
  • If Len(DateN) < 4 Then
  • 'On recontruit l'année au format "1990"
  • DateN = Coupe & DateN
  • Else
  • If DateN > Year(Date) Then GoTo erreur2
  • If Len(DateN) = 4 Then 'Gestion du mois
  • If Val(Coupe) = 0 Or Val(Coupe) > 12 Then GoTo erreur
  • 'On recontruit le mois
  • DateN = Coupe & "/" & DateN
  • Else 'Gestion du jour
  • If Val(Coupe) = 0 Or Val(Coupe) > 31 Then GoTo erreur
  • 'On recontruit le jour
  • DateN = Coupe & "/" & DateN
  • End If
  • End If
  • 'on supprime de la date source la partie extraite
  • DNais = Left(DNais, LongN - Index)
  • Next Index
  • 'On renvoi le resultat
  • ConverDate = DateN
  • Exit Function
  • erreur: '************************************************************
  • erreur = MsgBox("Le format de la date n'est pas valide.")
  • erreur2: '***********************************************************
  • erreur2 = MsgBox("Ce jour n'est pas encore arrivé.")
  • End Function
Function ConverDate(DateN As String) As String

Dim LongN As Integer
Dim Index As Integer
Dim Coupe As String
Dim DNais As String

LongN = Len(DateN)
If LongN = 0 Then Exit Function

' On ne retient que les chiffres
    For Index = 1 To LongN
        'On extrait un caractere
        Coupe = Right(DateN, 1)
         'on verifie qu'il s'agit d'un chiffre
        If Asc(Coupe) > 47 And Asc(Coupe) < 58 Then
            DNais = Coupe & DNais
        End If
        'on soustrait le caractere extrait
        DateN = Left(DateN, LongN - Index)
    Next Index
    
' On verifie le format du resultat '*******************
LongN = Len(DNais)
If LongN = 6 Then               ' format 22/10/72
    GoTo Reconstruction6
Else
    If LongN = 8 Then
        GoTo Reconstruction8    ' format 22/10/1972
    Else
        GoTo erreur
    End If
End If

Reconstruction6: 'pour les date au format 01/01/01*******************
    DateN = ""
    For Index = 2 To LongN Step 2
        'On extrait deux caracteres
        Coupe = Right(DNais, 2)
        If Len(DateN) < 2 Then
            'On recontruit l'année au format voulu
            DateN = Coupe
        Else
        If Len(DateN) = 2 Then         'Gestion du mois
                If Val(Coupe) = 0 Or Val(Coupe) > 12 Then GoTo erreur
                'On recontruit le mois
                DateN = Coupe & "/" & DateN
            Else                       'Gestion du jour
                If Val(Coupe) = 0 Or Val(Coupe) > 31 Then GoTo erreur
                'On recontruit le jour
                DateN = Coupe & "/" & DateN
            End If
        End If
        'on supprime de la date source la partie extraite
        DNais = Left(DNais, LongN - Index)
    Next Index
ConverDate = DateN

Exit Function

Reconstruction8: 'pour les date au format 01/01/1901 ***************
    DateN = ""
    For Index = 2 To LongN Step 2
        'On extrait deux caracteres
        Coupe = Right(DNais, 2)
        If Len(DateN) < 4 Then
            'On recontruit l'année au format "1990"
            DateN = Coupe & DateN
        Else
            If DateN > Year(Date) Then GoTo erreur2
            If Len(DateN) = 4 Then 'Gestion du mois
                If Val(Coupe) = 0 Or Val(Coupe) > 12 Then GoTo erreur
                'On recontruit le mois
                DateN = Coupe & "/" & DateN
            Else                                    'Gestion du jour
                If Val(Coupe) = 0 Or Val(Coupe) > 31 Then GoTo erreur
                'On recontruit le jour
                DateN = Coupe & "/" & DateN
            End If
        
        End If
        'on supprime de la date source la partie extraite
        DNais = Left(DNais, LongN - Index)
    Next Index
'On renvoi le resultat
ConverDate = DateN

Exit Function
erreur: '************************************************************
erreur = MsgBox("Le format de la date n'est pas valide.")
erreur2: '***********************************************************
erreur2 = MsgBox("Ce jour n'est pas encore arrivé.")

End Function

 Conclusion

Voila,

C'est la premiere source que je poste, n'hésitez pas à être critique, et me dire comment vous auriez géré ou amélioré ça.

J'attends vos avis ...


 Historique

21 novembre 2007 11:19:05 :
oubli

 Sources du même auteur

Source avec Zip Source avec une capture GESTION HEURE DE GARDE

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) FUSEAUX HORAIRES (HORLOGES ANALOGIQUES) par Blodox
Source avec Zip Source avec une capture ANNIVERSAIRE,FÊTES ET DICTONS par claude440
Source avec Zip Source avec une capture CALCULE HEURES DE NUIT 2 par ocejade
NUMÉRO DE SEMAINE par vb5zh
Source avec Zip HORLOGE À AIGUILLES (RADIAN) par brainbass

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SIMULATEUR TRIAL VERSION (BASE DE TRAVAIL POUR DÉBUT) par stef68600
Source avec Zip Source avec une capture CALENDRIER VB6 ET HORLOGE ANALOGIQUE par enzo68290
NUMÉRO DE SEMAINE par vb5zh
Source avec Zip Source avec une capture DATE-HEURE DE LANCEMENT D'UN PROGRAMME par jack
Source avec Zip Source avec une capture TRI DES ITEMS DE LISTVIEW (DATE, NUMÉRIQUE OU PERSO) par Renfield

Commentaires et avis

Commentaire de PCPT le 21/11/2007 11:37:41 administrateur CS

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)

Commentaire de jimy neutron le 21/11/2007 13:28:52

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.

Commentaire de jimy neutron le 21/11/2007 13:46:36

Par contre, merci pour 'CLng', je ne connaissais pas et c'est très pratique.

Commentaire de PCPT le 22/11/2007 01:25:16 administrateur CS

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

Commentaire de jimy neutron le 22/11/2007 20:19:40

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.

Commentaire de PCPT le 22/11/2007 23:19:18 administrateur CS

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

modification de la date d'un fichier .vbx [ par Cyrille ] Salut, je voudrais savoir comment il est possible de changer la date d'un fichier compilé avec VB (grid.vbx du 25/03/94). Il faut garder le même fichi base de données sous excel [ par guingoy ] Bonjour,Voilà, je développe un petit programe sous excel avec VB6.A l'aide d'un MSform (notamment un textbox) j'aimerais alimenter une base de données Type Date [ par TheDude ] je suis a la recherche d'un type qui me permette de récupérerune variable capable de stocker des valeurs du genre 10:20, commele type heure abrégé, sa Conversion de date [ par nico ] Je souhaite convertir une date au format ss/aaaa en format jj/mm/aaaa.Exemple : la date 35/0000 correspond au 28/08/2000Merci d'avance Comparer 2 périodes de date [ par amstel ] J'ai un problème que je n'arrive pas à résoudre :Je dois comparer 2 périodes et renvoyer un message d'erreur si ces périodes se chevauchent. Comment f Requête date [ par nico ] En fait je dois comparer des dates insérer à partir de trois menus déroulants (un pour le jour, un mpur le mois, un pour l'année) placés dans un d'un Format Date [ par Altic ] Comment modifier le format date, car quand j'utilise isdate, que je met le jj/mm/aaaa et mm/jj/aaaa pour lui c'est pareil.Exemple:31/12/2000 et 12/31/ Comparer 2 périodes de date [ par Amstel ] Est-ce que quelqu'un peut me venir en aide sur ce problème : je veux comparer 2 périodes de dates pour savoir si celles-ci se chevauchent.Par exemple Requete SQL [ par funtay ] bonjour, j'ai un problème de syntaxe dans une requete SQL.En fait ,j'ai une date de début (c'est un maskedbox( txt_datedeb)) et une date de fin (c'est toujours pb de requete SQL [ par funtay ] salut à tous!!!J'ai un problème avec la syntaxe d'une requete.J'ai 2 contrôles(maskedbox) qui correspondent à une date de début (datedebut) et une dat


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales