Trie d'un tableau dynamique avec type?

pcpunch Messages postés 1247 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 - 29 juin 2004 à 02:12
pcpunch Messages postés 1247 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 - 30 juin 2004 à 12:16
Slt pour les besoin d'un prog je dois trie un tableau dynamique comptenant un type :

Private Type V
D As String
Deb As String
Fin As String
Prog As String
Lib As String
End Type

Dim TabLigne() As V

D etant une date (29.06.)
Deb une heure de debut(13:55)
Fin une heures de fin (sans importance)
Prog sans importante
Lib sans importance

Voila je dois trie ce tableau :
1er par ordre de date
2eme par ordre de debut

Si qq a la solution une fonction ou autres car je sature ce soir lol, je n'ai pas trouver !!!!
++ merci

5 réponses

DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
29 juin 2004 à 03:00
Qu'est-ce que tu pense de ça :
(j'utilise un listbox pour le trie (lstTriage) et une autre pour afficher les résultats (list1))

Option Explicit

Private Type V
D As String: Deb As String: Fin As String: Lib As String
End Type

Private TabLigne() As V

Private Sub Trier(Liste As ListBox)
Dim arrBuf() As V, I As Long, Col As Variant, lngDecalage As Long
Liste.Clear
For I =  LBound(TabLigne) To UBound(TabLigne)
Liste.AddItem TabLigne(I).D & "*" & TabLigne(I).Deb & "@" & I
Next
ReDim arrBuf(LBound(TabLigne) To UBound(TabLigne))
For I = LBound(arrBuf) To UBound(arrBuf)
Col = Split(Liste.List(I - LBound(arrBuf)), "@", 2)
arrBuf(I) = TabLigne(Col(1))
Next
TabLigne = arrBuf
End Sub

Private Sub RemplirTableau()
Dim I As Long
ReDim TabLigne(1 To 255)
For I = 1 To 255
Randomize
TabLigne(I).D = Int(Rnd * 9999) + 1
Randomize
TabLigne(I).Deb = Int(Rnd * 9999) + 1
Next
End Sub

Private Sub AfficherResultats()
Dim I As Long
For I = LBound(TabLigne) To UBound(TabLigne)
List1.AddItem TabLigne(I).D & " - " & TabLigne(I).Deb
Next
End Sub
Private Sub Form_Load()
RemplirTableau
Trier lstTriage
AfficherResultats
End Sub



VIVE LE QUÉBEC! 8-)
Essayez ça
Dim l As Long: Do Until l  -1: l l + 1: Loop

p.s.Si vous l'avez essayé, vous êtes vraiment stupide
0
pcpunch Messages postés 1247 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
29 juin 2004 à 11:51
Dsl mais ton code ne fonctionne pas!!!

ma question reste ouverte , je bloque la dessus!!!
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
29 juin 2004 à 12:10
bon bien etant donné que je connais tes capacités a développer, je ne suis pas sur que ce soit ce que tu attends mais tampis je te poste une eventuelle solution.

j'ai juste fais un test basic avec une listbox

Private Type V
D As String
Deb As String
Fin As String
Prog As String
Lib As String
End Type

Dim TabLigne(15) As V

Private Sub Command1_Click()
List1.Clear
    For i = 0 To 15
        For k = 1 To Len((TabLigne(i).D))
            pp = pp & Asc(Mid$((TabLigne(i).D), k, 1))
        Next k
        For j = i + 1 To 15
            For k = 1 To Len((TabLigne(j).D))
                aa = aa & Asc(Mid$((TabLigne(j).D), k, 1))
            Next k
            
            If pp < aa Then
                mm = TabLigne(j).D
                TabLigne(j).D = TabLigne(i).D
                TabLigne(i).D = mm
            End If
            
            aa = ""
        Next j
    Next i
    
    For i = 0 To 15
       List1.AddItem TabLigne(i).D
    Next i
    
End Sub

Private Sub Form_Load()
For i = 0 To 15
    TabLigne(i).D = i & "-12"
    List1.AddItem TabLigne(i).D
Next i
End Sub


il y a forcement a redire sur le code mais bon ... à tester
dsl pour les variables, c'etait du rapidos

bonne prog
liquide
0
DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
30 juin 2004 à 00:33
il faut mettre 2 liste dans la form : une appellée list1 et une autre appellée lstTriage qui à la propriétée "Sorted" à True. C'est censé marcher parfaitement.

VIVE LE QUÉBEC! 8-)
Essayez ça
Dim l As Long: Do Until l -1: l l + 1: Loop

p.s.Si vous l'avez essayé, vous êtes vraiment stupide
0

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

Posez votre question
pcpunch Messages postés 1247 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
30 juin 2004 à 12:16
Non je n'utilise pas les listbox!!!!

Le probléme est réglé merci a juvamine pour ses explications...

Voici le code utilisans un trie a bulle, c'est pas le trie le plus rapide mais ca marche !!

Je le depose au cas ou qq cherche ça!!!

Private Type V
StrDate As Date
StrDebut As Date
StrFin As String
StrCha As String
End Type
Dim Tabligne(0 To 5) As V

Private Sub Form_Load()

Tabligne(0).StrDate = "26/06"
Tabligne(0).StrDebut = "12:30"
Tabligne(0).StrFin = "12:55"
Tabligne(0).StrCha = "TF1"

Tabligne(1).StrDate = "26/06"
Tabligne(1).StrDebut = "11:30"
Tabligne(1).StrFin = "12:59"
Tabligne(1).StrCha = "C+"

Tabligne(2).StrDate = "29/06"
Tabligne(2).StrDebut = "02:30"
Tabligne(2).StrFin = "02:55"
Tabligne(2).StrCha = "ARTE"

Tabligne(3).StrDate = "26/06"
Tabligne(3).StrDebut = "22:30"
Tabligne(3).StrFin = "02:55"
Tabligne(3).StrCha = "TF1"

Tabligne(4).StrDate = "29/06"
Tabligne(4).StrDebut = "01:30"
Tabligne(4).StrFin = "02:55"
Tabligne(4).StrCha = "F3"

Tabligne(5).StrDate = "26/06"
Tabligne(5).StrDebut = "00:10"
Tabligne(5).StrFin = "02:55"
Tabligne(5).StrCha = "F2"

'Affichage du tableau dans list1 non trié
Call affiche(List1)

End Sub

Private Sub Command1_Click()

'1 Trie par date
'===============
Dim temp As V

Do
nb = 0
DoEvents

For i = 0 To UBound(Tabligne) - 1

    If Tabligne(i).StrDate > Tabligne(i + 1).StrDate Then
    
        temp.StrDate = Tabligne(i).StrDate
        temp.StrDebut = Tabligne(i).StrDebut
        temp.StrFin = Tabligne(i).StrFin
        temp.StrCha = Tabligne(i).StrCha
        
        Tabligne(i).StrDate = Tabligne(i + 1).StrDate
        Tabligne(i).StrDebut = Tabligne(i + 1).StrDebut
        Tabligne(i).StrFin = Tabligne(i + 1).StrFin
        Tabligne(i).StrCha = Tabligne(i + 1).StrCha
        
        Tabligne(i + 1).StrDate = temp.StrDate
        Tabligne(i + 1).StrDebut = temp.StrDebut
        Tabligne(i + 1).StrFin = temp.StrFin
        Tabligne(i + 1).StrCha = temp.StrCha
        
        nb = nb + 1
        
    End If

Next i

Loop Until nb = 0

'2 Trie par Heure de debut
'=========================

Dim var As Date
i = 0
While i < UBound(Tabligne)
  
    lemin = i
     
    var = Tabligne(i).StrDate
     
    'on recup l'indice de la derniere date pareil
    While Tabligne(i).StrDate = var And i < UBound(Tabligne)
        i = i + 1
    Wend
    lemax = i - 1
     
    Do
    nb = 0
    For j = lemin To lemax - 1
         
        If Tabligne(j).StrDebut > Tabligne(j + 1).StrDebut Then
             
            temp.StrDate = Tabligne(j).StrDate
            temp.StrDebut = Tabligne(j).StrDebut
            temp.StrFin = Tabligne(j).StrFin
            temp.StrCha = Tabligne(j).StrCha
             
            Tabligne(j).StrDate = Tabligne(j + 1).StrDate
            Tabligne(j).StrDebut = Tabligne(j + 1).StrDebut
            Tabligne(j).StrFin = Tabligne(j + 1).StrFin
            Tabligne(j).StrCha = Tabligne(j + 1).StrCha
             
            Tabligne(j + 1).StrDate = temp.StrDate
            Tabligne(j + 1).StrDebut = temp.StrDebut
            Tabligne(j + 1).StrFin = temp.StrFin
            Tabligne(j + 1).StrCha = temp.StrCha
            nb = nb + 1
         
        End If
     
    Next j
  
    Loop Until nb = 0
     
i = lemax + 1
Wend

'Affichage du tableau trié par date et par heure
Call affiche(List2)

End Sub

Sub affiche(Src As ListBox)
Src.Clear
For i = 0 To UBound(Tabligne)
With Tabligne(i)
Src.AddItem .StrDate & " " & .StrDebut & " " & .StrFin & " " & .StrCha
End With
Next i
End Sub



++
0