Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Tri alphabétique sur plusieurs colonnes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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:
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

Dernière édition:
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

Dernière édition:
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
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…