Dupliquer une feuille Excel sur 252 feuilles en les nommant automatiquement
Bonjour,
J'aimerais savoir s'il est possible du dupliquer une feuille excel sur autant de jour que j'ai besoin (au minimum 250 feuilles)
Par exemple j'aurais besoin d'avoir une feuille par jour à compter du 20 mars 2025 au 24 novembre 2025
et si possible de nommer directement les feuilles comme suit (actuellement nous dupliquons une à une les feuilles et les nommons une à une) :
- J 20-03 pour Jeudi 20 mars - V 21-03 pour Vendredi 21 mars et ainsi de suite
A l'intérieur de chaque feuille j'ai aussi une cellule contenant la date de la feuille et j'aurais besoin que cette date se mette automatiquement à jour au cours de la duplication si c'est la feuille du 20 mars par exemple.
Je demande juste si cela est possible via macro ou non et comment... excel à surement ses limites !
je précise que dans mes feuilles il y a beaucoup de formules et de mises en formes conditionnelles.
MERCI d'avance pour l'aide que vous voudrez bien m'apporter à ce sujet "complexe".
Bonjour
Un fichier de plus de 250 onglets est très difficile à manipuler
Ce n'est pas une bonne approche. D'autant que la limite du nombre de feuilles est aléatoire : lié à la mémoire dispo à l'instant T de l'ouverture du classeur.
Quel est l’utilité d'une feuille journalière ? Elle servent à quoi ? elles sont en lien entre elles ?
Bonsoir,
sans prendre en considération la possibilité et autre, je vous propose ce code, avec celui qui permet de supprimer :
Sub Creation()
' s'il y a plus de deux feuilles on quitte
If Sheets.Count > 2 Then Exit Sub
' on arrête la mise à jour de l'écran
Application.ScreenUpdating = False
' on compte le nombre de jour entre les deux dates
Combien = DateDiff("d", CDate(Range("B1")), CDate(Range("B2")))
' on lance une boucle correspondant à ce nombre de jour
For i = 0 To Combien
' on prend la feuille source que l'on copie après la dernière feuille du classeur
Sheets("Source").Copy After:=Sheets(Worksheets.Count)
' on crée la lettre du jour
lejour = Left(UCase(Format(CDate(Sheets(1).Range("B1")) + i, "dddd")), 1)
' on crée la date
ladate = Format(CDate(Sheets(1).Range("B1")) + i, "DD-MM")
' on renome la feuille avec l'assemblage du jour et de la date
' à la place de l'espace je met un "_" qui facilite la gestion des noms de feuilles dans les formules
' cela évite de rajouter des apostrophes !
ActiveSheet.Name = lejour & "_" & ladate
' on inscrit la date en cellule A1
ActiveSheet.Range("A1") = CDate(Sheets(1).Range("B1")) + i
Next i
' on active la feuille système
Sheets(1).Activate
End Sub
Sub Supprime()
' on stope l'affichage des alertes
Application.DisplayAlerts = False
' on boucle sur les feuilles du classeur
For Each ws In Worksheets
' si l'index est supérieur à 2 alors on la supprime
If ws.Index > 2 Then ws.Delete
Next
' on remet en place les alertes
Application.DisplayAlerts = True
End SubLe fichier de démonstration :
J'ai mis en téléchargement un fichier de suivi de qualification de personnel avec des fiches qui pouvaient comporter plusieurs dizaines de lignes, sans compter les colonnes de calculs intermédiaires, et les mise en formes qui allaient avec. Et ce pour plus de 150 personnels.
Après comme le dit 78chris, il y a peut-être une structure à repenser suivant votre projet "final".
@ bientôt
LouReeD
Hello,
je suis d'accord avec 78chris, ça ne me semble pas une bonne idée, dupliquer une feuille chaque jour n'est pas un travail trop pénible
Mais bon, voici une macro qui fera le job
Option Explicit
Sub Dupliquer_Feuille()
' *** a adapter ***
Const Nom_Feuille_1 As String = "Feuil1" ' Nom de la feuille à dupliquer
Const Cellule_Date As String = "A1" ' adresse de la cellule contenant la date
Const Date_Début As Date = #10/29/2024# ' les dates sont au format mm/jj/aaa
Const Date_Fin As Date = #11/24/2024#
' *** a adapter ***
Dim Date_Feuille As Date
Dim Nom_Feuille_X As String
Dim Feuille_X As Worksheet
Application.ScreenUpdating = False
' Boucle pour créer autant de copies de la feuille de base que de différence entre les 2 dates
For Date_Feuille = Date_Début To Date_Fin
' Copier la feuille de base à la fin des feuilles existantes
Sheets(Nom_Feuille_1).Copy After:=Sheets(Sheets.Count)
' Génère le nom de la feuille
Nom_Feuille_X = UCase(Left(Format(Date_Feuille, "ddd"), 1)) & " " & Format(Date_Feuille, "dd-mm")
' Nommer la nouvelle feuille
Set Feuille_X = Sheets(Sheets.Count)
Feuille_X.Name = Nom_Feuille_X
' Insérer la date dans la cellule Cellule_Date de la nouvelle feuille
Feuille_X.Range(Cellule_Date).Value = Date_Feuille
Next Date_Feuille
Application.ScreenUpdating = False
End SubBonjour à toutes et tous
Je ne sais pas si le sujet est toujours d'actualité, mais je propose une adaptation d'un classeur que j'ai fait il y a déjà un moment.
On pourrait faire un classeur par jour,
Il faut une feuille modèle "Model" dans le classeur proposé qui créé une arborescence Année en cours suivi de douze dossiers (un par mois) et un classeur par jour.(par copie de l'onglet modèle) sans les W.E ni les fériés.
Les dossiers sont créés sur le bureau; il faut donc enregistrer mon exemple avant de lancer le code.
Chez moi, cela dure de 35 à 45 secondes.
Cordialement
Je vous remercie tous pour vos retours. Je vais essayer les macros et solutions que vous m'avez apporté.
Je travaille dans un hôtel et malheureusement notre logiciel de base n'est pas un logiciel hôtelier et pour parer ce manque nous travaillons encore avec des fichiers excel auxquelles je tente d'apporter des améliorations petit à petit.
nous avons 2 fichiers excel :
- un pour gérer les réservations du restaurant (interne 25 chambres et externe) sur notre saison d'ouverture donc autant de jour allant du 20 mars au 23 nov environ
- un pour gérer les réservations de chambre (25 chambres ) allant également du 20 mars au 23 nov
et nous devons donc dupliquer les feuilles chaque année et effectivement c'est très lourd comme fonctionnement
C'est donc à ce jour c'est la meilleure option que nous avons pour gérer le tout
Mais je suis ouverte à toutes suggestions de fonctionnement plus pratique
Bonjour
Fichier amélioré....
Si tu joins une feuille journalière on peut faire le même principe
une base de donnée et quand on clic sur une date la feuille du jour....
A+ François
Bonjour,
dans le même ordre d'idée vous avez la rubrique téléchargement du site qui peut vous orienter vers des solutions "clé en main"
C'est ici.
Et il y a mon application "Gestion chambres d'hôtel" téléchargée plus de 21000 fois, reste à voir si ce sont 21000 "satisfait" !
@ bientôt
LouReeD