supprimer une feuille parmi d'autres

Blafi

XLDnaute Occasionnel
Bonjour à tous les courageux du soir...

J'ai un pb (certainement tout bête) que je n'arrive pas à résoudre :

J'ai un classeur contenant plusieurs feuilles (menu, LaUne, LaDeux et LaTrois dans mon fichier joint) et dans ce classeur, l'utilisateur peut être amené à créer une ou des feuilles supplémentaires que je ne veux pas enregistrer à la fin.

J'ai donc essayé d'écrire une macro qui supprimerait les feuilles dont le nom n'est pas l'un des noms ci-dessus, et ceci en faisant une macro avec une boucle :

for each sh in sheets
if sh.name<> "menu" and sh.name<> "LaUne" and etc....then
sh.delete
end if
next sh

malheureusement, ma macro ne tient compte de rien et m'efface toutes les feuilles une par une...

J'ai essayé avec des OR à la place des AND mais le résultat est le même...

Quelqu'un peut-il me dire ou ça cloche ??
Merci et à bientôt.
 

Pièces jointes

  • Intru.xls
    28 KB · Affichages: 40
  • Intru.xls
    28 KB · Affichages: 42
  • Intru.xls
    28 KB · Affichages: 43

Blafi

XLDnaute Occasionnel
Re : supprimer une feuille parmi d'autres

Merci pour ta réponse BrunoM45...

J'avais déja essayé avec des OR mais ça ne marchait pas. Je viens de réessayer avec mes AND et maintenant ça marche.. à n'y rien comprendre.. j'ai simplement mis un espace entre les <> et les "noms"...
Apparement il suffit de peu de chose...

Dans le même ordre d'idée, comme j'ai 15 feuilles a tester, n'y aurait-il pas un moyen de le faire sans mettre 15 AND(ou OR) à la queue-leu-leu ? Avec un tableau et une boucle peut-être mais je ne vois pas bien comment..

Si quelqu'un a une bonne solution...

Merci d'avance et à plus..
 

pierrejean

XLDnaute Barbatruc
Re : supprimer une feuille parmi d'autres

bonjour Blafi
Salut Bruno

une possibilité:

Code:
Sub elimine()
Dim liste As String
Dim sh
liste = "Menu,Laune,Ladeux,Latrois,"
For Each sh In Sheets
  If InStr(liste, sh.Name & ",") = 0 Then sh.Delete
Next sh
End Sub
 

Blafi

XLDnaute Occasionnel
Re : supprimer une feuille parmi d'autres

Merci Pierrejean pour ta solution dont je prends connaisance ce matin...
Je viens de la tester et ça marche très bien...

J'étais parti à essayer de faire un tableau avec des if et des for mais je n'en sors pas car ma méthode présente des failles. En plus de ta solution, pourrait-on améliorer ma procédure pour qu'elle marche :

Public Sub eliminetab()

Dim Mesfeuilles()
ReDim Mesfeuilles(Worksheets.Count)

Mesfeuilles(1) = "Menu"
Mesfeuilles(2) = "Laune"
Mesfeuilles(3) = "ladeux"
Mesfeuilles(4) = "latrois"

For Each feu In Sheets
For i = 1 To Worksheets.Count
If feu.Name = Mesfeuilles(i) Then
...... et c'est là que je ne sais plus quoi faire.....

Remarque, cette question n'est que pour ma formation personnelle car ta solution me convient parfaitement et si la mienne est sans issue, je n'en ferait pas un drame !

Merci d'avance et à tout de suite si tu es là..
 

pierrejean

XLDnaute Barbatruc
Re : supprimer une feuille parmi d'autres

Re

pour continuer dans ta lançée:

Code:
Public Sub eliminetab()
Dim garder As Boolean
Dim Mesfeuilles()
ReDim Mesfeuilles(Worksheets.Count)
Mesfeuilles(1) = "Menu"
Mesfeuilles(2) = "Laune"
Mesfeuilles(3) = "Ladeux"
Mesfeuilles(4) = "Latrois"
For Each feu In Sheets
 For i = 1 To 4
  If feu.Name = Mesfeuilles(i) Then garder = True
 Next i
If garder = False Then feu.Delete
garder = False
Next feu
End Sub
 

Blafi

XLDnaute Occasionnel
Re : supprimer une feuille parmi d'autres

Merci Pierrejean,

Ta dernière solution est super.. Il fallait en effet chercher les feuilles à garder plutôt que celles à supprimer...

J'adopte tes deux solutions qui sont tout à fait excellentes...

Encore merci et à plus sur le forum..
 

Discussions similaires

Statistiques des forums

Discussions
312 846
Messages
2 092 774
Membres
105 532
dernier inscrit
nasen31