Nommer automatiquement une feuille de calcul

Résolu/Fermé
toutsie - 20 nov. 2009 à 10:29
 Toutsie - 21 nov. 2009 à 10:10
Bonjour,
Avec Excel 2007, je souhaiterais que ma feuille de calcul prenne automatiquement le nom de la valeur d'une cellule.
Je m'explique :
J'ai une liste de nom en feuille1.
dans la cellule A1 de chaque feuille suivante (avec un collage avec liaison), apparait un nom de ma liste. Je voudrais pouvoir renommer automatiquement mes feuilles pour qu'elles prennent le nom indiqué en A1...
Merci de m'aider !

2 réponses

pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703
20 nov. 2009 à 12:19
Bonjour,
Par cette procédure :
Alt + F11 ---> une fenêtre Visual Basic s'ouvre
Insertion / modules
Copier / coller ce code :

Sub renommer()
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> Ws.Range("A1") Then
Ws.Name = Ws.Range("A1")
End If
Next Ws
End Sub

Fermer la fenêtre Visual Basic
Alt + F8
cliquer sur renommer puis sur le bouton exécuter.
Et voilà

Pour renommer toutes les feuilles sauf la feuille "index" (ou feuil1 ou autre) : adapter selon votre classeur le nom de la feuille est en gras ci dessous...

Sub renommer()
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = "index" Then
GoTo suite
End If
If Ws.Name <> Ws.Range("A1") Then
Ws.Name = Ws.Range("A1")
End If
suite:
Next Ws
End Sub
1
Merci pour la réponse...MAIS...
ça bug !
je n'y connais rien en visual basic, mais j'ai respecté la procédure, et il me dit "erreur d'exécution 1004"
le bug est sur cette ligne :

Ws.Name = Ws.Range("A1")
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703 > Toutsie
20 nov. 2009 à 15:00
Que contient ta cellule A1? Une formule? une valeur?
Essaie de remplacer :
Ws.Name = Ws.Range("A1")
par :
Ws.Name = Ws.Range("A1").Value
attention, il ne doit pas y avoir en A1 des caractères spéciaux comme / ou autre...
0
Toutsie > pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022
20 nov. 2009 à 15:14
Ca ne fonctionne toujours pas
en A1, j'ai :
=MAJUSCULE(Feuil2!$B$1)
c'est donc un collage avec liaison de mon tableau de la feuille 2

je me rends compte tout à coup que ça fonctionne pour la feuille1 (qui n'a rien à voir) mais que ça bug pour les autres... justement pour les feuilles avec ce lien
0
Toutsie > pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022
20 nov. 2009 à 15:26
j'ai trouvé le problème
mes dernières feuilles de calcul était vide et impossible de renommer 2 fois de la meme façon
donc c'est bon, ça marche !
merci !
tant que j'y suis, j'abuse...
qd je mets ma liste à jour, suis je obligé de retourner ds visual basic pour faire tourner le programme ?
et ne peut on pas créer qqchose pour qu'excel crée une nouvelle feuille automatiquement si j'ajoute un nom à ma liste de départ (feuille2) ?
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703
20 nov. 2009 à 16:31
Je n'avais jamais réalisé ce genre de code avant. Les puristes me pardonneront certainement un jour......
Clic droit sur l'onglet de ta feuille qui contient la liste / visualiser le code.
Copier / coller ce code dans la fenêtre visual basic qui vient de s'ouvrir

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Intersection As Range, Plage As Range
Dim i As Integer
i = Range("A65536").End(xlUp).Row
Set Plage = Range("A1:A" & i)
Set Intersection = Application.Intersect(Target, Plage)
If Intersection Is Nothing Then Exit Sub
On Error Resume Next
Sheets.Add After:=Sheets("Feuil1")
ActiveSheet.Range("A1") = Intersection
ActiveSheet.Name = Intersection
Sheets("Feuil1").Activate
End Sub

Ca fonctionne, tant que l'utilisateur ne fait pas de bêtises...
0
Effectivement, il ne faut pas de fausse manoeuvre !!
Mais ça marche, c'est l'essentiel !
Un grand merci pour le dépannage !
Cordialement,
0