[VBA] Interdire changer nom feuille excel
Résolu
PPA
-
Nico -
Nico -
Bonjour,
Je voudrais savoir s'il était possible d'empécher tout renommage de feuille dans excel.
Si oui, cela peut-il s'appliquer sur certaines feuilles et non sur toutes ?
Cordialement,
PPA
Je voudrais savoir s'il était possible d'empécher tout renommage de feuille dans excel.
Si oui, cela peut-il s'appliquer sur certaines feuilles et non sur toutes ?
Cordialement,
PPA
A voir également:
- [VBA] Interdire changer nom feuille excel
- Changer dns - Guide
- Liste déroulante excel - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Changer nom iphone - Guide
- Word et excel gratuit - Guide
7 réponses
Bonsoir,
Dans votre code VBA, plutôt que d'utiliser la propriété [ Name ],
utiliser la propriété [ CodeName ].
Ainsi même si le nom de la feuille est modifier par l'utilisateur,
le [ CodeName ] reste inchangé.
Vous pouvez ainsi toujours trouver la bonne feuille.
Exemple Type :
Lancer cette procédure, changer le nom d'une feuille et relancer
la procédure.
Pour la suppression, je n'ai pas encore d'idée.
Une bonne nuit de sommeil pourra peut-être m'inspirer :-)
Cdt
Info
Dans votre code VBA, plutôt que d'utiliser la propriété [ Name ],
utiliser la propriété [ CodeName ].
Ainsi même si le nom de la feuille est modifier par l'utilisateur,
le [ CodeName ] reste inchangé.
Vous pouvez ainsi toujours trouver la bonne feuille.
Exemple Type :
Sub Recherche()
Dim ws As Worksheet
Dim strTexte As String
For Each ws In Worksheets
strTexte = strTexte & ws.Name & vbLf
strTexte = strTexte & ws.CodeName & vbLf
strTexte = strTexte & ws.Index & vbLf & vbLf
Next ws
MsgBox strTexte
End Sub
'
Lancer cette procédure, changer le nom d'une feuille et relancer
la procédure.
Pour la suppression, je n'ai pas encore d'idée.
Une bonne nuit de sommeil pourra peut-être m'inspirer :-)
Cdt
Info
Je vais essayer d'étayer ma requête.
J'ai plusieurs macro ajoutant des feuilles dans mon classeur.
Ces macros dépendent de données qui sont présentes dans 4 autres feuilles du classeur.
1- Si le nom d'une de ces 4 feuille change, la macro ne pourra s'éxécuter car elle ne trouvera pas la feuille.
2- Si une de ces 4 feuille est supprimée, la macro ne pourra s'éxécuter car elle ne trouvera pas la feuille.
1- La réponse serait surement dans les index. Comment la propriété index d'une feuille fonctionne ? En changeant une feuille de place, l'index de cette feuille ne va-t-il pas changer ?
2- Comment empécher la suppression de ces 4 feuilles ?
De plus, toutes modifications, suppressions sur les autres feuilles nouvellement créées (autre que les 4 indispensables) par les macros devra être possible.
Cordialement,
PPA
J'ai plusieurs macro ajoutant des feuilles dans mon classeur.
Ces macros dépendent de données qui sont présentes dans 4 autres feuilles du classeur.
1- Si le nom d'une de ces 4 feuille change, la macro ne pourra s'éxécuter car elle ne trouvera pas la feuille.
2- Si une de ces 4 feuille est supprimée, la macro ne pourra s'éxécuter car elle ne trouvera pas la feuille.
1- La réponse serait surement dans les index. Comment la propriété index d'une feuille fonctionne ? En changeant une feuille de place, l'index de cette feuille ne va-t-il pas changer ?
2- Comment empécher la suppression de ces 4 feuilles ?
De plus, toutes modifications, suppressions sur les autres feuilles nouvellement créées (autre que les 4 indispensables) par les macros devra être possible.
Cordialement,
PPA
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
re:
Une partie de la solution pour la suppression :
Placer ce code derrière chaque feuille qui ne doit pas être supprimer.
Ces procédures "active/désactive" l'option
du menu principal [ Supprimer une feuille ].
Reste a trouver l'option de suppression quand on clic/droit
sur le nom de la feuille dans le menu contextuel.
Cdt
Info
Une partie de la solution pour la suppression :
Placer ce code derrière chaque feuille qui ne doit pas être supprimer.
Option Explicit
Private Sub Worksheet_Activate()
Dim OptionMenu As Object
Dim ctrlMenu As Object
Dim MenuItem As Object
Set OptionMenu = CommandBars(1).Controls
Set ctrlMenu = OptionMenu("Edition")
For Each MenuItem In ctrlMenu.Controls
If (MenuItem.ID = 847) Then
MenuItem.Enabled = False
Exit For
End If
Next MenuItem
End Sub
'
Private Sub Worksheet_Deactivate()
Dim OptionMenu As Object
Dim ctrlMenu As Object
Dim MenuItem As Object
Set OptionMenu = CommandBars(1).Controls
Set ctrlMenu = OptionMenu("Edition")
For Each MenuItem In ctrlMenu.Controls
If (MenuItem.ID = 847) Then
MenuItem.Enabled = True
Exit For
End If
Next MenuItem
End Sub
'
Ces procédures "active/désactive" l'option
du menu principal [ Supprimer une feuille ].
Reste a trouver l'option de suppression quand on clic/droit
sur le nom de la feuille dans le menu contextuel.
Cdt
Info
C'est bon j'ai trouvé.
A METTRE DANS THISWORKBOOK
Private Sub Workbook_Open()
call ActionSuppression
End Sub
A METTRE DANS UN MODULE
Sub ActionSuppression()
Dim c As CommandBarControl
For Each c In Application.CommandBars.FindControls(ID:=847)
c.OnAction = "Suppression"
Next c
End Sub
Sub Suppression()
'UNE CONDITION
MsgBox "Vous ne pouvez pas supprimer cette feuille", vbOKOnly, "INFORMATION"
'Affiche un message au lieu de supprimer
'AUTRE CONDITION
ActiveSheet.Delete 'supprime si possible
End Sub
Cordialement,
PPA
Lien https://support.microsoft.com/en-us pour connaitre la liste des ID de microsoft sur les controles.
A METTRE DANS THISWORKBOOK
Private Sub Workbook_Open()
call ActionSuppression
End Sub
A METTRE DANS UN MODULE
Sub ActionSuppression()
Dim c As CommandBarControl
For Each c In Application.CommandBars.FindControls(ID:=847)
c.OnAction = "Suppression"
Next c
End Sub
Sub Suppression()
'UNE CONDITION
MsgBox "Vous ne pouvez pas supprimer cette feuille", vbOKOnly, "INFORMATION"
'Affiche un message au lieu de supprimer
'AUTRE CONDITION
ActiveSheet.Delete 'supprime si possible
End Sub
Cordialement,
PPA
Lien https://support.microsoft.com/en-us pour connaitre la liste des ID de microsoft sur les controles.
re:
J'ai été trop vite dans la réécriture de la procédure !
Désolé.
Cdt
Info
J'ai été trop vite dans la réécriture de la procédure !
Désolé.
Sub Suppression()
Dim ws As Worksheet
For Each ws In Worksheets
'UNE CONDITION
If ((ws.CodeName <> "Feuil1") And (ws.CodeName <> "Feuil3")) Then
ActiveSheet.Delete
Exit For
Else
'Affiche un message au lieu de supprimer
MsgBox "Vous ne pouvez pas supprimer cette feuille", vbOKOnly, "INFORMATION"
Exit For
End If
Next ws
End Sub
'
Cdt
Info
re :
J'ai testé votre code et il ne fonctionne pas en Excel2003.
j'ai du transformé la procédure de supression ainsi :
Cdt
Info
J'ai testé votre code et il ne fonctionne pas en Excel2003.
j'ai du transformé la procédure de supression ainsi :
Sub Suppression()
Dim ws As Worksheet
'UNE CONDITION
MsgBox "Vous ne pouvez pas supprimer cette feuille", vbOKOnly, "INFORMATION"
'Affiche un message au lieu de supprimer
For Each ws In Worksheets
If ((ws.CodeName <> "Feuil1") And (ws.CodeName <> "Feuil3")) Then
ActiveSheet.Delete
End If
Next ws
End Sub
'
Cdt
Info