Action supprimer feuille code

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 ...
Configuration: Windows XP
Internet Explorer 6.0

1 réponse

  1. Contributeur
    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
    1. Contributeur
      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
    2. Contributeur
      @eriiicBonjour 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
    3. Contributeur
      @wilfried_42Bonjour wilfried,

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