Renommer feuille automatiquement
Bonjour à toutes et tous,
Je fais appel à vos lumières pour changer automatiquement le nom de certains onglets.
J'ai une feuille "Paramètres" ou il y a le nom des feuille que je souhaite donner. J'aimerai que le nom se change automatiquement dès que je saisie ou modifie le nom dans l'onglet "Paramètres". J'ai fait une macro pour le changement de nom, et je pensais qu'en faisant référence à la feuille paramètres cela fonctionnerai, mais non!
je souhaite ainsi changer que les onglet de couleur pastel.
De plus je souhaite pouvoir mettre ce bout de code permettant d'éviter les erreurs de nommage!
If newName = "" Then
MsgBox "Le champ du nom est vide"
Exit Sub
ElseIf Len(newName) > 31 Then
MsgBox "Le nom dépasse 31 caractères"
Exit Sub
ElseIf newName Like "*[\/?*[ou]*" Then
MsgBox "Le nom contient des caractères non autorisés"
Exit Sub
End IfEn pièce jointe le fichier.
Merci de votre aide.
Bonjour,
Voici ci-joint un exemple. J'ai essayé d'être le plus exhaustif possible dans les risques d'erreur potentielle mais j'en ai peut-être oublié.
Pour info je ne suis pas sur que votre Like fasse ce que vous voulez. Pouvez-vous décrire les caractères recherchés ?
Ci-après le code :
[Feuille paramètres]
Private ancienNom As String
Private Sub Worksheet_Change(ByVal Target As Range)
' on vérifie qu'on modifie la colonne b
If Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub
' qu'une seule cellule est modifiee
If Target.Count > 1 Then Exit Sub
' et que la cellule est non nulle
If Target.Value2 = vbNullString Then Exit Sub
Application.EnableEvents = False
Dim wksht As Worksheet
For Each wksht In ThisWorkbook.Worksheets
If wksht.Name = ancienNom Then
If Not RenommerOnglet(wksht, Target.Value2) Then
' si le renommage echoue, on remet l'ancien nom dans la cellule
Target.Value2 = ancienNom
End If
Exit For
End If
Next wksht
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub
If Target.Value2 = vbNullString Then Exit Sub
ancienNom = Target.Value2
End Sub[Module1]
Option Explicit
Public Function RenommerOnglet(onglet As Worksheet, nvNom As String) As Boolean
' verification que le nom est valide
If Not VerifierNom(nvNom) Then
RenommerOnglet = False
Exit Function
End If
' verification que le nom n'est pas deja pris
Dim wksht As Worksheet
For Each wksht In ThisWorkbook.Worksheets
If wksht.Name = nvNom Then
MsgBox "Le nom [" & nvNom & "] est déjà utilisé !"
RenommerOnglet = False
Exit Function
End If
Next wksht
' verification que l'onglet est colore
' pour verifier exactement la couleur : onglet.tab.color = 11389944
If onglet.Tab.Color Then
onglet.Name = nvNom
RenommerOnglet = True
End If
End Function
Public Function VerifierNom(nom As String) As Boolean
VerifierNom = True
If nom = "" Then
MsgBox "Le champ du nom est vide"
VerifierNom = False
ElseIf Len(nom) > 31 Then
MsgBox "Le nom dépasse 31 caractères"
VerifierNom = False
ElseIf nom Like "*[\/?*[ou]*" Then
MsgBox "Le nom contient des caractères non autorisés"
VerifierNom = False
End If
End FunctionMerci beaucoup Saboh12617 pour ton aide.
Je passe la discussion en "résolu".
Bonne soirée