XL 2010 Tri alphabétique sur plusieurs colonnes

jokerfidelio

XLDnaute Occasionnel
Bonjour a tous,
J ai essayé plusieurs code vba mais sans succès.

J aurais souhaité pouvoir trier les données de plusieurs colonne
exemple B.D.F par ordre alphabétique (avec suite sur les 3 colonnes de A 》Z)
automatiquement a chaque nouvelles entrée ou a l ouverture du fichier.

Merci de votre aide
 

job75

XLDnaute Barbatruc
Re,

Votre ListBox était probablement vérolée : chez moi elle n'affichait pas toujours la dernière donnée.

Je viens de la remplacer dans le fichier (3) précédent.

Bonne fin de soirée.

Edit : j'ai été voir sur mon autre ordi avec Excel 2010, pas de problème.

Les dimensions des 2 objets et leurs couleurs sont différentes par rapport à Excel 2013.
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour à tous,

La macro TextBox1_Change du fichier (3) prend trop de temps sur un grand tableau.

Celle-ci est beaucoup plus rapide :
Code:
Option Compare Text 'la casse est ignorée

Private Sub TextBox1_Change()
Dim P As Range, tablo(), x$, j%, i&, n&, coul As Range, a$()
Set P = [A1].CurrentRegion.Resize(, 6).Offset(1)
tablo = P 'matrice, plus rapide
Application.ScreenUpdating = False
Intersect(P, [B:B,D:D,F:F]).Interior.ColorIndex = xlNone
ListBox1.Clear
If TextBox1 = "" Then Exit Sub
x = "*" & TextBox1 & "*"
For j = 2 To 6 Step 2
  For i = 1 To P.Rows.Count - 1
    If tablo(i, j) Like x Then
      n = n + 1
      Set coul = Union(IIf(coul Is Nothing, P(i, j), coul), P(i, j))
      If n Mod 50 = 0 Then coul.Interior.ColorIndex = 43: Set coul = Nothing 'décharge toutes les 50 cellules
      ReDim Preserve a(1 To n)
      a(n) = tablo(i, j)
    End If
Next i, j
If Not coul Is Nothing Then coul.Interior.ColorIndex = 43 'ce qui reste à colorer
If n Then ListBox1.List = a
End Sub
Edit : j'ai ajouté la variable tablo (matrice) pour aller encore plus vite.

Fichier (4).

A+
 

Pièces jointes

  • Tri sur 3 colonnes(4).xlsm
    46.1 KB · Affichages: 29
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Pour tester les durées d'exécution j'ai créé, à partir du tableau A2:F25, un tableau de 24000 lignes.

Les noms sont tous différents car précédés de nombres aléatoires (créés avec la fonction ALEA()).

Voyez les 2 fichiers joints.

Testez-les en entrant par exemple dans la TexBox la lettre "b", résultats chez moi sur Win 10 - Excel 2013 :

- fichier (3) => 10,8 secondes

- fichier (4) => 0,53 seconde (0,75 seconde sans la variable tablo).

A+
 

Pièces jointes

  • Tri sur 3 colonnes(3) 24000 lignes.xlsm
    1.4 MB · Affichages: 22
  • Tri sur 3 colonnes(4) 24000 lignes.xlsm
    1.4 MB · Affichages: 31
Dernière édition:

riton00

XLDnaute Impliqué
Bonjour job75

Comme c'est vous qui avez pondu le code du post 10 et que je n'ai pas les capacités de le modifier, auriez-vous l’obligeance de le modifier, de façon à ne pas lier les numéros avec les noms. c'est à dire qu'actuellement je voudrais bien récupérer ce code pour un truc à moi mais ce qui n’embête c'est qu'au moment du tri les chiffres se déplace avec les noms
Es-possible?
Merci
Cordialement
 

job75

XLDnaute Barbatruc
Bonjour riton00,

Pour que les nombres en colonnes A C E ne bougent pas, remplacer dans la macro du post #10 :
Code:
  [C2].Resize(nlig, 2).Cut Cells(nlig + 2, 1)
  [E2].Resize(nlig, 2).Cut Cells(2 * nlig + 2, 1)
  [A:B].Sort [B1], xlAscending, [A1], , xlAscending, Header:=xlYes 'tri
  Cells(2 * nlig + 2, 1).Resize(nlig, 2).Cut [E2]
  Cells(nlig + 2, 1).Resize(nlig, 2).Cut [C2]
par :
Code:
  [D2].Resize(nlig).Cut Cells(nlig + 2, 2)
  [F2].Resize(nlig).Cut Cells(2 * nlig + 2, 2)
  [B:B].Sort [B1], xlAscending, Header:=xlYes  'tri
  Cells(2 * nlig + 2, 2).Resize(nlig).Cut [F2]
  Cells(nlig + 2, 2).Resize(nlig).Cut [D2]
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 472
Messages
2 088 714
Membres
103 932
dernier inscrit
clotilde26