Interdire un double clic sur onglet

netsurf3000

XLDnaute Nouveau
Je veux interdire de changer le nom de la feuille j'ai utilisé ses deux ligne pour empêcher de la renommer mais on peut faire un double clic sur l'onglet et écrire un nouveau nom qu'elle est le code pour interdire un double clic sur l’onglet
Merci.

Application.CommandBars("Ply").FindControl(ID:=889).Enabled = True
Application.CommandBars("Sheet").FindControl(ID:=889).Enabled = True
 

chris

XLDnaute Barbatruc
Re : Interdire un double clic sur onglet

Bonjour

Le changement de nom ne semble pas être un événement.
Le double clic sur une cellule l'est mais pas celui sur l'onglet.

On peut y arriver en stockant le nom de la feuille courante dans une variable lors de l'ouverture du classeur et après un changement de feuille
et en comparant le nom en cours au nom initial avant un changement de feuille et avant l'enregistrement du classeur afin de rétablir le nom initial.

Donc à coder dans le workbook :

Public x

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If y <> x Then ActiveSheet.Name = x
End Sub

Private Sub Workbook_Open()
x = ActiveSheet.Name
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
x = Sh.Name

End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
y = Sh.Name
If y <> x Then Sh.Name = x
End Sub
 

chris

XLDnaute Barbatruc
Bonjour

X est une variable qui prend le nom de l'onglet actif lors de l'ouverture du classeur puis à chaque déplacement d'un onglet à l'autre

Bien mettre le code dans le module ThisWorkbook

Il sert à interdire le renommage d'un onglet...
 

pat66

XLDnaute Impliqué
Re

Ah ok je pensais que cela interdisait le double clic sur l'ensemble de la feuille car je souhaite rester en plein écran malgré double clic sur la bande du haut, d'ailleurs si vous avez une idée, je suis preneur ;)

un grand merci quand même
Patrick
 

patricktoulon

XLDnaute Barbatruc
re
on peut stocker ailleurs qu'une variable
un truc simple
VB:
Private Sub Workbook_Open()
For Each Sh In Worksheets
Sh.CustomProperties(1).Delete
Sh.CustomProperties.Add "nom", Sh.Name
Next
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name <> Sh.CustomProperties(1) Then Sh.Name = Sh.CustomProperties(1)
End Sub
tu peux changer tant que tu veux même a la main le nom d'origine reviendra toujours quand tu changera de sheets

et pour plus de sécurité je l'ajoute a selection change car la selection du nom et bloquante donc obligé de selectionner pour debloquer apres renomage
et a la fermeture a nouveau le control

donc
Code:
Private Sub Workbook_Open()
For Each Sh In Worksheets
Sh.CustomProperties(1).Delete
Sh.CustomProperties.Add "nom", Sh.Name
Next
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each Sh In Worksheets
If Sh.Name <> Sh.CustomProperties(1) Then Sh.Name = Sh.CustomProperties(1)
Next
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name <> Sh.CustomProperties(1) Then Sh.Name = Sh.CustomProperties(1)
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> Sh.CustomProperties(1) Then Sh.Name = Sh.CustomProperties(1)
End Sub

tu peux ajouter le before save comme ça tu est blindé
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
et si ça concerne un ou plusieurs sheets en particulier

Code:
Private Sub Workbook_Open()
    mesheetspastouche = Array("toto", "titi") 'array de nom de sheets a proteger contre la modification de nom ( peut y en avoir qu'un)
    For i = LBound(mesheetspastouche) To UBound(mesheetspastouche)
        With Sheets(mesheetspastouche(i))
            If .CustomProperties.Count > 0 Then .CustomProperties(1).Delete
            .CustomProperties.Add "nom", .Name
        End With
    Next
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    For Each Sh In Worksheets
        If Sh.CustomProperties.Count > 0 Then If Sh.Name <> Sh.CustomProperties(1) Then Sh.Name = Sh.CustomProperties(1)
    Next
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    If Sh.CustomProperties.Count > 0 Then If Sh.Name <> Sh.CustomProperties(1) Then Sh.Name = Sh.CustomProperties(1)
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.CustomProperties.Count > 0 Then If Sh.Name <> Sh.CustomProperties(1) Then Sh.Name = Sh.CustomProperties(1)
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 078
Membres
103 112
dernier inscrit
cuq-laet