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.
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..
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
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)
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 !
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