OVH Cloud OVH Cloud

QuickSort

1 réponse
Avatar
chris.col
Bonjour à tous,

Juste pour comprendre et apprendre

Comment adapter la routine suivante pour trier en mémoire (sans utiliser
la fonction de tri d'Excel), l'ensemble d'une plage (200,10) par exemple.
En l'état actuel, seule la colonne X est triée.
Comment faire suivre les autres ?

Merci d'avance

'***************************************************************************
*****
Sub QuickSort(ByVal Debut, ByVal Fin) 'Debut = Lbound(Datas)
,Fin=Ubound(Datas)
'Datas = ActiveCell.CurrentRegion
Bas = Debut: Haut = Fin 'X = N° de la Colonne de Ref. pour
le tri

SepDeListe = Datas((Bas + Haut) / 2, X)
Do Until Bas > Haut
Do While Datas(Bas, X) < SepDeListe
Bas = Bas + 1
Loop
Do While Datas(Haut, X) > SepDeListe
Haut = Haut - 1
Loop
If Bas <= Haut Then
TempO = Datas(Bas, X): Datas(Bas, X) = Datas(Haut, X)
Datas(Haut, X) = TempO
Bas = Bas + 1: Haut = Haut - 1
End If
Loop
If Debut < Haut Then Call QuickSort(Debut, Haut)
If Bas < Fin Then Call QuickSort(Bas, Fin)
End Sub
'***************************************************************************
*******

1 réponse

Avatar
Denis Michon
Cette procédure n'est pas destiné à l'usage que tu veux en faire !

D'ailleurs sais-tu ce que tu veux faire ?



"chris.col" a écrit dans le message de news:3fba104f$0$247$
Bonjour à tous,

Juste pour comprendre et apprendre

Comment adapter la routine suivante pour trier en mémoire (sans utiliser
la fonction de tri d'Excel), l'ensemble d'une plage (200,10) par exemple.
En l'état actuel, seule la colonne X est triée.
Comment faire suivre les autres ?

Merci d'avance

'***************************************************************************
*****
Sub QuickSort(ByVal Debut, ByVal Fin) 'Debut = Lbound(Datas)
,Fin=Ubound(Datas)
'Datas = ActiveCell.CurrentRegion
Bas = Debut: Haut = Fin 'X = N° de la Colonne de Ref. pour
le tri

SepDeListe = Datas((Bas + Haut) / 2, X)
Do Until Bas > Haut
Do While Datas(Bas, X) < SepDeListe
Bas = Bas + 1
Loop
Do While Datas(Haut, X) > SepDeListe
Haut = Haut - 1
Loop
If Bas <= Haut Then
TempO = Datas(Bas, X): Datas(Bas, X) = Datas(Haut, X)
Datas(Haut, X) = TempO
Bas = Bas + 1: Haut = Haut - 1
End If
Loop
If Debut < Haut Then Call QuickSort(Debut, Haut)
If Bas < Fin Then Call QuickSort(Bas, Fin)
End Sub
'***************************************************************************
*******