Action supprimer feuille code

Fermé
o-sixty-o Messages postés 25 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 6 novembre 2008 - 6 nov. 2008 à 14:09
eriiic Messages postés 24513 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 mars 2023 - 7 nov. 2008 à 07:37
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 ...

1 réponse

wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 240
6 nov. 2008 à 16:17
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 24513 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 mars 2023 7 168
6 nov. 2008 à 21:50
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 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 240 > eriiic Messages postés 24513 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 mars 2023
7 nov. 2008 à 06:06
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 24513 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 mars 2023 7 168 > wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009
7 nov. 2008 à 07:37
Bonjour wilfried,

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