Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 CODENAME = nom de la feuille

N3li0r

XLDnaute Nouveau
Bonjour à tous,

Sur un projet, je me rend compte que en copiant à partir d'un modèle les feuilles ( avec une macro) , le codename est renommé en itération.
Par exemple le nom du modèle est " mod_", tout les codename des feuilles seront: mod_1, mod_2, mod_3, etc.

Je m'interroge sur le fait de pouvoir forcer le codename pour quil reprenne le nom de la feuille.

J'ai regardé par-ci par-là.
J'ai testé ActiveSheet.CodeName mais j'obtiens rien.
J'ai testé à l'ouverture du classeur : Worksheet.CodeName = Worksheet.name => pas de résultat.

Quelqu’un aurait une idée ?
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour changez le nom d'un composant VBA installé par l'application hôte ou non, utilisez les objets de la bibliothèque VBIDE, référence Microsoft Visual Basic for Application Extensibility 5.3
Leur utilisation requiert une approbation de l'accès au modèle d'objet du projet VBA.
 

Dranreb

XLDnaute Barbatruc
Très intéressant. J'ignorais totalement. J'ai en effet pu exécuter ça :
VB:
Sub Test()
   Dim Wsh As Worksheet
   Set Wsh = Worksheets(1)
   MsgBox Wsh.[_CodeName]
   Wsh.[_CodeName] = "WshToto"
   MsgBox Wsh.[_CodeName]
   End Sub
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Modèle :
Feuil1.[_CodeName]="toto"

Sheets("NomFeuille").[_CodeName] = "Toto"
ou
ActiveSheet.[_CodeName] = "toto"
ne fonctionneront pas

Attention, ce sont des manipulations délicates, qui peuvent faire planter votre fichier.
Faites des sauvegardes.

En faisant appel à VBProject :
VB:
Sub ChangeActiveSheetCodeName()
    Dim Nom As String
    Nom = ActiveSheet.Name
    With ThisWorkbook
        .VBProject.VBComponents(.Sheets(Nom).CodeName).Name = Nom
    End With
End Sub

L'accès approuvé au modèle objet du projet vba doit être coché dans le centre de gestion de la confidentialité/ Paramètres des macros
 

N3li0r

XLDnaute Nouveau
Merci dranreb et kiki29.
J'ai effectuer de la façon suivante sur chaque feuille:

VB:
Private Sub Worksheet_Activate()

  Dim Wsh As Worksheet
 
   Range("G2").Value = ActiveSheet.Name

   Set Wsh = ActiveSheet
        MsgBox Wsh.[_CodeName]
   Wsh.[_CodeName] = Range("G2").Value
        MsgBox Wsh.[_CodeName]

End Sub

Alors cela alourdi avec 80 feuilles par exemple et ce n'est pas optimale
.
J'imagine que le mieux serait d'intégrer ça dans " Thisworkbook" à l'ouverture et de vérifier si codename = WorkSheet.Name.

Code:
Private Sub Workbook_Open()

   Dim Wsh As Worksheet
 
  If
      Wsh.[_CodeName] =     Wsh.Name Then
        Exitsub
    Else
           Set Wsh = Worksheets(1)
           Wsh.[_CodeName] = Range("G2")
    Enf If
  
    Range("G2").Value = WorkSheet.Name
  
End Sub

Qu'en pensez-vous?
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Dans la Sub Workbook_Open vous pourriez traiter toutes les feuilles, non ? :
VB:
Option Explicit
Private Sub Workbook_Open()
   Dim Wsh As Worksheet, NomObj As String
   For Each Wsh In Me.Worksheets
      NomObj = Replace(WorksheetFunction.Proper("wsh " & Wsh.Name), " ", "")
      On Error Resume Next
      Wsh.[_CodeName] = NomObj
      If Err Then MsgBox "L'objet Worksheet """ & Wsh.CodeName & """ ne peut être renommé """ _
         & NomObj & """. ==> Err." & Err _
         & vbLf & Err.Description & vbLf & "Remarque :  cet objet représente la feuille """ & Wsh.Name & """."
       On Error GoTo 0
       Next Wsh
   End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…