Supprimer des formes dans une plage donnée sous conditions

Bonjour,

Dans un fichier, des formes qui ne répondent pas aux conditions du code ci-après, sont supprimées.

Pour que ce code soit limité à une plage donnée, pourriez vous m'aider à y insérer une ligne du genre " If Not Intersect(s.TopLeftCell, Range("$d$14:$d$100")) Is Nothing Then... " :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Dim s As Shape
    On Error Resume Next
    For Each s In ActiveSheet.Shapes
        If s.AutoShapeType <> msoShapeRectangle Then s.Delete
        If s.TextFrame2.TextRange.Characters.Text = "" Then s.Delete
    Next
End Sub

Merci pour votre aide

bonjour,

Essayer ce code

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Dim s As Shape
    Dim plage_shape As Range
    Dim i As Integer, j As Integer, h As Long, l As Long

    On Error Resume Next
    For Each s In Sh.Shapes
        i = 0: j = 0: l = 0: h = 0
        While h < s.Height
            h = h + s.TopLeftCell.Offset(i).Height
            i = i + 1
        Wend
        While l < s.Width
            l = l + s.TopLeftCell.Offset(, i).Width
            j = j + 1
        Wend
        Set plage_shape = Range(s.TopLeftCell, s.TopLeftCell.Offset(i, j))

        If Not Intersect(plage_shape, Sh.Range("$d$14:$d$100")) Is Nothing Then
            If s.AutoShapeType <> msoShapeRectangle Then s.Delete
            If s.TextFrame2.TextRange.Characters.Text = "" Then s.Delete
        End If
    Next

End Sub

Merci beaucoup Thev. Cela fonctionne parfaitement.

La première partie du code est pour moi du chinois.

Bonne journée.

Le problème est de déterminer la plage de cellules contenant la forme.

La cellule en haut à gauche de la forme est C1 = s.TopLeftCell

La première boucle while... wend permet de trouver la ligne de la cellule Cx dont la hauteur de la plage C1:Cx dépasse juste la hauteur de la forme.

La deuxième boucle while... wend permet de trouver la colonne de la cellule Cy dont la largeur de la plage C1:Cy dépasse juste la largeur de la forme.

Donc la plage de cellules contenant la forme est C1:Cxy

Merci pour l'éclaircissement. C'est bête comme chou une fois expliqué.

Rechercher des sujets similaires à "supprimer formes plage donnee conditions"