Microsoft 365 Modification du CodeName d'un onglet

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ThierryP

XLDnaute Occasionnel
Bonjour le forum !

J'ai besoin dans certains cas de changer le codename d'une feuille, j'utilise ce code :
VB:
Sub Change_CodeName()
Dim sh As Worksheet

Set sh = ActiveSheet
sh.[_CodeName] = "Feuil1"
End Sub

Ceci fonctionne très bien..... tant qu'on ne l'utilise pas dans un évènement style workbookbeforeclose 🙁🙁
J'ai testé : appel depuis un xlam, pas de souci, appel depuis un module standard, OK mais erreur si je l'exécute quand je ferme mon fichier...
Pouvez-vous me confirmer que c'est bien une limitation d'Excel ? Et si oui, y-a-t-il une astuce pour contourner ça ?

Merci d'avance aux gourous d'Excel qui se pencheront sur mon souci !
 
Solution
Chez moi, j'ai une erreur "Impossible d'entrer en mode Arrêt" sur la ligne Feuil1.[_CodeName] = "Feuil99" 😭😭
Pourtant, j'y croyais ! Je creuse de mon côté, en essayant de passer par vbcomponents, mais ça plante aussi :
VB:
Private Sub Reset_CodeName()
Dim vbProj As Object, vbComp As Object
Dim Code_Name As String
Dim ws As Worksheet

Set ws = ActiveSheet
Code_Name = "Feuil1"
Set vbProj = ThisWorkbook.VBProject
Set vbComp = vbProj.VBComponents(ws.CodeName)
vbComp.Properties("_CodeName") = Code_Name
Set ws = Nothing
Set vbComp = Nothing
End Sub

Merci de te pencher sur mon cas !!!
Il arrive parfois de partir sur des usines à gaz........ Alors qu'il suffit d'un copier / coller de la Feuil3 sur la Feuil1 🙁 🙁 🙁
Désolé de vous avoir...
Bonjour Thierry, Wdog,
Je me pose aussi la même question. 😉

Mais quoi qu'il en soit, j'ai fait un petit essai et cela semble marcher avec :
VB:
Sub Change_CodeName()
Dim sh As Worksheet
Set sh = ActiveSheet
sh.[_CodeName] = "Feuil" & [D5]
sh.Name = "Feuille N° " & [D5]
End Sub

et

Private Sub Workbook_BeforeClose(Cancel As Boolean)
     MsgBox "Attention, ce document va se fermer."
     ActiveWorkbook.Save
End Sub

Je suis sous W10, XL2007, VBA 6.3.
 

Pièces jointes

Bonjour à tous,

Chez moi sur Win 11 Excel 2019 il n'y a pas de problème à la fermeture du fichier ci-joint.

A+
Bonjour wDog66, sylvanu, job75

J'ai deux cas, dans l'un un fichier Excel est créé dynamiquement (les noms des onglets sont susceptibles de changement) et je le traite par macro. Afin d'être sûr de traiter les bons onglets et de ne pas avoir à modifier mon code, je change les codename. Tout se passe bien, la macro s'exécute.
Dans le deuxième cas, j'ai des fichiers d'exercices, tous structurés de manière identique : Feuil1(Titre Exercice), Feuil2(Solution) masquée et Feuil3(Modele) veryhidden.
Et ce que je souhaite faire, c'est qu'à la fermeture du fichier, la Feuil1 soit supprimée, je recopie Feuil3 (et donc elle s'appelle Feuil4) avant Feuil2 et c'est là que je veux changer son codename. Ce qui me permet d'avoir un fichier tout beau tout neuf !
@job75 : effectivement ton fichier fonctionne sans souci chez moi 🤔🤔 et je viens de tester ta macro sur un fichier vierge, ça fonctionne.... Je suis sous W11 et 365.
Du coup, j'ai appliqué ma macro sur un nouveau fichier avec 3 onglets, et ça plante.... Mais je ne vois pas pourquoi, ce qui ne sera sûrement pas votre cas à vous trois donc un petit fichier exemple en PJ !

Merci d'avance,
 

Pièces jointes

Re,
En faisant du pas à pas, on voit que quand vous voulez renommer un CodeName en Feuil1, Feuil1 existe déjà donc ça plante :
1738849205354.png


Lorsque vous supprimez Feuil1, la feuille est supprimée en visuel mais la trace est conservé par XL :

1738850392128.png
 
Dernière édition:
En trichant un peu :
Code:
    ' Modif
    Onglet = Feuil1.Name
    Feuil1.Name = "A détruire"
    Feuil1.[_CodeName] = "Feuil99"
    With Sheets("A détruire")
        .Select
        .Delete
    End With
mais c'est pas sain, peut être serait il mieux de trouver une autre solution.
Chez moi, j'ai une erreur "Impossible d'entrer en mode Arrêt" sur la ligne Feuil1.[_CodeName] = "Feuil99" 😭😭
Pourtant, j'y croyais ! Je creuse de mon côté, en essayant de passer par vbcomponents, mais ça plante aussi :
VB:
Private Sub Reset_CodeName()
Dim vbProj As Object, vbComp As Object
Dim Code_Name As String
Dim ws As Worksheet

Set ws = ActiveSheet
Code_Name = "Feuil1"
Set vbProj = ThisWorkbook.VBProject
Set vbComp = vbProj.VBComponents(ws.CodeName)
vbComp.Properties("_CodeName") = Code_Name
Set ws = Nothing
Set vbComp = Nothing
End Sub

Merci de te pencher sur mon cas !!!
 
Chez moi, j'ai une erreur "Impossible d'entrer en mode Arrêt" sur la ligne Feuil1.[_CodeName] = "Feuil99" 😭😭
Pourtant, j'y croyais ! Je creuse de mon côté, en essayant de passer par vbcomponents, mais ça plante aussi :
VB:
Private Sub Reset_CodeName()
Dim vbProj As Object, vbComp As Object
Dim Code_Name As String
Dim ws As Worksheet

Set ws = ActiveSheet
Code_Name = "Feuil1"
Set vbProj = ThisWorkbook.VBProject
Set vbComp = vbProj.VBComponents(ws.CodeName)
vbComp.Properties("_CodeName") = Code_Name
Set ws = Nothing
Set vbComp = Nothing
End Sub

Merci de te pencher sur mon cas !!!
Il arrive parfois de partir sur des usines à gaz........ Alors qu'il suffit d'un copier / coller de la Feuil3 sur la Feuil1 🙁 🙁 🙁
Désolé de vous avoir fait perdre votre temps....
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour