[RESOLU] Trier une zone par cellule

KidNap

XLDnaute Nouveau
Bonjours tout le monde.

Je solicite votre aide pour réussir à trier une zone dans ma page mais de façon un peu specifique.

En faite, j'ai un tableau qui fait 6 colonne de large et 10 de haut, je voudrait que sur tout ce tableau un tri soit effectuer de façon a obtenir un tri alphabetique.

Jusque la j'ai chercher sur internet sans touver de solution, on ne peut trier que par colonne ou que par ligne d'apres ce que j'ai peu constater. Et evidement, il me faut les deux...

Qu'un tableau ou se trouvant ainsi disposer:
b|e|d
a|f|c

Se retrouve classer comme suivant:
a|b|c
d|e|f

je vous aurais donner mon fichier excel avec plaisir mais il s'agit d'une base de donné qui est déjà plutot lourde...

Si je n'ai pas été claire n'hésiter pas a me le faire savoir.
En vous remerciant d'avance.

KidNap.
 
Dernière édition:

unrender

XLDnaute Junior
Re : Trier une zone par cellule

Bon, c'est sûrement pas du code super bien écrit, mais ça fonctionne....

Code:
Sub tri()
Dim tabtemp(500)
k = 0
For Each c In Range("B6:F22")
    If c <> "" Then
        tabtemp(k) = c
        k = k + 1
    End If
Next

k = 0
For Each c In tabtemp()
    If tabtemp(k + 1) = "" Then Exit For
    If tabtemp(k) > tabtemp(k + 1) Then
        temp1 = tabtemp(k)
        temp2 = tabtemp(k + 1)
        tabtemp(k) = temp2
        tabtemp(k + 1) = temp1
        If k > 1 Then
            k = k - 2
        Else
            k = 0
        End If
    End If
    k = k + 1
Next

k = 0
For Each c In Range("B25:F42")
    c.Value = tabtemp(k)
    k = k + 1
Next

End Sub
 

KidNap

XLDnaute Nouveau
Re : Trier une zone par cellule

Génial, Parfait!
Tu aurais éventuelement le temps de m'expliquer à quoi sert "tabtemp(Var)"?

Même si c'est mal ecrit, vu ce que j'ai fais moi même à côté sa passe inaperçu ^^.

Encore merci ça marche super :p



Edit:
ARF!!!!
ça me supprime les Hyperliens present sur le texte, une solution?
 
Dernière édition:

unrender

XLDnaute Junior
Re : Trier une zone par cellule

Tabtemp() est le nom que j'ai donné au tableau qui stocke temporairement les données en mémoire pour faire le tri.

Pour ton problème de lien, je ne suis pas devant mon PC, donc je ne peux pas tester, mais une solution serait de récupérer chaque lien dans le même tableau et de le recréer une fois les données triées et remises dans la plage du bas.
 

KidNap

XLDnaute Nouveau
Re : Trier une zone par cellule

Encore merci pour ton aide.
Je n'ai malheuresement pas les connaissances requise pour metre en oeuvre tes conseils.

J'attend donc avec impatience ton retour devant ton PC pour pouvoir continuer.

Merci une fois de plus :)
 

KidNap

XLDnaute Nouveau
Re : Trier une zone par cellule

Petite question, si je souhaite élargir ma zone à trier sur B3:G65536 Comment puis-je faire? Voir Edit
A quoi sert le "500" dans cette ligne au passage:
Code:
Dim tabtemp(500)

Edit: Oublis, j'ai trouver mais ça fait lagguer la page quand y'a trop de case à verifier.
 
Dernière édition:

unrender

XLDnaute Junior
Re : Trier une zone par cellule

Pour les liens hypertextes, mets ce code :

Code:
 Dim tabtemp(500, 1)
 k = 0
 For Each c In Range("B6:F22")
     If c <> "" Then
         tabtemp(k, 0) = c
         If c.Hyperlinks.Count > 0 Then tabtemp(k, 1) = c.Hyperlinks(1).Address
         k = k + 1
     End If
 Next
 
k = 0
 For Each c In tabtemp()
     If tabtemp(k + 1, 0) = "" Then Exit For
     If tabtemp(k, 0) > tabtemp(k + 1, 0) Then
         temp1 = tabtemp(k, 0)
         temp1l = tabtemp(k, 1)
         temp2 = tabtemp(k + 1, 0)
         temp2l = tabtemp(k + 1, 1)
         tabtemp(k, 0) = temp2
         tabtemp(k, 1) = temp2l
         tabtemp(k + 1, 0) = temp1
         tabtemp(k + 1, 1) = temp1l
         If k > 1 Then
             k = k - 2
         Else
             k = 0
         End If
     End If
     k = k + 1
 Next
k = 0
 For Each c In Range("B25:F42")
     c.Value = tabtemp(k, 0)
     If tabtemp(k, 1) <> "" Then c.Hyperlinks.Add c, Address:=tabtemp(k, 1)
     k = k + 1
 Next


Si tu veux élargir ta plage et que ça met du temps à calculer, essaye de mettre ça en début de procédure :

Code:
Application.ScreenUpdating = False

et ça en fin :

Code:
Application.ScreenUpdating = True


Le "Dim tabtemp(500)" sert à déclarer un tableau de 501 lignes (501 car ça commence à 0). J'ai mis 500 comme ça, tu peux mettre autre chose. Mais si tu mets moins que le nombre de données à trier, ça n'ira pas.
 

Discussions similaires

Réponses
13
Affichages
1 K

Statistiques des forums

Discussions
312 111
Messages
2 085 405
Membres
102 883
dernier inscrit
jameseyz