euh, non, ArrayTri est destiné à être un Array, donc je ne l'ai pas déclaré en tant que Range, mais en tant que Variant, idem pour TableauTri qui sera un tableau de Variant, donc je le déclare en tant que Variant et certainement pas en tant que Long.
Regarde à nouveau mes définitions dans le programme que j'ai joint, je pense que tu l'as fait un peu trop vite... ce qui a pu te tromper, c'est que les déclarations ont été faites sur la même ligne, mais VBA implique que chaque variable déclarée se voit déclarer son type, ainsi :
Dim A as Long, B
est différent de :
Dim A as Long, B as Long
Dans la première version, B est un Variant(type par défaut), mais dans la deuxième, c'est un Long, puisqu'on l'a déclaré ainsi. Peu importe quel est le type de la variable A, B doit être toujours déclaré explicitement. Eh oui, les outils Microsoft n'ont pas l'ergonomie des outils Borland...
Au fait, la variable Plage est un reliquat devenu inutile, tu peux le supprimer.
Pour Small, il s'agit de la dénomination anglaise de PETITE.VALEUR, puisque VBA ne connaît que l'anglais...
Je ne connais pas VB6, que je ne pratique pas, donc je ne sais pas trop dans quel contexte on utilise GLOBAL, ce que je sais c'est que c'est inutile en VBA, une variable est soit Public, soit Private et ça suffit bien.
Pour les déclarations, une variable qui n'est pas déclarée Public est Private par défaut, cependant pour les procédures et fonctions c'est le contraire, une procédure qui n'est pas déclarée Private est Public par défaut, allez savoir pourquoi...