VB : Supprimer toutes les feuilles sauf certaintes

laurent64480

XLDnaute Nouveau
Bonjour, je souhaiterai savoir comment en vba on peut supprimer toutes les feuilles sauf certaines, je vous ai mis le fichier en pièce jointe ou il faudra tout supprimer à l'exception de :
-Remise
-Equipement
-Client
-Reglement
-Proforma
-Recap.


Merci de votre aide.
 

Pièces jointes

  • Facture.xls
    239 KB · Affichages: 79
  • Facture.xls
    239 KB · Affichages: 68
  • Facture.xls
    239 KB · Affichages: 73

flyonets44

XLDnaute Occasionnel
Re : VB : Supprimer toutes les feuilles sauf certaintes

Bonjour
Voici le code; attention à la "casse" des noms; il faut respecter les minuscules et majuscules !
Code:
Sub Deletsh()
Dim K&
Application.ScreenUpdating = False
Application.DisplayAlerts = False
K = Sheets.Count
For K = 1 To K
If Sheets(K).Name Like "Remise" Then GoTo suite
If Sheets(K).Name Like "Equipement" Then GoTo suite
If Sheets(K).Name Like "client" Then GoTo suite
If Sheets(K).Name Like "Reglements" Then GoTo suite
If Sheets(K).Name Like "proforma" Then GoTo suite
If Sheets(K).Name Like "RECAP" Then GoTo suite
suite:
Sheets(K).Delete
Next
Application.DisplayAlerts = true
Cordialement
Flyonets

End Sub
 

STephane

XLDnaute Occasionnel
Re : VB : Supprimer toutes les feuilles sauf certaintes

Bonsoir,

Voilà deux macros pour t'inspirer, la première montre comme supprimer des feuilles particulières, la deuxième comment supprimer toutes les feuilles sauf des feuilles données.
Sub Supprimer_Feuilles_Donnees()
wsh_toKill = Array("test", "test2")

Application.DisplayAlerts = False
For Each myVar In wsh_toKill
Sheets(myVar).Delete
Next myVar
End Sub

Sub Supprimer_Sauf_Feuilles_Donnees()

On Error Resume Next
Application.DisplayAlerts = False

wsh_toSave = Array("test", "test2")

Worksheets.Add
Worksheets.Add

For Each wsh In Worksheets
If Application.Match(wsh.Name, wsh_toSave, 0) = 0 Then wsh.Delete
Next wsh
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VB : Supprimer toutes les feuilles sauf certaintes

Bonsoir le fil, bonsoir le forum,

Dans le même esprit que Flyonets mais je pense que son Suite: a été placé une ligne trop tôt...
Code:
Sub Macro1()
Dim o As Worksheet 'déclare la variable o (Onglet)

For Each o In Sheets 'boucle sur tous les onglets du classeur
    Select Case o.Name 'agit en fonction du nom de l'onglet
        Case "Remise" 'pour ce cas là pas d'action
        Case "Equipement" 'pour ce cas là pas d'action
        Case "Client" 'pour ce cas là pas d'action
        Case "Reglement" 'pour ce cas là pas d'action
        Case "Proforma" 'pour ce cas là pas d'action
        Case "Recap" 'pour ce cas là pas d'action
        Case Else 'pour tous les autres cas
            Application.DisplayAlerts = False 'empêche les messages d'excel
            o.Delete 'supprime l'onglet
            Application.DisplayAlerts = True 'permet les message d'Excel
    End Select 'fin de l'action en fonction de...
Next o 'prochain onglet de la boucle
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : VB : Supprimer toutes les feuilles sauf certaintes

Bonjour à tous,

une autre approche :
Code:
Option Explicit
Sub test()
Dim t() As Variant, ws As Worksheet
t = Array("Remise", "Equipement", "Client", "Reglement", "Proforma", "Recap")
Application.DisplayAlerts = False
For Each ws In Worksheets
    If IsError(Application.Match(ws.Name, t, 0)) Then ws.Delete
Next ws
Application.DisplayAlerts = True
End Sub

bonne journée
@+
 

karamazov

XLDnaute Nouveau
Re : VB : Supprimer toutes les feuilles sauf certaintes

Bonjour,

J'aimerais rebondir sur cette discusion, certes qui date un peu, mais qui est l'objet de mes soucis actuels.
Tout comme la demande initiale, je souhaite supprimer toutes les feuilles de mon classeur sauf certaines.
Cependant, mon problème me semble un peu plus complexe puisque je ne connais pas les feuilles à conserver ; je ne peux donc pas les mettre en "dur" dans mon code.
Mes feuilles à conserver sont listées dans une feuille (ou fichier) à part et stockées dans une plage nommée (ex: mes_feuilles_a_conserver, via la formule suivante : =DECALER(Exe!$C$16;0;0;NBVAL(Exe!$C$16:$C$1048576);1)).
Malheureusement, je n'arrive pas à utiliser cette plage nommée dans un ARRAY ou un CASE de sorte de remplacer :

Array("feuille1", "feuille2", "feuille3") par Array(mes_feuilles_a_conserver) ou Case "feuille1", "feuille2", "feuille3" par Case mes_feuilles_a_conserver

Voici ci-dessous un exemple de code qui j'utilise et que j'essaie d'adapter à mon cas :

Code:
Public Sub SupprimeFeuille()
    Dim Compteur As Integer, Nom As String
    Set mes_feuilles_a_consever = Range("liste_feuilles")

    
    Application.DisplayAlerts = False
    For Compteur = Worksheets.Count To 1 Step -1
        Nom = Sheets(Compteur).Name
        Select Case Nom
        ' Case "feuille1", "feuille2", "feuille3"
        Case mes_feuilles_a_consever
        
        Case Else
            Sheets(Compteur).Delete
        End Select
    Next Compteur
    
    Application.DisplayAlerts = True
End Sub


J'ai bien essayé de contourner le problème en copiant mes feuilles à conserver dans un nouveau classeur (copier-coller en valeur, suppressions des connexions existantes) mais j'ai un soucis lors de la sauvegarde à cause d'images qui sont dans ces feuilles.

J'espère que vous aurez quelques idées à me faire tester.
Merci d'avance pour votre aide.
Cordalement
 

Pierrot93

XLDnaute Barbatruc
Re : VB : Supprimer toutes les feuilles sauf certaintes

Bonjour,

peut être comme ceci... non testé :
Code:
Option Explicit
Sub test()
Dim  ws As Worksheet
Application.DisplayAlerts = False
For Each ws In Worksheets
    If IsError(Application.Match(ws.Name, Range("NomPlage"), 0)) Then ws.Delete
Next ws
Application.DisplayAlerts = True
End Sub

bon après midi
@+
 

karamazov

XLDnaute Nouveau
Re : VB : Supprimer toutes les feuilles sauf certaintes

Bonjour Pierrot93,

Merci pour cette 1e réponse.
Malheureusement, sauf erreur de ma part, cela ne fonctionne pas. Application.Match n'accepte pas ma plage nommée, mais seulement un paramètre de la forme array("feuille1","feuille1","feuille1"). Et je n'arrive pas à convertir ma plage sous cette forme.

Je continue mes investigations mais je commence à patauger !
 

Pierrot93

XLDnaute Barbatruc
Re : VB : Supprimer toutes les feuilles sauf certaintes

Re,

Code:
Option Explicit
Sub test()
Dim  t() As Variant, ws As Worksheet
t = Range("NomPlage") 
Application.DisplayAlerts = False
For Each ws In Worksheets
    If IsError(Application.Match(ws.Name, t , 0)) Then ws.Delete
Next ws
Application.DisplayAlerts = True
End Sub
 

karamazov

XLDnaute Nouveau
Re : VB : Supprimer toutes les feuilles sauf certaintes

Merci Pierrot, ce code fonctionne correctement.

Bon, j'ai quand même été obligé d'ajouter un On Error Resume Next à cause, me semble-t-il, de slicers qui trainent dans certaines feuilles (j'ai bien supprimé mes connexions, mais les slicers liés aux tcd restent). Enfin c'est pas grave.

DoubleZero, je n'ai pas exploré plus en détail ta solution ayant touvé mon bonheur par aileurs.

Merci à vous 2.

Bonne journée
 

Discussions similaires

Réponses
2
Affichages
157