J'ai un bouton qui déclenche une chaîne d'événements. L'un de ces événements consiste à supprimer une feuille. Avant que l'utilisateur ne supprime quoi que ce soit, j'affiche mon message OUI/NON personnalisé pour lui demander de confirmer l'ensemble du processus.
Vient ensuite le sous-événement de suppression de la feuille, et Excel ouvre sa propre fenêtre pour confirmer la suppression de la feuille. Le problème est que si l'utilisateur dit "non" à ce stade, cela met mon application dans un état incohérent.
Comment puis-je contourner Excel demandant de confirmer la suppression d'une feuille?
Vous pouvez modifier le paramètre d'alerte d'affichage par défaut d'Excel en utilisant:
Application.DisplayAlerts = False
n'oubliez pas de restaurer le comportement standard à la fin de votre processus:
Application.DisplayAlerts = True
POUR SUPPRIMER TOUTES LES FEUILLES SANS LA FEUILLE "RAPPORT" **
Dim NM As String
Dim CTS As Integer
Dim CNT2 As Integer
Dim CNT3 As Integer
CNT3 = 1
CNT2 = 1
CTS = Sheets.Count
Do Until CNT2 = CTS + 1
NM = Sheets(CNT3).Name
If Name = "Report" Then
Range("A1").Select
CNT3 = CNT3 + 1
Else
Sheets(NM).Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End If
CNT2 = CNT2 + 1
Loop
J'ai rencontré ce problème en utilisant Excel 2016 et, étonnamment, DisplayAlerts était inutile. Je ne sais pas si quelqu'un d'autre a vécu cela. Je ne sais toujours pas pourquoi, mais lire ceci thread , selon les remarques de la méthode Worksheet.Delete ( ici ):
Lorsque vous supprimez une feuille de calcul, cette méthode affiche une boîte de dialogue qui invite l'utilisateur à confirmer la suppression . Cette boîte de dialogue s'affiche par défaut. Lorsqu'elle est appelée sur l'objet Worksheet, la méthode Delete renvoie une valeur booléenne qui est False si l'utilisateur a cliqué sur Annuler dans la boîte de dialogue ou True si l'utilisateur a cliqué sur Supprimer.
Dans Excel 2016, bien que Application.DisplayAlerts était défini sur False, il continuait à afficher l'alerte après (ou plutôt avant) la suppression.
Je n'ai pas encore trouvé de véritable solution, donc je fais simplement disparaître les feuilles que je veux supprimer en utilisant un for each
boucle:
Sht.UsedRange.clear For each shp in sht.Shapes shp.Delete Next For each nm in sht.Parent.Names if nm.RefersToRange.Parent is sht then nm.Delete Next sht.visible = xlSheetVeryHidden
(le code est un brouillon non contrôlé; les erreurs éventuelles peuvent être traitées avec un on error resume next
la plupart)
C'est loin d'être idéal, mais il fait ce que je dois faire (au prix de plus de mémoire, bien sûr). Je devrais peut-être transformer cette réponse en question et voir si quelqu'un a une meilleure idée d'Excel 2016.