XL 2016 VBA - Récupérer la formule d'une Shape TextBox appartenant à un groupe SANS dégrouper

Dudu2

XLDnaute Barbatruc
Bonjour,

Je dis sans dégrouper car il peut y avoir des groupes imbriqués (dans un cas réel, pas dans l'exemple ci-dessous où il n'y a qu'un seul groupe) car si on dégroupe les groupes il faut pouvoir les reconstituer. Ce qui est peut-être la seule solution ?

Merci pour toute suggestion.

Edit: la seule solution que j'ai trouvé consiste à sélectionner la Shape TextBox dans le groupe et de travailler avec la sélection en tant que TextBox. Pas terrible car il faut passer par une sélection ! Mais c'est un pis-aller.
Dans un groupe, ceci ne marche pas:
VB:
Set TxB = ActiveSheet.TextBoxes(Shp.Name)  '<--- ERREUR si la Shape TextBox est dans un groupe
                                           'La qualification ActiveSheet n'est pas suffisante ou ne s'applique plus
Mais ça fonctionne:
Code:
Shp.Select
Set TxB = Selection
 

Pièces jointes

  • Classeur1.xlsm
    23.3 KB · Affichages: 3
Dernière édition:
Solution
Ouais. Compliqué à cerner l'organisation de ces vieux objets Excel
Une autre piste :
VB:
Sub Test()
   MsgBox TypeName(ActiveSheet.Shapes("Groupe 1").GroupItems("TextBox 1"))
   MsgBox TypeName(ActiveSheet.Shapes("Groupe 1").GroupItems("TextBox 1").DrawingObject)
   MsgBox ActiveSheet.Shapes("Groupe 1").GroupItems("TextBox 1").DrawingObject.Formula
   End Sub

Dudu2

XLDnaute Barbatruc
Bonjour @Dranreb,

Avec les appels récursifs de la fonction (GetShapes) je n'ai pas de problème à récupérer les Shapes quelque soit le nombre de groupes imbriqués auxquelles elles appartiennent.
Le problème c'est de "transformer" la Shape en TextBox pour avoir accès à la TextBox.Formula.

Une Shape TextBox dans un groupe n'est plus accessible par la qualification ActiveSheet.TextBoxes("TextBox 1") bien que le parent de la Shape soit toujours la feuille. J'ai essayé d'autres syntaxes en incluant le ShapeRange mais sans succès.

Sauf à sélectionner la Shape et à définir la TextBox sur la Selection comme dans ce fichier.
 

Pièces jointes

  • Classeur2.xlsm
    23.5 KB · Affichages: 1
Dernière édition:

Dranreb

XLDnaute Barbatruc
Ouais. Compliqué à cerner l'organisation de ces vieux objets Excel
Une autre piste :
VB:
Sub Test()
   MsgBox TypeName(ActiveSheet.Shapes("Groupe 1").GroupItems("TextBox 1"))
   MsgBox TypeName(ActiveSheet.Shapes("Groupe 1").GroupItems("TextBox 1").DrawingObject)
   MsgBox ActiveSheet.Shapes("Groupe 1").GroupItems("TextBox 1").DrawingObject.Formula
   End Sub
 

Discussions similaires