[VBA] Interdire changer nom feuille excel [Résolu/Fermé]

Signaler
-
 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

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 :
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
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

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
Mon sujet tombe en désuétude totale... up
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
Bonsoir

Dommage, je le suivai de loin pour connaitre les solution ou les infos

cordialement
Iama
re:

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
Merci pour tes réponses Info.
Je vais tester ça de suite.
Je sais qu'il y a moyen de gérer l'évènement clic droit dans le menu contextuel, faut que je retrouve ça sur le net et je mettrai le code associé.

Cordialement,

PPA
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.
Ton code fonctionne au poil .
Merci!!!
:)
re:

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 :

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