Salut retraite8, James, Theze !
Même si sujet déjà clos, je pense pouvoir ajouter un petit commentaire...
Il n'y a aucune antinomie dans les propositions de James et de Theze, elles aboutissent bien au résultat !
Le moins que l'on puisse dire c'est que le monde a vraiment changé ...
Il est vrai que je me prends parfois à regretter le temps où l'on pouvait se contenter des DrawingObjects et jongler avec les collections Rectangles, Ovals... (ainsi que celles correspondant à chacun des contrôles de formulaire)...
Mais on était un peu pauvre en formes...
Le domaine s'est grandement étoffé, démultiplié en une foultitude d'objects plus ou moins ésotériques et s'y retrouver n'est pas spontané.
C'est l'un des domaines où l'enregistreur peut être utilisé positivement pour élucider des points de syntaxe (encore qu'il me soit arrivé de me pencher sur un sujet concernant une propriété absconse que j'ai depuis oubliée mais que l'enregistreur n'enregistrait carrément pas ! Il avait fallu un travail d'enquête pour la débusquer avec l'explorateur d'objets, ce qui m'avait d'ailleurs appris à m'en servir, puis trouver la bonne syntaxe par analogie...)
Oeuvrant pour l'élimination des Select inutiles dans le code, avec en contrepartie la qualification des expressions, les Shapes ont d'intéressant que l'on est obligé de les qualifier (référence explicite à la feuille obligatoire, sinon erreur...)
On peut donc en éliminer les Select, comme ailleurs dans le code, sauf sur un point où je n'ai pas réussi : l'utilisation d'un objet ShapeRange regroupant toutes les Shapes d'une feuille. Sans passer par la sélection préalable des Shapes de la feuille, j'ai toujours eu une erreur... (S'il y a une solution autre, je serais ravi de la connaître.)
L'utilisation de variables objet apparaît toujours particulièrement intéressante dans la manipulation des formes (ainsi que l'indique Theze). Il convient toutefois de se méfier de la déclaration en tant que Shape pour des formes non déjà préexistantes, leur appartenance à la collection Shapes n'est pas toujours immédiate, et une déclaration de variable en tant qu'Object (générique) apparaît alors préférable. Exemple : une forme libre, durant sa construction n'est pas Shape, elle ne le devient qu'après application de ConvertToShape ; dans ce cas c'est clair, mais on rencontre aussi le problème lors de l'insertion d'images...
Mais courage, retraite8, avec les Shapes on n'a jamais fini de s'améliorer !