Nommer automatiquement une feuille de calcul

Résolu
toutsie -  
 Toutsie -
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 !
Configuration: Windows Vista Internet Explorer 7.0

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. Toutsie
       
      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
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Toutsie
         
        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
      2. Toutsie > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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
      3. Toutsie > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. Toutsie
       
      Effectivement, il ne faut pas de fausse manoeuvre !!
      Mais ça marche, c'est l'essentiel !
      Un grand merci pour le dépannage !
      Cordialement,
      0