Renommer automatiquement les feuillets excel [Résolu/Fermé]

Signaler
Messages postés
7
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
23 juin 2009
-
 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

5 réponses

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
Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
237
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 
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.
Messages postés
907
Date d'inscription
mardi 19 août 2008
Statut
Contributeur
Dernière intervention
8 décembre 2009
237
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 
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