Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Manipuler une (sous)zone de texte appartenant à un groupe (de zones de texte)

guigol

XLDnaute Junior
Bonjour,

J'ai un fichier excel (généré par macro) qui contient beaucoup de zones de texte (qui finissent par "_1", "_2"ou "_3") que j'ai groupées lot par lot (qui commencent par "PB_") :


J'aimerais récupérer les données contenues dans les zones de texte qui finissent par "_3" et dont la zone de texte finissant par "_2" est égale à OK.
Par exemple, ci-dessus, j'aimerais récupérer "texte 3". mais pas "Texte 6"

Voici le code que j'ai écrit :
Code:
    For Each S In ActiveSheet.Shapes                   'Je parcours l'ensemble des shapes de ma feuille
            If Left(S.Name, 3) = "PB_" Then                                      'Je fais le tri sur uniquement les groupes commencant par PB_ parce que j'ai aussi d'autres shapes dans mon fichier (images, flèches, ...) --> OK
                Identifiant_PB = Right(S.Name, Len(S.Name) - 3)         'Je récupère l'identifiant du bloc --> OK
                S.Range(Identifiant_PB & "_2").Select                          'J'essaye de selectionner le sous-bloc finissant par _2. --> NOK
                If S.Range(Identifiant_PB & "_2").TextFrame2.TextRange.Characters.Text = "OK" Then                              'Je teste si le sous-bloc finissant par _2 est égal à "OK" --> NOK
                    Contenu_PB = S.Range(Identifiant_PB & "_3").TextFrame2.TextRange.Characters.Text                           'Je stocke le contenu du sous-bloc finissant par _3 dans une variable --> NOK
                
                End If
            End If
    Next S

Dans ce code, tant que je manipule le groupe, pas de souci.
dès que j'essaye d'atteindre une sous zone --> Echec

Une idée?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Si les noms sont uniques sur la feuille (pas seulement dans le groupe), alors votre shape peut être référencé par : ActiveSheet.Shapes(Identifiant_PB & "_2"))

Ou sans doute par S.Parent.Shapes(Identifiant_PB & "_2")) où .Parent est normalement la feuille parente du groupe S

Bonne soirée
 

guigol

XLDnaute Junior
Merci à vous.
J'ai trouvé l'erreur.

En écrivant S.Range(Identifiant_PB & "_2").Select, j'essayais de trouver la zone de texte Identifiant_PB & "_2" situé dans le shape S.

Hors S était celle d'a coté.

VB:
For Each S In ActiveSheet.Shapes
            If Left(S.Name, 3) = "PB_" Then
                Identifiant_PB = Right(S.Name, Len(S.Name) - 3)
                Fichier_Synoptique.Sheets(1).Shapes.Range(Identifiant_PB & "_2").Select
                If Fichier_Synoptique.Sheets(1).Shapes.Range(Identifiant_PB & "_2").TextFrame2.TextRange.Characters.Text = "OK" Then
                    Contenu_PB = Fichier_Synoptique.Sheets(1).Shapes.Range(Identifiant_PB & "_3").TextFrame2.TextRange.Characters.Text
              
                End If
            End If
    Next S
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…