Suppression de Shape

Bonjour tout le monde,

Je voudrais exécuter une macro qui me permet de supprimer les shapes (boutons sous forme de rectangle que j'ai crée) sur toutes les feuilles qui en contiennent dans le classeur. J'utilise cette macro.

comment faire plus simple?

Sub RemoveB()

Sheets("Alpha").Shapes.Range(Array("Rounded Rectangle 1")).Delete

Sheets("Alpha").Shapes.Range(Array("Rounded Rectangle 2")).Delete

Sheets("Beta").Shapes.Range(Array("Rounded Rectangle 1")).Delete

Sheets("Beta").Shapes.Range(Array("Rounded Rectangle 2")).Delete

Sheets("Delta").Shapes.Range(Array("Rounded Rectangle 1")).Delete

Sheets("Delta").Shapes.Range(Array("Rounded Rectangle 2")).Delete

End Sub

Merci pour votre aide

Bonsoir,

Sub SupprimerFormes()
    Dim f, shp As Shape
    For Each f In Array("Alpha", "Beta", "Delta")
        For Each shp In Worksheets(f)
            If shp.Name Like "Rounded Rectangle*" Then shp.Delete
        Next shp
    Next f
End Sub

NB- Tu aurais pu leur donner des noms plus conviviaux...

Cordialement.

Bonsoir Brodyeva, MFerrand, le forum,

Je mets quand même ma proposition ... ...loin de moi l'idée de rivaliser avec MFerrand, c'est juste histoire de ne pas m'etre preté à l'exercice inutilement,

Sub test()

Dim Fl As Worksheet, i As Integer

For Each Fl In ThisWorkbook.Sheets
  With Fl
    Select Case .Name
      Case "Alpha", "Beta", "Delta"
        For i = 1 To 2
         .Shapes.Range(Array("Rounded Rectangle" & " " & i)).Delete
        Next i
    End Select
  End With
Next Fl

End Sub
58classeur1.xlsm (16.07 Ko)

Cordialement,

Yes! Ça fonctionne très bien. gros Merci MFerrand, xorsankukai et le FoRUm

Re,

@MFerrand : contrairement à ta macro, la mienne supprime uniquement les boutons 1 et 2.

Lorsque je teste la tienne (qui les efface tous à condition qu'ils se nomment "Rounded Rectangle") , j'ai une erreur sur la ligne

For Each shp In Worksheets(f)
capture

Modifié ainsi, cela fonctionne

For Each shp In Worksheets(f).Shapes

?

Bonne soirée,

Cordialement,

Salut Xorsankukai !

Tu as tout à fait raison ! J'ai écrit un peu vite et c'est bien In Worksheets(f).Shapes qui cible la collection Shapes de la feuille. Et comme je n'ai rien testé en l'absence de fichier, c'est passé...

Pour les boutons 1 et 2, là j'ai eu la flemme ! et comme l'intéressé n'a pas précisé la chose comme il lui appartenait de le faire... à lui de venir réparer son oubli le cas échéant.

Comme je vois que tu suivais notre ami dans l'utilisation d'un objet ShapeRange, tu aurais pu regrouper les deux dans le tableau pour les supprimer simultanément. Lui l'a sorti de l'enregistreur, qui bêtement ne procède qu'ainsi même avec un tableau d'une seule forme... Mais les subtilités de Microsoft font que la collection Shapes n'a pas de méthode Delete, l'objet Shape oui, et l'objet ShapeRange (association de plusieurs formes dans un tableau) également.

On ne peut donc pas supprimer toutes les formes d'une feuille en bloc, sauf à passer par un objet ShapeRange qui les regroupe toutes (ce qui passe obligatoirement par la méthode SelectAll de la collection Shapes...)

Cordialement.

Bonjour Mferrand,

Merci pour tes explications

Cependant, même si j'ai bien progressé à l'aide de ce forum, il y a encore beaucoup de subtilités qui m’échappent ... ...mais je ne désespère pas...

tu aurais pu regrouper les deux dans le tableau pour les supprimer simultanément

Tu veux dire que je peux éviter la boucle et procéder ainsi:

.Shapes.Range(Array("Rounded Rectangle 1", "Rounded Rectangle 2")).Delete

Merci,

Amicalement,

Rechercher des sujets similaires à "suppression shape"