Action supprimer feuille code

o-sixty-o Messages postés 25 Statut Membre -  
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'aimerai pouvoir dire en code : pendant la période ou mon classeur est ouvert , si on supprime une feuille alor écrire x ds feuil1 . g donc placé mon code dans Worbook.activate car je ne vois pas ou le placer ailleurs..ms ça marche pas !! g testé toute sorte de chose ds worbook.activate avc les points d'arret et ça détecte rien ! comment pourrais-je faire ? c assez urgent il faut absolument que je puiss mettre ce code quelque part et qu'il soit détecté !!
merci ...
A voir également:

1 réponse

wilfried_42 Messages postés 912 Statut Contributeur 245
 
bonjour

une autre option, mais il faut pour savoir si la feuille existe encore, tester son nom avec toutes les autres feuilles

à placer dans ThisWorkBook
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
MsgBox Sh.Name
End Sub

quand tu supprimes une feuille, elle se desactive donc lance automatiquement cette precedure
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonsoir wilfried,

oui, mais l'activation d'une autre feuille déclenche cet évènement...

Comme il n'y a pas d'évènement 'suppression de feuille' à part noter celle qui sont existantes à l'ouverture et pointer ensuite je ne vois pas.
Exemple : Classeur1.xls
Option Explicit
Dim ListeFeuilles(200) As String, nbFeuilles As Long

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim Sh As Worksheet, i As Long, j As Long, k As Long, ok As Boolean
    For i = 1 To nbFeuilles
        ok = False
        For j = 1 To Sheets.Count
            If ListeFeuilles(i) = Sheets(j).Name Then
                ok = True
                Exit For
            End If
        Next j
        If Not ok Then
            k = k + 1
            Cells(k, 1) = ListeFeuilles(i)
        End If
    Next i
    If k > 0 Then Cells(k + 1, 1) = ""
End Sub

Private Sub Workbook_Open()
    Dim Sh As Worksheet, i As Long
    For i = 1 To Sheets.Count
        ListeFeuilles(i) = Sheets(i).Name
    Next i
    nbFeuilles = i - 1
End Sub
Sub Lister()
    Call Workbook_BeforeClose(False)
End Sub


A la fermeture (ou clic sur un bouton) les feuilles ayant été supprimées sont listées en colonne A
(les feuilles crées et supprimées lors de la même session ne sont pas prises en compte)

eric
0
wilfried_42 Messages postés 912 Statut Contributeur 245 > eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention  
 
Bonjour eric

Je sais bien Eric, mais rien n'empêche de tricher lol

aller : en 4 lignes, sans compter les sub et end sub, sans fermer ni ouvrir le classeur
immédiatement apres la destruction de la feuille

code à placer dans ThisWorkBook

Public feuil As String, fc As Integer
Private Sub Workbook_SheetActivate(ByVal sh As Object)
    If ThisWorkbook.Sheets.Count <> fc Then Workbook_SheetDeleted feuil
End Sub

Private Sub Workbook_SheetDeactivate(ByVal sh As Object)
    fc = ThisWorkbook.Sheets.Count
    feuil = sh.Name
End Sub
Private Sub Workbook_SheetDeleted(ByVal sh As String)
    MsgBox "Feuille : " & sh & " Détuite"
End Sub


finalement, faire une interruption sur une suppression de feuille est faisable...

amicalement
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282 > wilfried_42 Messages postés 912 Statut Contributeur
 
Bonjour wilfried,

oh ben c'est futé ça ! Et tellement simple finalement, bravo :-)
A 6h du mat en plus...
Bonne journée
0