Supprimmer une plage comprise entre 2 cellule marquée d'un X

Bonjour,

Je souhaite trouver un code pour supprimer toutes les lignes qui se trouvent entre deux cellules repérée par un "X".

Il faudrait un code pour dire : "supprimer la plage s'étendant de la première cellule contenant un "X" à la cellule suivante contenant un "X".

P.S : il est important de cibler la cellule suivante et non la dernière cellule contenant un "X", car plusieurs plage de même type vont se suivre et il faut pouvoir les supprimer distinctement...

Merci pour votre aide

-- 27 Juil 2011, 20:52 --

Voici une première solution pas encore tout à fait satisfaisante :

Sub Supprimer_Plage()
    Dim c As Range, c2 As Range
    Dim sh As Shape
    On Error GoTo err_Handler
    With ActiveSheet
    Set c = .Cells(.Shapes(Application.Caller).TopLeftCell.Row - 2, 1)
    If Not c Is Nothing Then
        Set c2 = .Range("A:A").Find(what:=c, After:=c, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        If Not c2 Is Nothing Then
            For Each sh In .Shapes
                'Supprime les anciens boutons
               If sh.TopLeftCell.Row >= c.Row And sh.TopLeftCell.Row <= c2 Then sh.Delete
            Next
            .Range(c, c2).EntireRow.Delete
        End If
    End If
    End With
err_Handler:
End Sub

En effet, Le code marche pour la suppression de la plage : on supprime bien les lignes qu'il y a entre la première et seconde croix par rapport au boutons cliqué;

mais pour la suppression des boutons il y a un problème lorsque l'on supprime en premier la plage du haut : cette fois, on supprime les boutons se trouvant entre la première et dernière croix, ce que j'ai du mal à expliquer.

Si pour qq'un ça saute aux yeux, n'hésitez pas.

-- 27 Juil 2011, 20:58 --

Re,

en fait je vais clore ce sujet tout seul car je viens de voir le probleme héhé

Sub Supprimer_Plage()
    Dim c As Range, c2 As Range
    Dim sh As Shape
    On Error GoTo err_Handler
    With ActiveSheet
    Set c = .Cells(.Shapes(Application.Caller).TopLeftCell.Row - 2, 1)
    If Not c Is Nothing Then
        Set c2 = .Range("A:A").Find(what:=c, After:=c, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        If Not c2 Is Nothing Then
            For Each sh In .Shapes
                'Supprime les anciens boutons
               If sh.TopLeftCell.Row >= c.Row And sh.TopLeftCell.Row <= c2.row Then sh.Delete
            Next
            .Range(c, c2).EntireRow.Delete
        End If
    End If
    End With
err_Handler:
End Sub

En espérant que ça serve à d'autres

19okay.xlsm (33.32 Ko)
Rechercher des sujets similaires à "supprimmer plage comprise entre marquee"