OVH Cloud OVH Cloud

Empecher la suppression de certaine feuille

4 réponses
Avatar
Gilgamesh
Bonjour à tous,

j'ai un classeur avec de jouli boutons permettant de créer des feuilles
de résultats (simple collage en valeur de feuille active).

Je voudrais que l'utilisateur puisse supprimer ce qu'il a crée, tout en
évitant les coups de mongols (suppression d'une feuille active).

Je ne maitrise pas trop la commande "contextuelle", alors... un pt'tit
conseil les gens ?


merci

4 réponses

Avatar
bourby
bonjour,

tu peux faire en sorte que ton code qui crée les nouvelles feuilles leur
donne à toutes un nom commençant par un ou des caractères de ton choix
( _ p.ex.).
Ensuite, tu écris une procédure évènementielle qui teste, avant de la
supprimer, si le nom de la feuille commence bien par "_".

Cordialement

Bourby

Gilgamesh wrote:
Bonjour à tous,

j'ai un classeur avec de jouli boutons permettant de créer des feuilles
de résultats (simple collage en valeur de feuille active).

Je voudrais que l'utilisateur puisse supprimer ce qu'il a crée, tout en
évitant les coups de mongols (suppression d'une feuille active).

Je ne maitrise pas trop la commande "contextuelle", alors... un pt'tit
conseil les gens ?


merci


Avatar
michdenis
Bonjour Gilgamesh,

Voici un code de Bill Manville
MVP - Microsoft Excel, Oxford, England

Il ne te reste plus qu'à utiliser les événements Workbook_Open et
Workbook_Close pour gérer la mise en place des macro

Ne pas oublier de modifier dans la procédure "MyDeleteSheet" le
nom des feuilles que tu ne veux pas que l'usager supprime.


Dans le ThisWorkbook
'------------------
Private Sub Workbook_Open()
Setup
End Sub
'------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Restore
End Sub
'------------------

'Tout ce qui suit dans un module Standard
'------------------------------------
Sub Setup()
Dim CB As CommandBar
Dim C As CommandBarControl
For Each CB In Application.CommandBars
Set C = CB.FindControl(ID:„7, recursive:=True)
If Not C Is Nothing Then
C.OnAction = "MyDeleteSheet"
C.State = msoButtonUp ' seems to be checked otherwise
End If
Next
End Sub
'------------------------------------
Sub Restore()
Dim CB As CommandBar
Dim C As CommandBarControl
For Each CB In Application.CommandBars
Set C = CB.FindControl(ID:„7, recursive:=True)
If Not C Is Nothing Then C.OnAction = ""
Next
End Sub

'------------------------------------
Sub MyDeleteSheet()

' refuse to delete sheets Feuil1, Feuil2 or Feuil3 of this workbook
Dim bOK As Boolean
bOK = True
If ActiveWorkbook.Name = ThisWorkbook.Name Then
Select Case ActiveSheet.Name
Case "Feuil1", "Feuil2", "Feuil3"
bOK = False
End Select
End If
If bOK Then
' display own dialog
If MsgBox("Are you sure you want to delete sheet " & _
ActiveSheet.Name, vbYesNo) = vbYes Then
Application.DisplayAlerts = False ' inhibit standard message
ActiveSheet.Delete
Application.DisplayAlerts = True
End If
Else
MsgBox "No, you can't delete this sheet"
End If
End Sub
'------------------------------------


Salutations!


"Gilgamesh" a écrit dans le message de news: %
Bonjour à tous,

j'ai un classeur avec de jouli boutons permettant de créer des feuilles
de résultats (simple collage en valeur de feuille active).

Je voudrais que l'utilisateur puisse supprimer ce qu'il a crée, tout en
évitant les coups de mongols (suppression d'une feuille active).

Je ne maitrise pas trop la commande "contextuelle", alors... un pt'tit
conseil les gens ?


merci
Avatar
Gilgamesh
bourby wrote:
tu peux faire en sorte que ton code qui crée les nouvelles feuilles leur
donne à toutes un nom commençant par un ou des caractères de ton choix
( _ p.ex.).
Ensuite, tu écris une procédure évènementielle qui teste, avant de la
supprimer, si le nom de la feuille commence bien par "_".


merci, effectivement c'est une solution mais ce qui me manquait c'était
précisément la procédure événementielle :)

a+

Avatar
Gilgamesh
michdenis wrote:

Bonjour Gilgamesh,

Voici un code de Bill Manville
MVP - Microsoft Excel, Oxford, England


Ca marche !

et en plus j'apprend des trucs intéressants

Merci Bill et merci michdenis :)