Nom de l'onglet
Bonsoir le forum
j'ai une page de réglage sur mon fichier que les gens doivent remplir. je souhaiterai que les onglets du fichier se renomme automatiquement quand on renseigne certaines cellules.
je ne sais pas trop comment faire : une formule toute bête ou une macro
bonne soirée
Bonsoir
Une petite macro à placer dans le code de la feuille concernée
Ne traite que la modification de la cellule G5
En plus une petite vérification des caractères non autorisés
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Interdit As String
Dim I As Integer
Interdit = "&:/\?*[]" & Chr(34)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Range("G5"), Target) Is Nothing Then
If Target <> "" Then
For I = 1 To Len(Interdit)
If InStr(Target, Mid(Interdit, I, 1)) > 0 Then
MsgBox "Carctère interdit " & vbCr & vbCr & Mid(Interdit, I, 1) & vbCr & vbCr
Exit Sub
End If
Next I
ActiveSheet.Name = Range("G5")
End If
End If
End SubMerci Banzai64 de ta réponse.
je profite de ce post pour un autre question : j'ai deux onglets => un pour la gestion de la course et un deuxième pour l'édition des résultats (classement individuel, par équipe ...) mes deux onglets correspondent à la même course.
ex "course 1" => comment faire pour que mon premier onglet s'appelle "course 1" (ça, c'est bon) et que le deuxième s'appelle "résultat course 1" en gardant le principe de la modification automatique d'une seule cellule ?
en fait, ma question est : comment ajouter dans le code que tu m'as donnée un texte à ajouter avant la cellule concernée pour éviter d'avoir deux fois le même nom d'onglet, qu'Excel n'accepte pas.
merci d'avance.
EDIT : j'ai résolu moi-même, j'ai concaténer deux cellules pour obtenir ce que je voulais !
merci encore.
-- 16 Juin 2011, 10:19 --
Je comprend mieux ton premier message quand tu disais que cela ne fonctionne que sur la modification de la cellule G5 de la feuille concernée.
comment faire pour que le nom des onglets se modifient à partir des modifications apportées à la page de réglages
pour l'instant, j'ai fait une copie de cellule (ex réglages!A1) de la page réglage vers la feuille concernée (ex : G5 = Réglages!A1) et attribué le nom de l'onglet à la cellule. cela fonctionne bien quand je valide la cellule G5, mais quand je modifie la cellule A1 de ma page de réglages, cela ne modifie pas le nomde mes onglets, je dois de nouveau valider la cellule G5.
j'ai essayé en insérant dans le code un appel direct à ma page de réglages mais cela ne fonctionne pas non plus.
Merci de votre aide
Bonjour
Pourquoi ne pas faire la modification de ta page lors de la modification de ta cellule A1 de la page réglages
Cela implique que l'ordre des pages est important, ou alors travailler avec le codename de la feuille
Option Explicit
'
' Code à coller dans le code de la page Réglages
'
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Interdit As String
Dim I As Integer
Interdit = "&:/\?*[]" & Chr(34)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Range("A1"), Target) Is Nothing Then
If Target <> "" Then
For I = 1 To Len(Interdit)
If InStr(Target, Mid(Interdit, I, 1)) > 0 Then
MsgBox "Caractère interdit " & vbCr & vbCr & Mid(Interdit, I, 1) & vbCr & vbCr
Exit Sub
End If
Next I
'
' Avec le Codename
'
'Feuil3.Name = Range("A1")
'
' Avec la position de la page
'
Sheets(3).Name = Range("A1")
End If
End If
End Submerci Banzai64 pour ta réponse qui fonctionne parfaitement !
je fais mon boulet
j'ai essayé de copier / coller le code mais il me génère une erreur de compilation car il retrouve le même nom : Private Sub Worksheet_Change(ByVal Target As Range)
merci de m'éclairer.
bonne soirée
edit : j'arrive à faire deux cellules et deux onglets mais pas la suite ...
Option Explicit
'
' Code à coller dans le code de la page Réglages
'
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Interdit As String
Dim I As Integer
Interdit = "&:/\?*[]" & Chr(34)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Range("B3", "C3"), Target) Is Nothing Then
If Target <> "" Then
For I = 1 To Len(Interdit)
If InStr(Target, Mid(Interdit, I, 1)) > 0 Then
MsgBox "Caractère interdit " & vbCr & vbCr & Mid(Interdit, I, 1) & vbCr & vbCr
Exit Sub
End If
Next I
'
' Avec le Codename
'
'Feuil3.Name = Range("A1")
'
' Avec la position de la page
'
Sheets(5).Name = Range("B3")
Sheets(7).Name = Range("C3")
End If
End If
End Subcomment augmenter encore le nombre de cellules et d'onglets concernés par ce code ?
merci
Bonsoir
Une méthode
Tu dis
Colonne A : Feuille 1
Colonne B : Feuille 2
Colonne C : Feuille 3
etc....
Comme il n'y a qu'un changement de cellule à la fois tu ne renommes qu'une feuille à la fois
Sinon il faut envisager un autre code
Option Explicit
'
' Code à coller dans le code de la page Réglages
'
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Interdit As String
Dim I As Integer
Interdit = "&:/\?*[]" & Chr(34)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Range("B3", "C3"), Target) Is Nothing Then
If Target <> "" Then
If Target.Column > Sheets.Count Then
MsgBox "Impossible de renommer une page inexistante"
Exit Sub
End If
For I = 1 To Len(Interdit)
If InStr(Target, Mid(Interdit, I, 1)) > 0 Then
MsgBox "Caractère interdit " & vbCr & vbCr & Mid(Interdit, I, 1) & vbCr & vbCr
Exit Sub
End If
Next I
'
' Avec la position de la page
'
On Error Resume Next
Sheets(Target.Column).Name = Target
If Err.Number > 0 Then
MsgBox "Une page avec le même nom existe déjà"
End If
End If
End If
End SubQuelques garde-fous en prime
Merci Banzai64 pour ton code très efficace, notamment avec les garde-fous !
j'ai bien compris le principe => col A renomme mon premier onglet, col B mon 2ème ... etc !
sauf que c'est le "etc" qui me pose problème =>
mon code pour deux onglets :
If Not Intersect(Range("B3", "C3"), Target) Is Nothing Thenmon code pour trois, dix ... onglets :
:?: :?: :?: :?: :?: :?: :?: merci de ton temps et de ta patience.
bonne soirée
Bonsoir
Tu peux mettre (Range("A3:H3"),Target)
Ce qui te donnera 8 feuilles
Nota: La ligne 3 n'est pas primordiale, si tu veux passer par une autre ligne tu peux faire
(Range("A4828:H4828"),Target)
Bien sur il faudra saisir les infos dans la ligne 4828
Aussi si dans cette page tu n'as rien d'autre que la saisie des noms des pages, tu peux t'affranchir du test
If Not Intersect(Range("B3", "C3"), Target) Is Nothing ThenCela sera la colonne qui donnera le numéro de la page
Bonsoir,
Merci beaucoup Banzai64.
bonne soirée et @bientot