XL 2010 Supprimer les feuilles non présente dans une liste

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

counterbob

XLDnaute Nouveau
Bonjour, ma question est presque dans le titre.
Sur un classeur se trouve dans la feuille "Liste" une liste de noms correspondant aux feuilles qui doivent être présente.
je souhaiterais un code qui supprime les feuilles qui ne sont pas présente dans la liste.
Je bloque. J'ai essayé ce code mais c'est pas bon du tout.
Je joins un classeur exemple
merci pour une piste

VB:
Sub deleteFeuille()
Dim nom As String
For i = 2 To Sheets("Liste").Range("A1").End(xlDown).Offset(1, 0).Row - 1
nom = Cells(i, 1).Value
For Each sh In Sheets
If sh.Name <> nom Then
Application.DisplayAlerts = False
sh.Delete
Application.DisplayAlerts = True
End If
Next
Next
End Sub
 

Pièces jointes

Bonsoir le fil, counterbob

counterbob
En attendant mieux (et plus secure)
VB:
Sub Test_OK()
Dim liste, i%
Set f = Worksheets("Liste")
liste = Application.Transpose(f.Range("A2", f.Cells(Rows.Count, "A").End(3)))
For i = LBound(liste) To UBound(liste)
On Error Resume Next
Application.DisplayAlerts = False
Worksheets(liste(i)).Delete
Application.DisplayAlerts = True
Next
End Sub
 
Bonsoir le fil, counterbob

counterbob
En attendant mieux (et plus secure)
VB:
Sub Test_OK()
Dim liste, i%
Set f = Worksheets("Liste")
liste = Application.Transpose(f.Range("A2", f.Cells(Rows.Count, "A").End(3)))
For i = LBound(liste) To UBound(liste)
On Error Resume Next
Application.DisplayAlerts = False
Worksheets(liste(i)).Delete
Application.DisplayAlerts = True
Next
End Sub

Merci Staple1600,
mais ça supprime toutes les feuilles sauf "Liste"
Je vais creuser cette piste
@+
 
Bonsoir @counterbob, @Staple1600 🙂

Voir la macro suivante:
VB:
Sub SupprimerHorsListe()
Dim wsh
  Application.ScreenUpdating = False: Application.DisplayAlerts = False
  For Each wsh In Worksheets
    If wsh.Name <> "Liste" Then If Application.CountIf(Sheets("Liste").Range("a:a"), wsh.Name) = 0 Then wsh.Delete
  Next wsh
  'si vous désirez supprimer la feuille Liste, alors activer la ligne suivante
  'Sheets("Liste").Delete
  Application.DisplayAlerts = True
End Sub

edit : version plus concise
 
Dernière édition:
Bonjour,
Hi, Staple

Supprime les feuilles non dans la liste (y compris la feuille liste qui elle n'est pas dans la liste)
VB:
Sub deleteFeuille()
    Dim liste As Variant
    Dim i As Integer
    With ThisWorkbook
        With .Sheets("Liste").Range("A1").CurrentRegion
            liste = .Offset(1).Resize(.Rows.Count - 1)
        End With
        Application.DisplayAlerts = False
        For i = .Sheets.Count To 1 Step -1
            If IsError(Application.Match(.Sheets(i).Name, liste, 0)) Then .Sheets(i).Delete
        Next
        Application.DisplayAlerts = True
    End With
End Sub

Cordialement

[Edit] Hello @mapomme
 

Pièces jointes

Re, bonjour mapomme, Rerere Roblochon

Désolé, j'ai compris le contraire
Ma macro supprime les feuilles qui sont dans la liste
Du coup, c'est fâcheux 🙄

M'en vais corriger cela 😉

EDITION: Quoique, si j'étais moi, j'aimerai bien le IsError de Roblochon et du coup je lacherais l'affaire 😉
 
Bonjour @Roblochon 🙂

@Staple1600
Et alors, mapomme, qui n'a pas de IsErrror, on le néglige comme une vieille chaussette. Du coup, m'en vais en mettre un. 😛😀
VB:
Sub SupprimerHorsListe()
Dim wsh
  Application.ScreenUpdating = False: Application.DisplayAlerts = False
  For Each wsh In Worksheets
    If wsh.Name <> "Liste" Then If Application.CountIf(Sheets("Liste").Range("a:a"), wsh.Name) = 0 Then wsh.Delete
  Next wsh
  'si vous désirez supprimer la feuille Liste, alors activer la ligne suivante
  'Sheets("Liste").Delete
  Application.DisplayAlerts = True
  If IsError(0) Then:   '----- juste pour Staple1600
End Sub
 
Bonsoir @counterbob, @Staple1600 🙂

Voir la macro suivante:
VB:
Sub SupprimerHorsListe()
Dim wsh
  Application.ScreenUpdating = False: Application.DisplayAlerts = False
  For Each wsh In Worksheets
    If wsh.Name <> "Liste" Then If Application.CountIf(Sheets("Liste").Range("a:a"), wsh.Name) = 0 Then wsh.Delete
  Next wsh
  'si vous désirez supprimer la feuille Liste, alors activer la ligne suivante
  'Sheets("Liste").Delete
  Application.DisplayAlerts = True
End Sub

edit : version plus concise

Bonsoir Mapomme, excellent !
c'est parfait
@+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
212
Réponses
5
Affichages
233
Réponses
4
Affichages
179
Retour