XL 2019 VBA gérer le Backcolor d'une zone de texte (activeX) situé dans plusieurs feuilles

Marcham

XLDnaute Junior
Bonjour
Pour info, je viens de passer à XL2019 donc bonjour à ma nouvelle équipe. Je ne suis plus tellement débutant mais pas au top non plus.

Mon problème :
J'ai trois feuilles (UneFeuille, LautreFeuille et CelleLa), dans chacune d'elle, j'ai inséré une zone de texte (activeX) portant le même nom (name) : MaZone.
Je souhaiterai connaitre la ligne de commande qui me permettrai de changer le Backcolor de toutes les zones de texte du classeur instantanément.
Voici l'idée que j'ai :

Code:
Sub OnYVa()
Dim UneFeuille As Worksheet

    For Each UneFeuille In Worksheets 'Pour chaque feuille
        'Diverses commandes
        UneFeuille.Shapes.MaZone.BackColor = vbYellow 'Met du jaune dans MaZone ou je vois rouge
        ' Autres commandes
    Next

End Sub

J'aimerai bien que ce coloriage se fasse sans aller/ouvrir chaque feuille, mais c'est peut-être pas possible ? Mystère !
Naturellement ça ne marche pas, mais peut-être devrai-je faire autrement, par exemple passer par appellation "Feuilx" avec un ActiveSheet ou utiliser "Sheet"
enfin, j'ai cherché et pire, je cherche encore. Une idée ?

Merci d'avance - Marc
 

Phil69970

XLDnaute Barbatruc
Bonjour @Marcham
Edit Bonjour Sylvain

En presque 10 ans sur le site tu n'es pas complétement nouveau et j'ai pas vu ton fichier !

Donc à l'aveugle je te propose ceci

VB:
Sub OnYVa()
Dim i&
For i = 1 To Worksheets.Count
    'Diverses commandes
    Shapes.MaZone.BackColor = vbYellow 'Met du jaune dans MaZone ou je vois rouge
    ' Autres commandes
Next i
End Sub

Merci de ton retour

@Phil69970
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
aile aile aille !!!
  1. la collection "Shapes" doit toujours etre précédée du parent
  2. et le name pour une shape n'est pas une propertie en écriture mais son indexation sa détermination
  3. et ou on a vu dans excel qu'une shape avait une propertie backcolor
pour les object active x sur feuille on passe passe par la collection "DrawingObjects "

modifiez le nom entre les parenthèses
VB:
Sub OnYVa()
Dim i&
For i = 1 To Worksheets.Count
    'Diverses commandes
    Sheets(i).DrawingObjects("commandbutton1").Object.BackColor = vbYellow ' 

Next i
End Sub
pS: vous remarquerez que vba est très gentil avec nous
en effet le nom du control entre parenthèses est ecrit en minuscule mais ca marche quand meme
 

Marcham

XLDnaute Junior
Hé bien voilà, c'est Patrick qui tient le bon bout, ça marche et en plus il explique certaines particularités de la collection "Shapes". Faut dire que ceci (la collection "Shapes") est nouveau pour moi.
Philippe, ta solution ne marche pas, certainement à cause de l'utilisation de "Shapes".
Et puis certes, je ne suis pas nouveau mais autodidacte et petit utilisateur de VBA pour des trucs perso.
Merci à Sylvain qui m'a certainement mal lu, mais ça m'arrive aussi.
Merci Patrick et bon week-end à tous.
 

Discussions similaires