Supprimer un ensemble d'image dans une plage de cellule

Bonjour le forum,

Voilà le problème, j'ai plusieurs image et formes dans une plage de cellule (ici il s'agit de la plage A466:BB500).

L'idée est de supprimer cette plage de cellule (jusqu'à la rien de compliquer en VBA) mais également supprimer toutes les images et forme de cette plage.

J'ai cherché sur plusieurs forum (dont celui-ci) et je n'ai rien trouvé de concluant. J'avais cependant trouvé ce bout de macro qui me semblait intéressant mais finalement VBA ne veux pas le lire (je suis sous excel 2016), il semblerais que c'est la ligne Set xPicRg = Range(xPic.TopLeftCell.Address & ":" & xPic.BottomRightCell.Address) qui lui pose problème en m'indiquant :

"Erreur d'exécution 13, Incompatibilité de type"

Dim xPicRg As Range

Dim xPic As Picture

Dim xRg As Range

Application.ScreenUpdating = False

Set xRg = Range("A466:BB500")

For Each xPic In ActiveSheet.Pictures

Set xPicRg = Range(xPic.TopLeftCell.Address & ":" & xPic.BottomRightCell.Address)

If Not Intersect(xRg, xPicRg) Is Nothing Then xPic.Delete

Next

Application.ScreenUpdating = True

Si vous avez une idée, personnellement je sèche...

Bonjour,

Essais avec l'objet "Shape" à la place de l'objet "Picture" :

Sub Test()

    Dim xPicRg As Range
    Dim xPic As Shape
    Dim xRg As Range

    Application.ScreenUpdating = False

    Set xRg = Range("A466:BB500")

        For Each xPic In ActiveSheet.Shapes

            Set xPicRg = Range(xPic.TopLeftCell.Address & ":" & xPic.BottomRightCell.Address)
            If Not Intersect(xRg, xPicRg) Is Nothing Then xPic.Delete

        Next

    Application.ScreenUpdating = True

End Sub

Salut,

Le code fonctionne bien chez moi pour supprimer des images quand j'ai testé tout à l'heure, peut être un problème de version d'excel comme tu le dis

ECG

Bonjour à tous,

C'est peut-être un défaut de version. J'ai déjà tester de modifier la définition des variables mais cela ne fonctionne toujours pas.

J'ai trouvé autre chose et sa fonctionne bien, je me permet de vous le partager :

Sub test()

Dim s As Shape

For Each s In ActiveSheet.Shapes

If Not Intersect(s.TopLeftCell, Range("$A$1621:$BB$1655")) Is Nothing Then 'Valeur cadre'

s.Delete

End If

Next s

End Sub

Après il suffit juste de changer la plage souhaitée.

Bonjour,

Où est la différence fondamentale avec le code que je t'ai donné ?

Moins long, moins de variable, t pour une raison qui m'échappe celui-ci fonctionne sur ma version et pas l'autre.

Les mystère d'excel sont impénétrables

Salut,

En regardant les lignes de codes, ce n'est pas le

.Address

qui fait tout merder entre les versions?

Tu as tenter une solution hybride du genre

Range(xPic.TopLeftCell & ":" & xPic.BottomRightCell)

Et je dirais aussi que cela ne fait pas la même chose dans ton code rls avec le

s.TopLeftCell

versus le

Range(xPic.TopLeftCell.Address & ":" & xPic.BottomRightCell.Address)

Vu que tu ne prends que le TopLeftCell (d'ailleurs je ne sais pas comment un range est calculé juste avec ça, mystère), tu as testé si le coin haut gauche de l'image n'est pas dans ton range alors que le reste est dedans? vu ton code je dirais que cela ne devrait pas la supprimer

Bon après si ça supprime pas avec ton code et que la solution hybride ne fonctionne pas non plus, suffira de refaire la même formule avec

s.BottomRightCell

pour supprimer le reste des images qui sont passé à travers la première

ECG

Rechercher des sujets similaires à "supprimer ensemble image plage"