Suppression des segments à l'exclusion des autres types de formes

Bonjour toutes et tous,

Je cherche a créer un code qui supprimerait tous les segments issus d’un tableau structuré sur la feuille active à l’exclusion de tous les autres type de formes.

En effet l’instruction ci-dessous supprime l’ensemble des formes, certes mes segments mais aussi les autres types :

ActiveSheet.Shapes.SelectAll

Selection.Delete

Existe-t’il une instruction spécifique pour préciser les segments.

Merci

Ps : je suis sur MAC Excel

Je joins un classeur exemple.

Bonjour,

Pas testé sur Mac :

Sub RechercherEtSupprimerLesSegments()

Dim I As Integer, J As Integer
Dim LaForme As Shape
Dim LaListe As Variant

    LaListe = Array("MAGASIN", "DATE", "CA", "CLIENTS")
    With ActiveSheet
         For I = .Shapes.Count To 1 Step -1
             For J = LBound(LaListe) To UBound(LaListe)
                 If InStr(1, .Shapes(I).Name, LaListe(J), vbTextCompare) > 0 Then
                    .Shapes(I).Delete
                 End If
             Next J
         Next I
    End With

End Sub

Bonjour,
Une autre proposition., à adapter !...
CDlt.

Public Sub DeleteSlicers()
Dim slc As SlicerCache
    For Each slc In ActiveWorkbook.SlicerCaches
        slc.Delete
    Next slc
End Sub

Bonjour Eric et Jean-Eric,

Merci à vous 2 pour retour.

Eric :

L'exécution de la macro génère une erreur ici :

 If InStr(1, .Shapes(I).Name, LaListe(J), vbTextCompare) > 0 Then

En outre je n'avais certainement pas mis assez de contexte mais je cherche à créer une macro qui pourrait être plus générique de suppression des segments, applicable pas seulement à mon classeur exemple par la suite. Donc dans ma réflexion un code qui recherche tous les segments de la feuille active celle ou sera exécutée la macro peut importe le classeur.

Jean-Eric :

J'ai adapté votre proposition pour que le code n'affecte que la feuille active et pas l'intégralité du classeur et il fonctionne bien sur mon Excel pour Mac.

Mais peut-être avez-vous des conseils d'optimisation.

Public Sub DeleteSlicersActiveSheet()
    Dim slc As Slicer
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ' Création d'une collection temporaire pour stocker les slicers à supprimer
    Dim slicersToDelete As Collection
    Set slicersToDelete = New Collection

    ' Parcourir tous les slicers de chaque SlicerCache
    Dim slcCache As SlicerCache
    For Each slcCache In ActiveWorkbook.SlicerCaches
        For Each slc In slcCache.Slicers
            If slc.Shape.Parent.Name = ws.Name Then
                slicersToDelete.Add slc
            End If
        Next slc
    Next slcCache

    ' Supprimer les slicers de la feuille active
    Dim slicerToDelete As Slicer
    For Each slicerToDelete In slicersToDelete
        slicerToDelete.Delete
    Next slicerToDelete
End Sub

Encore merci à vous 2

Trés cordialement

Hugues

Rechercher des sujets similaires à "suppression segments exclusion types formes"