Asp - fonction de tri d'un tableau en asp

Soyez le premier à donner votre avis sur cette source.

Snippet vu 26 004 fois - Téléchargée 36 fois

Contenu du snippet

Cette fonction permet de renvoyer un nouveau tableau trié à partir d'un tableau transmis en paramêtre.
Il suffit de déclarer un tableau et de lui donner sa taille et de lancer la fonction sur le tableau non trié et la colonne à prendre en compte dans le tri.

Source / Exemple :


'-----------------------------------------------------------------------------------------------------
Function TriTableau (LeTableau, k)
' Permet renvoyer un tableau Trié issu du tableau transmis en paramêtre (N lignes, 3 colonnes) et avec le N° de la colonne à trier k

Dim Ligne_Tampon (3)
Dim Tableau_Tampon
	Max = Ubound(LeTableau)
ReDim Tableau_Tampon(Max, 3)
	Do until i = Max
		' Chaque élément est comparé à celui qui lui est supérieur dans le classement
		j=0
		Do until j = Max
			If (LeTableau(j, k) > LeTableau((j + 1), k)) Then
			' l'élément J est plus important que l'élément J + 1 alors on les intervertit
				Ligne_Tampon(1) = LeTableau(j,1)
				Ligne_Tampon(2) = LeTableau(j,2)
				Ligne_Tampon(3) = LeTableau(j,3)
				Tableau_Tampon(j,1) = LeTableau((j + 1),1)
				Tableau_Tampon(j,2) = LeTableau((j + 1),2)
				Tableau_Tampon(j,3) = LeTableau((j + 1),3)
				Tableau_Tampon((j + 1),1) = Ligne_Tampon(1)
				Tableau_Tampon((j + 1),2) = Ligne_Tampon(2)
				Tableau_Tampon((j + 1),3) = Ligne_Tampon(3)
			Else
				Tableau_Tampon(j,1) = LeTableau(j,1)
				Tableau_Tampon(j,2) = LeTableau(j,2)
				Tableau_Tampon(j,3) = LeTableau(j,3)
				Tableau_Tampon((j + 1),1) = LeTableau((j+1),1)
				Tableau_Tampon((j + 1),2) = LeTableau((j+1),2)
				Tableau_Tampon((j + 1),3) = LeTableau((j+1),3)
			End If
		j=j+1
		loop
	i=i+1
	loop
	TriTableau = Tableau_Tampon
End Function

'-----------------------------------------------------------------------------------------------------
'A appeler avec dans le corps de la page : 
Dim TableauTrie
Redim TableauTrie (NbLigne, 3)

TableauTrie = TriTableau (tableauNonTrie, 1)

Conclusion :


Bon codage.

Romelard Fabrice (Alias F___)

A voir également

Ajouter un commentaire

Commentaires

cs_Mercury
Messages postés
329
Date d'inscription
jeudi 3 janvier 2002
Statut
Membre
Dernière intervention
7 octobre 2005
-
Vraiment intéressant. Excellent code.

@+

Mercury
gkuhmel
Messages postés
4
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
25 janvier 2006
-
Le code est faux et ne trie pas correctement.
Voici une version correcte permettant en plus d'avoir x colonnes et de préciser un sens de tri


Function TriTableau (LeTableau, k, asc)
' Permet renvoyer un tableau Trié issu du tableau transmis en
' paramêtre (N lignes, x colonnes) et avec le N° de la colonne à trier k
Dim Ligne_Tampon(3)
Dim Tableau_Tampon
Max = Ubound(LeTableau)
NbColonnes = Ubound(LeTableau, 2)
If k <= nbColonnes Then
ReDim Tableau_Tampon(Max, 3)
i = 0
Do until i = Max
' Chaque élément est comparé à celui qui lui est supérieur dans le classement
j=0
Do until j = Max
Dim test
If asc = "ASC" Then
test = LeTableau(j, k) > LeTableau((j + 1), k)
Else
test = LeTableau(j, k) < LeTableau((j + 1), k)
End if
If (test) Then
' l'élément J est plus important que l'élément J + 1 alors on les intervertit
For indexColonne = 0 To nbColonnes
Ligne_Tampon(indexColonne) = LeTableau(j,indexColonne)
LeTableau(j,indexColonne) = LeTableau((j + 1),indexColonne)
LeTableau((j + 1),indexColonne) = Ligne_Tampon(indexColonne)
Next
End If
j=j+1
loop
i=i+1
loop
End if
TriTableau = LeTableau
End Function

Pour l'appeler :
TableauApresTrie = TriTableau(TableauTrie, 1, "DESC")
ou
TableauApresTrie = TriTableau(TableauTrie, 1, "ASC")
cs_shinrei
Messages postés
17
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
24 août 2006
-
Excellent le dernier code! Merci beacoup
cs_shinrei
Messages postés
17
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
24 août 2006
-
Non au faite il y aune erreur sur le code de gkuhmel :
Quand on a le nb de colonnes > 3 , il y a des erreurs.

Je me suis permis de le rectifier:

function TriTableau (LeTableau, k, asc)
' Permet renvoyer un tableau Trié issu du tableau transmis en
' paramêtre (N lignes, x colonnes) et avec le N° de la colonne à trier k

'Dim Tableau_Tampon
Max = Ubound(LeTableau)
NbColonnes = Ubound(LeTableau, 2)
Dim Ligne_Tampon
redim Ligne_Tampon(NbColonnes) ' ici on recupere le nb de colonne exact
If k <= nbColonnes Then
'ReDim Tableau_Tampon(Max, 3) ' A quoi sert ce tableau??
i = 0
Do until i = Max
' Chaque élément est comparé à celui qui lui est supérieur dans le classement
j= 0
Do until j = Max
Dim test
If asc = "ASC" Then
test = LeTableau(j, k) > LeTableau((j + 1), k)
Else
test = LeTableau(j, k) < LeTableau((j + 1), k)
End if
If (test) Then
' l'élément J est plus important que l'élément J + 1 alors on les intervertit
For indexColonne = 0 To nbColonnes
Ligne_Tampon(indexColonne) = LeTableau(j,indexColonne)
LeTableau(j,indexColonne) = LeTableau((j + 1),indexColonne)
LeTableau((j + 1),indexColonne) = Ligne_Tampon(indexColonne)
Next
End If
j=j+1
loop
i=i+1
loop
End if
TriTableau = LeTableau
End Function

Ciao,
sbicha
Messages postés
1
Date d'inscription
lundi 18 juillet 2005
Statut
Membre
Dernière intervention
22 août 2006
-
Bonjour,

Je voulais juste vous remercier pour cette fonction qui m'a été très utile et très efficace.

Bonnes continuations ;o)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.