Action supprimer feuille code

o-sixty-o Messages postés 25 Statut Membre -  
eriiic Messages postés 24581 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 ...
Configuration: Windows XP
Internet Explorer 6.0

1 réponse

  1. 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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
      1. wilfried_42 Messages postés 912 Statut Contributeur 245 > eriiic Messages postés 24581 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
      2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281 > 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