Renommer automatiquement les feuillets excel
Résolu
arsfle
Messages postés
8
Statut
Membre
-
Nico -
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
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
A voir également:
- Renommer toutes les feuilles d'un classeur excel
- Liste déroulante excel - Guide
- Renommer des fichiers en masse - Guide
- Word et excel gratuit - Guide
- Trier un tableau excel - Guide
- Imprimer un classeur excel sur mac - Guide
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
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
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
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.
mais je ne comprends pas la suite et ta remarque sur la cellule L2 des autre feuilles.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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