Je pense que la meileure solution consiste à passer tous les blocs de ton dessin, et à stocker dans un array les coordonnées x et y. tu auras donc un array du style : coord(1 to nbblocs,0 to 1) avec nbblocs le nombre de blocs que tu as ensuite, le principe c'est de faire deux fois une boucle pour trier les blocs de gauche à droite (coordonnée x croissante) et de haut en bas (coordonnée x décroissante) pour qu'à la fin, ton array contienne les coordonnées des blocs dans l'ordre que tu as spécifié. ca donne qqch de ce genre (j'ai pas VB pour tester ce que je tape) : 'on tri d'abord l'array par coordonnée x croissante : for k=0 to 1 if k=0 then sens=1 else sens=-1 end if for i=1 to nbblocs-1 ligne=0 val=coord(i,k) for j=i+1 to nbblocs if coord(j,k)*sens val=coord(j,k) ligne=j end if next j tempo=coord(ligne,0) coord(ligne,0)=coord(i,0) coord(i,0)=tempo tempo=coord(ligne,1) coord(ligne,1)=coord(i,1) coord(i,1)=tempo next i next k je pense que ce code doit fonctionner, je l'essayerai sur un autre PC si j'ai le temp. La variable sens sert à inverser l'inégalité puisqu'on tri par croissant en x et par décroissant en y. La variable ligne repère la ligne du minimum la variable val contient la valeur minimale en cours (ou maximale pour y) après le next j, on permute la ligne courante et la ligne du min. tient moi au courant...