Tester présence d'image dans range

Bonjour à tous,

Je cherche à tester la présence d'une image dans un Range, afin d'optimiser le code est d'éviter de parcourir la collection des Shapes d'une sheet (code ci dessous) :

    For Each xShape In ActiveSheet.Shapes
        If xShape.TopLeftCell.Address = xRg.Address Then
            xFlag = True
        End If
    Next

J'aimerais pouvoir tester directement un range:

Private Function Suppression_Image(c As Range) As Boolean
    Dim xl  As Shape
    Dim sel As Range

    Suppression_Image = False

    Set sel = Range(c.Address).Resize(8, 8)

    For Each xl In sel.Shapes
        If xl.Type = msoPicture Then xl.Delete
    Next xl

End Function

J'ai une erreur '438 propriété ou méthode non gérée par cet objet ', j'en déduis que Shapes n'est pas membre de la collection Range, j'ai essayé avec 'ListObject' mais guère mieux, avez vous une méthode pour tester la présence d'image dans un range spécifique ?

Je viens de faire ce code qui fonctionne, car je sais ou se trouve l'image si présence de celle ci :

Private Function Suppression_Image(c As Range) As Boolean
    Dim xl  As Shape

    Suppression_Image = False

    On Error Resume Next
    For Each xl In ActiveSheet.Shapes
        If xl.Type <> 8 And xl.Type <> 12 Then
            If xl.TopLeftCell.Address = c.Offset(1, 2).Address Then
                xl.Delete
                Suppression_Image = True
                Exit Function
            End If
        End If
    Next xl
    On Error GoTo 0

End Function

Je me pose la question comment fais t-on pour savoir si une image est présente ou non, dans un sélection sans trop savoir à la cellule près ou elle se situe.

Il doit bien y avoir un moyens ? Mais lequel , je continuerais mais recherches si personne ne trouve entre temps et je posterais sur le FoFO si je trouve la solution.

Bonjour,

En supposant que vous adoptiez la convention suivante :

  • A chaque forme, lui correspond une zone nommée du niveau classeur dont le nom sera "Cel" + NomDeLaForme.
  • Chaque forme a un nom différent.
Sub TestSuppressionShape()

    SuppressionShape "Shape01"

End Sub

Sub SuppressionShape(ByVal NomDeLaForme As String)

Dim I As Integer
Dim Onglet As String, ZoneNommee As String

    ZoneNommee = "Cel" & NomDeLaForme
    Onglet = ""

    For I = 1 To Names.Count   ' Noms du niveau classeur
        If Names(I).Name = ZoneNommee Then
           Onglet = Names(I).RefersToRange.Worksheet.Name
        End If
        If Onglet <> "" Then
            With Sheets(Onglet)
                 .Activate
                 .Shapes(NomDeLaForme).Select  ' .Delete
                 Exit For
            End With
        End If
    Next I

End Sub
Rechercher des sujets similaires à "tester presence image range"