Renommer automatiquement les feuillets excel

Résolu
arsfle Messages postés 8 Statut Membre -  
 Nico -
Bonjour,

je suis actuellement en stage dans un cabinet de comptabilité.
Je suis en train de faire un classeur pour la gestion de la caisse.

J'ai 12 pages qui correspondent aux 12 mois de l'année. Je souhaiterais que les feuilles se renomment automatiquement en fonction du client. J'aurais pu nommer mes feuilles mais je veux qu'elles soient dans l'ordre chronologique pour le client.

Certains ont leur exercice comptable de janvier à décembre, mais d'autres de avril à mars.

sur chaque feuille la case L2 reprend le bon mois dans le bon ordre, cette cellulle peut peut etre servir de base pour le nom des feuillets.

Peut etre que la solution est dans VBA mais je ne connais pas du tout.

Merci de votre aide.

Rémi
Configuration: Windows 2003
Internet Explorer 7.0

5 réponses

  1. Nico
     
    Bonjour

    Si le nom à appliquer à chaque feuille se trouve dans la cellule L2 de chacune, créer une macro :

    Outils
    Macro
    Lui donner un nom : Noms_Feuilles
    Créer

    Copier les lignes ci-dessous à la place des lignes affichées automatiquement :

    Sub Noms_Feuilles()
    For Each sh In Sheets
    sh.Select
    If Range("L2") <> "" Then
    ActiveSheet.Name = Range("L2")
    End If
    Next sh
    End Sub

    fermer Vba

    Quant toutes les feuilles sont prêtes avec leur nom en L2

    Outils
    Macro
    Choisir Noms_Feuilles
    Exécuter
    0
  2. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    Bonjour

    j'ai une petite question quels sont les noms de tes feuilles dans ton fichier modèle, si elles ont deja un nom de mois, on risque d'avoir des problèmes
    de plus, il est nécessaire que dans les autres feuilles il n'y ai rien en L2
    en reprenant la macro de Nico
    Sub Noms_Feuilles() 
          For Each sh In Sheets 
                if sh.Range("L2") <> "" Then sh.name = "Nico" & sh.index
          Next sh
          for each sh in sheets
                if sh.name = "Nico" & sh.index then sh.nam = sh.range("L2")
          next
    End Sub 
    
    0
  3. Nico
     
    Je suis d'accord avec la première partie de ta macro, si des feuilles portent déjà un nom de mois,
    mais je ne comprends pas la suite et ta remarque sur la cellule L2 des autre feuilles.
    0
  4. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    re:

    simplement, qu'il met les mois en L2, si on teste ces mois en testant simplement s'il y a une valeur en L2 : if range("L2")>""
    il ne faudrait pas qu'il y ait des valeur en L2 dans d'autres feuille, sinon le test devra etre fait d'un autre maniere peut etre en traitant l'erreur
    Datevalue("01/" & range("L2") & "/2000") renvoie une erreur si dans L2 il y a autre chose qu'un mois
    Sub Noms_Feuilles()
          For Each sh In Sheets
                on error goto suite
                if isdate(datevalue("01/" & sh.Range("L2") & "/2000"))  Then sh.name = "Nico" & sh.index
    suite:
                on error goto 0
          Next sh
          for each sh in sheets
                if sh.name = "Nico" & sh.index then sh.nam = sh.range("L2")
          next
    End Sub 
    
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Nico
     
    J'avais compris qu'il avait 1 classeur par client et dans chaque classeur, 12 feuilles correspondant aux 12 mois mais rangées différemment suivant le client.
    Dans chacune des feuilles, on trouve en L2 le nom du mois que l'on doit donner à la feuille.
    Dans ma boucle, ma feuille active change à chaque feuille et utilise la valeur 'locale' de L2 et donc aucune confusion possible.
    A moins que j'aie mal compris ce que veut arsfle ?

    Suite à ta remarque sur les feuilles pouvant déjà porter un nom de mois, je modifierait la macro comme suit :

    Sub Noms_Feuilles()
    For Each sh In Sheets
    sh.Select
    ActiveSheet.Name = "Tmp" & ActiveSheet.Name
    Next sh
    For Each sh In Sheets
    sh.Select
    If Range("L2") <> "" Then
    ActiveSheet.Name = Range("L2")
    End If
    Next sh
    End Sub
    0