Array à 2 dimensions : comment les triez-vous ? Tri multicritère + Trier le vide

Charly88

XLDnaute Occasionnel
Bonjour,
J'utilise des array à 2 dimensions dans divers programmes et j'ai un gros problème récurrent : le tri. J'ai trouvé diverses techniques de tri rapide mais limité à un argument, j'ai régulièrement besoin de 2 ou 3 critères. Quelqu'un aurait-il une technique qui va bien ? Une fonction probablement pas hyper rapide mais qui permet de gérer ça en array ?

Autre problème, trier les lignes vides.
Typiquement : j'ai un tableau / une array dont je veux mettre à jour une partie. Actuellement, je pompe le tableau de la feuille Excel, je vide les lignes à mettre à jour, je rajoute les lignes nouvelles le tout en VBA pour aller vite, puis je colle le résultat en feuille et je trie via le tri excel pour renvoyer les lignes vides à la fin et tout remettre en ordre.

Dans les 2 cas, je ne peux pas profiter à plein de l'utilisation de l'array et je dois terminer par du tri excel sans parler du fait que l'array aux lignes effacées / ajoutées peut considérablement grossir en taille.
 

Dranreb

XLDnaute Barbatruc
Re : Array à 2 dimensions : comment les triez-vous ? Tri multicritère + Trier le vide

Bonjour.

Vous avez le module MClassement dans OutIdx qui fait ça très bien.
Attention: il a besoin du module de classe TableIndex qui s'y trouve également.
Remarque: l'indexation sur plusieurs colonnes, en ordre croissant ou décroissant, est réalisé par la fonction TbIdxTVcd de ce module.
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Array à 2 dimensions : comment les triez-vous ? Tri multicritère + Trier le vide

Bonjour, salut Dranreb,
regarde ici la solution de tri que je propose :
- La sub Tri_MultiCol permet de trier un Array à 2 dimensions.
- La Sub Tri_3_clés permet de trier un Array à 2 dimensions dans un sens ascendant ou descendant avec la possibilité d'individualiser le sens de tri selon les colonnes.

Tu peux également étudier les autres solutions proposées dans ce fil.

A+
 

Charly88

XLDnaute Occasionnel
Re : Array à 2 dimensions : comment les triez-vous ? Tri multicritère + Trier le vide

Je te remercie pour cette suggestion Dranreb, le classeur a l'air fantastique... mais il est à un tel niveau que j'ai bien du mal à le comprendre.
Je n'arrive même pas à visualiser comment présenter le tableau ColOrd qui semble être celui qui décrit comment classer.
 

Dranreb

XLDnaute Barbatruc
Re : Array à 2 dimensions : comment les triez-vous ? Tri multicritère + Trier le vide

Alors. Initialement, dans toutes les procédure de niveaux hauts et moyens, le tableau ColOrd est un ParamArray, c'est à dire une liste de paramètres en nombre variable à spécifier derrière celui (ou ceux) qui précise le truc à classer. Il est récupéré sous forme d'un tableau presque ordinaire en Base 0, à part que son UBound peut être = -1 et donc inférieur à son LBound toujours à 0, si aucun paramètre n'est passé. Toutes les procédures exécutent d'abord InterpréterParam ColOrd au cas où il en étaient précisés, mais appellent ensuite souvent des procédures de niveaux inférieur sans leur en préciser, pour ne plus déranger les arguments de tri retenus. InterpréterParam ne fait rien en effet, si un tableau issu d'un ParamArray vide lui est transmis.
P.S. Il n'y a donc surtout pas à essayer de le passer sous forme de tableau: juste, chacun derrière une virgule, le N° de colonne munie de son signe de sens de classement. C'est le moyen par excellence pour accepter aucun, un ou plusieurs paramètres simples en nombre variable. Exemple :
VB:
CopierClassé MaTableCible, MaTableSource, 1, 2, -3
Conseil: Pour des manipulations en mémoire il y a souvent intérêt à ne jamais classer le tableau lui même, mais seulement à le parcourir dans l'ordre des lignes indiqué par un TableIndex. Je retarde d'habitude au maximum l'opération quand elle est inévitable, pour profiter le plus longtemps possible de l'information que constitue l'ordre initial.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Array à 2 dimensions : comment les triez-vous ? Tri multicritère + Trier le vide

Bonjour.
Comme toute incompréhension sert à améliorer les commentaires explicatifs, je rajoute derrière ceux ci pour la fonction PlageClassée, qui est la première procédure du module MClassement :
VB:
'       Pour ceux qui ne connaitraient pas les ParamArray: ce n'est surtout pas un truc à transmettre
'       en tant que tableau: c'est une série de paramètres ordinaires à mettre à la suite des
'       premiers obligatoires, en nombre quelconque y compris aucun.
 

Charly88

XLDnaute Occasionnel
Re : Array à 2 dimensions : comment les triez-vous ? Tri multicritère + Trier le vide

Merci beaucoup à tous pour votre aide, c'est difficile d'expliquer à quel point cela peut m'aider, cela flexibilise énormément l'utilisation d'array.
Pour l'instant je suis parti sur le code de David84, je voulais faire un retour chronométré mais cela va durer avant que je l'implémente dans un vieux programme et puisse expliciter le avant / après. Pour l'instant, je l'utilise dans un nouveau prog et c'est déjà un gros plus.

Je me replongerai très certainement bien plus tard dans vos clarifications / contributions.
 

Discussions similaires

Réponses
20
Affichages
490
Réponses
16
Affichages
455
Réponses
4
Affichages
291

Statistiques des forums

Discussions
312 070
Messages
2 085 045
Membres
102 766
dernier inscrit
Awiix