Extraire trois dates d'un groupe de dates

Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 mars 2010 - 13 juin 2006 à 15:07
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 13 juin 2006 à 22:12
Bonjour !

Voila j'ai un tableau comme ceci :

Private Type Tableau
    tDates As String
End Type
Private t(10) As Tableau
'----------------------------------------
Private Sub Form_Load()
t(0).tDates = "11/06"
t(1).tDates = "23/01"
t(2).tDates = "14/11"
t(3).tDates = "25/12"
t(4).tDates = "13/04"
t(5).tDates = "16/10"
t(6).tDates = "26/06"
t(7).tDates = "06/03"
t(8).tDates = "26/09"
t(9).tDates = "18/09"
t(10).tDates = "16/07"
End Sub

Dans toute ces dates j'aimerai ne garder que les dates antérieur à la dates d'aujourd'huit, donc je fait :

For i = 0 To 10
If DateDiff("d", Date, t(i).tDates) < DateDiff("d", Date, Date) Then
Text1 = Text1 & " " & t(i).tDates
End If
Next i

Il me retourne donc toutes les dates antérieur a la date d'aujourd'huit :

 11/06 23/01 13/04 06/03

Et j'aimerai ne garder dans ces dates les trois dates les plus proche de la date d'aujourd'huit !

Comment faire ?

Merci

Clad

5 réponses

Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
13 juin 2006 à 15:31
Salut,

D'abord, plutôt que :
If DateDiff("d", Date, t(i).tDates) < DateDiff("d", Date, Date) Then ...
j'aurais codé :
If DateDiff("d", Date, t(i).tDates) < 0 Then ...

Ensuite, au lieu d'utiliser directement ta textbox pour stocker le résultat, pourquoi pas d'abord un tableau que tu trieras en inverse, ensuite tu ne prends que les 3 1ères valeurs de ce tableau pour les afficher.
0
Clad49 Messages postés 265 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 29 mars 2010
13 juin 2006 à 15:35
oki j'y avai pencé mais j'aurai aimer savoir si il y avai un autre moyen que de passer par un tableau

Clad
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
13 juin 2006 à 16:49
 Bonjour ,

Dans ton précédent topic, j'avais mis des liens pour les tris.

Exemple simple ci-dessous:
Dim ligne(16)
'Mise en tauxs temporaires
imax = 16 '-->Nombre de lignes


ligne(1)  = 3
ligne(2)  = 70 
ligne(3)  = 113
ligne(4)  = 200 
ligne(5)  = 77 
ligne(6)  = 19 
ligne(7)  = 48 
ligne(8)  = 61 
ligne(9)  = 72 
ligne(10) = 57 
ligne(11) = 45 
ligne(12) = 84 
ligne(13) = 33 
ligne(14) = 30 
ligne(15) = 150 
ligne(16) = 61 


bpermute = True                        'Il faut au moins parcourir une fois


Do While bpermute = True               'On tourne tant que l'on bouge des valeurs


    bpermute = False                   'Si on est ici c qu'il faut réinitialiser bpermute


    For t = 1 To imax - 1              'On tourne autant de fois qu'il y a de fiches
                                       '(-1 vu qu'on compare 2 valeurs)
       If ligne(t) < ligne(t + 1) Then 'Si on a trouvé deux valeurs mal rangées
                                       '(autrement dit une valeur qui se
                                       'trouve plus bas dans le tableau mais qui
                                       'est plus levée...
          cprovisoire = ligne(t)       'On inverse les deux chaines
          ligne(t) = ligne(t + 1)      'bis
          ligne(t + 1) = cprovisoire   'bis
          bpermute = True
     End If


  Next


Loop


 


'Affichage du résultat classé
For i = 1 To imax
    liste = liste & ligne(i) &vbCrLf


    If i = imax Then MsgBox "liste complète triée" &vbCrLf& liste &vbCrLf&vbCrL&_
       "les 3 plus grands" & vbCrLf& ligne(i-15) &vbCrLf& ligne(i-14) &vbCrLf& ligne(i-13)
Next

jean-marc
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
13 juin 2006 à 19:52
Ben oui, il y a un autre moyen :
- Ranger tes valeurs dans une table de base de données (à moins qu'elles y soient déjà ?)
- Ouvrir un Recordset avec la requête SQL suivante qui te remonte ce que tu veux :
"SELECT TOP 3 TesDates FROM TaTable WHERE TesDates < #" & Date & "# ORDER BY TesDates DESC"
0

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

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 juin 2006 à 22:12
Private Type Tableau

    tDates As String

End Type


Dim t(10) As Tableau


Private Sub Form_Load()

    t(0).tDates = "11/06"

    t(1).tDates = "23/01"

    t(2).tDates = "14/11"

    t(3).tDates = "25/12"

    t(4).tDates = "13/04"

    t(5).tDates = "16/10"

    t(6).tDates = "26/06"

    t(7).tDates = "06/03"

    t(8).tDates = "26/09"

    t(9).tDates = "18/09"

    t(10).tDates = "16/07"

End Sub


Private Sub Command1_Click()

    Dim Ref As Integer

    Dim i   As Integer

    Dim d   As Integer

    Dim d1  As Integer

    Dim d2  As Integer

    Dim d3  As Integer

   

    Ref = DatePart("y", Date, vbUseSystemDayOfWeek)

   

    d1 = 999

    d2 = 999

    d3 = 999

   

    For i = 0 To 10

        d = Ref - DatePart("y", t(i).tDates, vbUseSystemDayOfWeek)

        If d > 0 Then
'          toutes les dates antérieure à Date

'          MsgBox t(i).tDates
           If d < d1 Then

              d3 d2: d2 d1: d1 = d

           ElseIf d < d2 Then

              d3 d2: d2 d

           ElseIf d < d3 Then

              d3 = d

           End If

        End If

    Next

   

    Text1.Text = ""

    If d1 < 999 Then Text1.Text = Text1.Text & Format$(Ref - d1 + 1, "dd/mm ")

    If d2 < 999 Then Text1.Text = Text1.Text & Format$(Ref - d2 + 1, "dd/mm ")

    If d3 < 999 Then Text1.Text = Text1.Text & Format$(Ref - d3 + 1, "dd/mm ")

   

End Sub

Daniel
0
Rejoignez-nous