XL 2010 Supprimer les onglets à partir d'une liste excel vba

Pygos69

XLDnaute Nouveau
Bonjour,

Je n'arrive pas à trouver comment supprimer les onglets d'un classeur listés dans les cellules (A2 à A12).

J'ai essayé ceci qui ne fonctionne pas...

Sub suppr_feuilles()

Dim nom As String, c As Range

Application.DisplayAlerts = False

For Each c In Range("liste")
nom = c.Value
If nom <> "" Then

Sheets.Add Count:=1, after:=Worksheets(Worksheets.Count)
Sheet.Select = nom
Sheet.Delete
End If

Next c
Application.DisplayAlerts = True
End Sub

Merci d'avance pour votre aide
 

Pygos69

XLDnaute Nouveau
Bonjour.
VB:
Sub SupprFeuilles()
   Dim Cel As Range
   Application.DisplayAlerts = False
   For Each Cel In Range("liste")
      Sheets(Cel.Value).Delete
      Next Cel
   Application.DisplayAlerts = True
   End Sub
Bonjour,

Merci Dranreb !

A la ligne
Sheets(Cel.Value).Delete
Je rencontre une erreur : Erreur d'exécution '9'
l'indice n'appartient pas à la sélection

La Feuil14 a bien été supprimée, mais la suivante nommée 18 rencontre une erreur.

Bien cordialement,
 
Dernière édition:

Pygos69

XLDnaute Nouveau
La liste contient un nom de feuille qui n'existe pas.

Lorsque je liste Feuil14, Feuil15.... cela fonctionne,
mais quand dans ma liste j'ai 18,19 (noms des autres onglets), cela ne fonctionne pas !

Je viens de tester avec un onglet nommé TOTO, cela fonctionne !

Cela ne fonctionne pas avec les onglets nommés avec du numérique, semble t'il...

Bien cordialement,
 
Dernière édition:

Pygos69

XLDnaute Nouveau
Si je met ma liste au format Texte, cela fonctionne.

liste = A2 à A11

A2 = 18 (au format texte)
A3 à A11 sont vides

La macro essaye ensuite de passer à la cellule A3 de la liste, qui est vide et elle plante !

Merci !
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Si c'est numérique c'est considéré comme le numéro d'ordre de la feuille dans la collection Sheets
CStr(Cel.Value) le convertirait en String.
Si vous ne pouvez pas vous arranger pour que le nom "liste" couvre exactement la liste de noms renseignés, testez IF Not IsEmpty(Cel.Value)
 

Pygos69

XLDnaute Nouveau
S'il n'y a qu'une instruction elle peut être mise directement derrière le Then, et il ne faut pas de End IF. Sinon, bien sur, il faut terminer ainsi le bloc If Then avant de terminer For Each qui l'englobe.
Ok, Merci ! Pouvez-vous me valider la correction ?

Sub SupprFeuilles()
Dim Cel As Range
Application.DisplayAlerts = False
For Each Cel In Range("liste")
If Not IsEmpty(Cel.Value) Then
Sheets(CStr(Cel.Value)).Delete
End If
Next Cel
Application.DisplayAlerts = True
End Sub

Bien cordialement,
 

Discussions similaires

Statistiques des forums

Discussions
312 160
Messages
2 085 837
Membres
102 999
dernier inscrit
francoisarg56