Les Shapes et Select

Bonjour honorables et généreux membres,

Je n'arrive pas à agir sur un Shape sans le sélectionner :

Ceci fonctionne bien ...

With Worksheets("MaFeuille")
   .Shapes.Range(Array("Button 1")).Select  
   Selection.Characters.Text = "Mon texte"
   ...
   ...
end With 

Ceci ne fonctionne pas ...

With Worksheets("MaFeuille")
    .Shapes.Range(Array("Button 1")).Characters.Text = "Mon texte"
   ...
   ...
end With

Y a-t-il une façon d'éviter le Select ??

A+

Joseph

Bonjour,

Tu pourrais tester le code suivant ...

With Worksheets("MaFeuille")
    .Shapes("Button 1").TextFrame.Characters.Text = "Mon texte"
End With

En espèrant que cela t'aide ...

Bonjour,

Utilises une variable Shape afin de bénéficier l'intellisense. Il te faut passer par la propriété "TextFrame" et Array() et Range ne servent à rien car tu n'agis que sur un seul Shape :

Sub Test()

    Dim S As Shape

    Set S = Worksheets("MaFeuille").Shapes("Button 1")

    With S
        .TextFrame.Characters.Text = "Mon texte"

    End With

End Sub

Bonjour James007, bonjour Theze, bonjour le forum,

Vos solutions fonctionnent impeccablement.

Désolé Theze ... mais, celle de James007 est plus concise.

Merci à vous deux.

Joseph

Re,

Oui, mais quand tu cherches à agir sur une propriété que tu ne connais pas, l'intellisense te permet une recherche plus rapide plutôt que de tâtonner !

Rien ne t'empêche par la suite de raccourcir le code

Bonjour Theze, bonjour James007, bonjour le forum,

Effectivement, c'est ce que j'ai compris en modifiant les différents endroits dans le code (pêché sur le net).

Et si je devais jouer sur plusieurs autres propriétés du Shape, le with deviendrait, dès lors, plus avantageux

Mais dans le cas présent ...

Merci encore

Joseph

Content que cela fonctione ...

Merci ... pour tes remerciements ....

Bonjour James007

Merci de m'aider à m'améliorer.

Ce n'est pas facile à mon âge de corriger certaines bases non acquises au départ.

À l'époque, je recevais plus de coups de pointeur que d'encouragements.

On avait des enseignantes à la pédagogie "musclée".

A+

Joseph

Re,

Tu as raison ... !!!

Le moins que l'on puisse dire c'est que le monde a vraiment changé ...

Et les moyens d'apprendre, dans tous les domaines, sont aujourd'hui ... pratiquement innombrables ...

Bonne Continuation ...

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 !

Rechercher des sujets similaires à "shapes select"