[VBA] Interdire changer nom feuille excel
Résolu/Fermé
A voir également:
- [VBA] Interdire changer nom feuille excel
- Changer dns - Guide
- Liste déroulante excel - Guide
- Piratage facebook changer mot de passe - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Changer nom twitter - 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
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
23 févr. 2011 à 17:48
23 févr. 2011 à 17:48
Bonsoir
Dommage, je le suivai de loin pour connaitre les solution ou les infos
cordialement
Iama
Dommage, je le suivai de loin pour connaitre les solution ou les infos
cordialement
Iama
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