Bonsoir à tous,
Ce que j'ai compris :
A chaque création de feuille, Excel leur attribue un codename par défaut (qui est aussi le nom d'onglet à la création).
L'utilisateur peut par la suite modifier le nom d'onglet de chaque feuille.
Ce qu'on désire c'est que chaque feuille reprenne comme nom d'onglet son codename.
Si c'est cela, on peut arriver à une situation de blocage où chaque fois qu'on veut renommer une feuille F avec son codename une autre feuille F' a déjà pour nom d'onglet le codename de F. C'est pourquoi le code est un peu plus complexe. Le code fonctionne bien sûr aussi avec les situations non bloquées.
Le fichier contient une situation de blocage.
Code dans module1 (le code est commenté) :
Sub NomOngletEstCodename()
Dim x, indX, indCodeName
On Error Resume Next
For Each x In Worksheets
indX = x.Index ' index de la feuille traitée
'recherche de l'index d'une feuille dont l'onglet serait égal au codename de la feuille x
indCodeName = -1: indCodeName = Worksheets(x.CodeName).Index
' Plusieurs cas
If indCodeName = -1 Then ' pas d'onglet déjà nommé comme le codename de x
x.Name = x.CodeName ' on peut donc renommer x comme son codename
ElseIf indX = indCodeName Then
' le nom de x est déja le codename mais on renomme qaand même pour avoir la bonne casse du codename
x.Name = x.CodeName
Else
' une feuille différente de x a pour nom d'onglet le codename de x
' on ne peut donc pas renommer directement x comme une feuille déjà existante
' on renomme d'abord la feuille qui a comme nom le codename de x avec un autre nom peu probable
Worksheets(indCodeName).Name = Left(Rnd * (10 ^ 10), 10)
x.Name = x.CodeName
End If
Next x
On Error GoTo 0
End Sub