Transformer une date invalide en une date valide

hajar2809 Messages postés 12 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 23 décembre 2013 - 22 juin 2010 à 13:38
hajar2809 Messages postés 12 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 23 décembre 2013 - 22 juin 2010 à 18:25
Bonjour,

Voilà mon problème, je récupère une date invalide par exemple 31/11/2009 (Y'a pas 31 jours dans le mois de novembre, non ?) et je veux la "convertir" en une date valide (la plus proche possible exemple 30/11/2009).

Est-ce que c'est possible ? Please que quelqu'un me dise Oui..


Programmeuz perdue à Gaia

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juin 2010 à 14:37
Salut
Il n'y a pas de solution miracle : il faut coder :
        Dim maDate As String = "31/11/2009"

        If Not IsDate(maDate) Then
            Dim monJour As String = maDate.Substring(0, 2)
            Dim monMois As String = maDate.Substring(3, 2)
            Dim monAnnée As String = maDate.Substring(6, 4)
            Dim VraieDate As String
            If Val(monMois) < 1 And Val(monMois) > 12 Then
                ' Le mois n'est pas Ok
                ' Pas de vraie possibilité : impose 01
                monMois = "01"
            End If
            If Val(monJour) < 1 Then
                monJour = "01"
            ElseIf Val(monJour) > 31 Then
                monJour = "31"
            End If
            VraieDate = monJour & "/" & monMois & "/" & monAnnée
            Do While Not IsDate(VraieDate)
                monJour = Format(Val(monJour) - 1, "00")
                VraieDate = monJour & "/" & monMois & "/" & monAnnée
            Loop
            maDate = VraieDate.ToString
        End If
        MsgBox(maDate)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
hajar2809 Messages postés 12 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 23 décembre 2013
22 juin 2010 à 18:25
Merci beaucoup Jack ^^,

Je me suis rendue compte que je demandais un miracle "automatique" . Alors j'ai fait travaillé mes méninges. Voilà (Si ca peut aider les autres bien que ton code soit plus travaillé que le mien ..) ...
 Sub RendreDateInvalideEnDateValide(ByVal dateInvalide As String)
        While (IsDate(dateInvalide) = False)
            Dim dateValide() As String = Split(dateInvalide, "/")
            'MessageBox.Show(dateValide(0))
            dateValide(0) = dateValide(0) - 1
            Dim dateComplete As String = Join(dateValide, "/")
            dateInvalide = dateComplete
        End While
    End Sub


Programmeuz perdue à Gaia
0
Rejoignez-nous