IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

fonction trie


Sujet :

ASP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 125
    Points : 52
    Points
    52
    Par défaut fonction trie
    Bonjour,

    J'ai recupere une fonction de trie d'un tableau avec comme parametre le tableau , la colonne a triée et le sens du trie.

    Mais qd j'ai un tableau dont le nombre de colonnes est supérieur à 2 ->
    ca marche pas, il dit qu'il ya un probleme "indice en dehors de la plage" ou "type incompatible".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    '-----Trie d'un tableau en fonction de la colonne et du sens de trie
    ' TableauApresTrie = TriTableau(tp, 2, "DESC") OU TableauApresTrie = TriTableau(tp, 2, "ASC")
    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 = 1
            Do until i = Max
                ' Chaque élément est comparé à celui qui lui est supérieur dans le classement
                j= 1
                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)  'LIGNE 2
                    End if
                If (test) Then
                ' l'élément J est plus important que l'élément J + 1 alors on les intervertit
                    For indexColonne = 1 To nbColonnes
                        Ligne_Tampon(indexColonne) = LeTableau(j,indexColonne)  'LIGNE 1
                        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
    j'ai par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    dim tp(5,2),tab(4,11)
    tp(1,1) = "cas 1"
    tp(1,2) = 10
    tp(2,1) = "cas 2"
    tp(2,2) = 15
    tp(3,1) = "cas 3"
    tp(3,2) = 12
    
    tab(1,1) = "cas 1"
    tab(1,...) = ....
    tab(1,10) = 10
    tab(2,1) = "cas 2"
    tab(2,...) = ...
    tab(2,10) = 15
    tab(3,1) = "cas 3"
    tab(3,...) = ...
     tab(3,10) = 12
    
    
    trie1 = TriTableau (tp,2,"DESC") 'ca passe ca
    
    trie2 = TriTableau (tab,10,"DESC")' erreur ici = "Indice en dehors de la plage: 'indexColonne' " LIGNE 1
    'si je mets 9 -> "Type incompatible: LIGNE 2"
    Par contre si je mets la colonne 11 à sélectionner, pas d'erreur mais me le trie pas
    Je ne comprends pas pourquoi??

    Merci pour votre aide,

    Notes: je commence mes tableaux à 1 et non à 0.

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Si tu ne fais que trier sur une colonne, pourquoi ne pas simplement utiliser "ORDER BY" dans la requete SQL?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rs.open "SELECT ... ORDER BY " & request.querystring("coloumn") & " " & request.querystring("way") & ";"
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 125
    Points : 52
    Points
    52
    Par défaut
    J'ai trouve!!! Le code ne recupere pas le nb de colonne du tableau.

    Quand on a le nb de colonne > 3, ca faisait ses erreurs;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    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
        Max = Ubound(LeTableau)
        NbColonnes = Ubound(LeTableau, 2)
        Dim Ligne_Tampon
        redim Ligne_Tampon(NbColonnes) 'ici on recupere le bon nb de colonne
        If k <= nbColonnes Then
            i = 1
            Do until i = Max
                ' Chaque élément est comparé à celui qui lui est supérieur dans le classement
                j= 1
                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 = 1 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

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 125
    Points : 52
    Points
    52
    Par défaut
    Non les infos ne viennent pas d'une requete.

    Merci qd meme,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/09/2009, 09h11
  2. Trie Datagridview en fonction couleur cellulle
    Par alacaraibe dans le forum Windows Forms
    Réponses: 7
    Dernier message: 15/07/2009, 12h09
  3. Réponses: 4
    Dernier message: 06/08/2007, 17h50
  4. Fonction qui trie une liste
    Par piotrr dans le forum Général Python
    Réponses: 3
    Dernier message: 11/05/2007, 15h00
  5. fonctions qui trie un tableau
    Par tabulaire dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/08/2006, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo