[VBA] Interdire changer nom feuille excel

Résolu
PPA -  
 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

  1. Info
     
    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
  2. PPA
     
    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
    0
  3. PPA
     
    Mon sujet tombe en désuétude totale... up
    0
  4. Iama Messages postés 324 Statut Membre 14
     
    Bonsoir

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

    cordialement
    Iama
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Info
     
    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
    0
    1. PPA
       
      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
      0
    2. 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.
      0
    3. Nico
       
      Ton code fonctionne au poil .
      Merci!!!
      :)
      0
  7. Info
     
    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
    0
  8. 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
    -1