Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Suppression d'onglet avec le nom dans une cellule.

christ77000

XLDnaute Occasionnel
Bonsoir à tous,
j'ai récupérer sur ce site un code pour supprimer des onglets en fonction d'un nom dans une cellule. Dans cette macro j'en supprime deux d'un coup. Mais si un utilisateur clic de nouveau sur le bouton supprimer, ca plante. Serait il possible de mettre déjà un message de confirmation avant la suppression et de contrôler si les feuilles n'ont pas déjà été supprimer. Merci pour votre aide.

VB:
Sub Effacer_feuille_equipe1()
'Effacer l'IT6
Dim plageNoms As Range
Set plageNoms = Range("D29")
Application.DisplayAlerts = False
For Each cell In plageNoms
Sheets(cell.Value).Delete
Next
Application.DisplayAlerts = True
'Effacer le graph de l'IT6
Set plageNoms = Range("F29")
Application.DisplayAlerts = False
For Each cell In plageNoms
Sheets(cell.Value).Delete
Next
Application.DisplayAlerts = True

End Sub
 
Solution
Bonsoir christ77000, sylvanu, fanch55, JM,

En listant les feuilles à supprimer dans un Dictionary :
VB:
Sub Supprimer_feuilles()
Dim plageNoms As Range, d As Object, cel As Range, s As Object
Set plageNoms = Range("D29,F29") 'à adapter
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
'---liste des feuilles à supprimer---
For Each cel In plageNoms
    d(CStr(cel)) = ""
Next
'---suppressions---
Application.DisplayAlerts = False
For Each s In Sheets
    If d.exists(s.Name) And Sheets.Count > 1 Then s.Delete
Next
End Sub
A+

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Christ,
Soit en testant si la feuille existe avant de tenter de la supprimer.

Soit plus bestial en mettant un On Error Resume Next pour sauter la ligne en erreur.
( Le problème c'est que s'il y a une "vrai" erreur elle sera aussi ignorée )
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, chris77000, sylvanu, fanch55

???
Tester ou pas l'existence d'une feuille, chris77000 sait déjà faire, non ?
(Et c'est tout frais )

EDITION: Bonsoir Job75
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir christ77000, sylvanu, fanch55, JM,

En listant les feuilles à supprimer dans un Dictionary :
VB:
Sub Supprimer_feuilles()
Dim plageNoms As Range, d As Object, cel As Range, s As Object
Set plageNoms = Range("D29,F29") 'à adapter
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
'---liste des feuilles à supprimer---
For Each cel In plageNoms
    d(CStr(cel)) = ""
Next
'---suppressions---
Application.DisplayAlerts = False
For Each s In Sheets
    If d.exists(s.Name) And Sheets.Count > 1 Then s.Delete
Next
End Sub
A+
 

christ77000

XLDnaute Occasionnel
Bonsoir et merci à tous,
Staple 1600, si je savais le faire je l'aurais fait moi même. Pour le moment je pompe des codes à droite à gauche. Et j'essai de les comprendre, ce qui n'est pas évident pour un novice. Ca l'ai pour vous je n'en doute pas, mais la ca ne se devine pas ca s'apprend. ce que j'essaie de faire.

job75, je vais tester le code.
"En listant les feuilles à supprimer dans un Dictionary :" c'est quoi !!
 

Staple1600

XLDnaute Barbatruc
Re

•>christ77000
[Précisions]
J'indiquais juste qu'on avait posté dans ton autre discussion des fonctions pour tester si une feuille existe ou pas.
Donc, on pouvait penser que tu réutiliserais ce tu appris dans cette précédente discussion pour la résolution de la question postée ici.
C'est tout ce que voulait dire le message#4
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…