Création nouvel onglet date à la suite
Bonjour à tous,
Je possède un fichier Excel que j'utilise au travail pour y remplir les données relatives à l'activité de l'entrepôt, principalement des volumes de commandes à traiter et à préparer par jour par préparateur.
Il se présente comme ceci:
Comme vous pouvez le voir en bas, je m'embête à créer un nouvel onglet pour chaque semaine de l'année, et j'y rempli manuellement le numéro de semaine et la date de chaque jour de la semaine.
Ma question est la suivante:
Existe t-il un moyen de dupliquer mes onglets de manière à ce que le numéro de semaine et la date de chaque jour se remplissent automatiquement ?
L'objectif est de créer rapidement tous mes onglets pour l'année 2023 !
Merci d'avance à tous et bonne journée !
Thomas
Bonjour Thomasmb2023,
Pas de fichier joint ... Si tous tes onglets ont exactement la même structure et que les dates se calculent à partir d'une cellule de l'onglet, c'est très simple avec un peu de code VBA.
Bonjour,
Merci pour votre réponse, je glisse le fichier joint.
Savez où je peux trouver un tuto ou de l'aide pour réaliser le code BVA, je suis novice total !
Merci bcp
Thomas
Mais ici ! sur ce site ! dans le menu "Cours VBA"
Bonsoir Thomasmb2023,
En pièce jointe, une proposition. J'ai ajouté un onglet "Navigation", il comporte un bouton "Créer les feuilles par semaine". La macro se base sur la dernière feuille du classeur (donc elle doit toujours être une feuille de semaine) pour créer dans l'ordre chronologique les feuilles des semaines suivantes. L'onglet "Navigation" est mis à jour des feuilles créées et te permet via le lien hypertexte d'aller directement sur la feuille de la semaine concernée.
J'ai modifié la feuille "S22" pour calculer automatiquement le n° de la semaine à partir du lundi et j'ai ajouté en haut à gauche une flèche retour avec un lien qui te renvoi vers la feuille navigation. Si la feuille navigation ne t'intéresse pas, je la supprimerai sans souci.
En l'utilisant en cours d'année, la feuille navigation demandera quelques retouches manuelles si tu veux y inclure les semaines déjà créées. Par contre, il faudra que la dernière semaine du classeur soit basée sur le modèle "S22" du présent classeur. Pour une nouvelle année, il faudra juste que tu inities la feuille "S01" de la 1ère semaine de l'année.
N'hésites pas si tu as besoin de plus amples infos.
Wow c'est impressionnant ce que vous avez fait !!! Ca répond parfaitement à ce que je souhaitais c'est super.
Merci sincèrement pour votre aide !
Thomas
Bonjour,
Merci pour ce sympathique retour mais si vous vous mettez au VBA, avec un peu de pratique vous verrez vite que cela n'a rien d'impressionnant
Cylfo
Je vais essayer mais je pars de 0, je vais déjà essayer d'appliquer ce code sur mon fichier de base que j'utilise au quotidien et qui lui a déjà une 15zaine d'onglets semaine de créés..
Re Bonjour,
J'ai tenté d'adapter le code à mes besoins mais je n'y arrive pas..
J'aimerais pouvoir appliquer le code que vous m'avez proposé en partant de la semaine 15, le truc c'est que j'ai du faire deux onglets (S14 et S15) car ma semaine 15 est liée à me semaine 14.
J'ai mis en surbrillance ROUGE sur le lundi de la semaine 15, les liens avec la semaine 14. En fait, les volumes "prev" du lundi dans les secteurs SEC SURG FRAIS s'adaptent en fonction de l'avance qu'on a fait la veille le dimanche. Par exemple pour le lundi de la semaine 15, j'ai 5593 colis de sec à préparer, mais vu que j'en ai fait d'avance la veille le dimanche, ma case "prev" s'adapte et en réalité je n'ai plus que 1803 colis à faire.
J'aimerais bien pouvoir appliquer le code que vous m'avez proposé tout en gardant ce lien entre le lundi S+1 et le dimanche S en cours.
Pensez vous pouvoir m'aider ?
Merci d'avance
Thomas
Bonjour Thomas,
Pour récupérer les valeurs de la semaine précédente, il es possible d'utiliser la fonction INDIRECT() qui transforme une chaine de caractères en référence et qui, dans le cas présent, retournera la valeur de la cellule =F4+SIERREUR(INDIRECT("'S" & TEXTE(D1-1;"00")&"'!BZ63");0)
A partir de la cellule D1, on calcule la semaine précédente (D1 - 1) que l'on formate sur 2 caractère numériques que l'on accole avec 'S à gauche et '!BZ63 à droite (ou autre adresse de cellule), ce qui nous fait une référence texte que la fonction INDIRECT transforme en vrai référence et qui nous retourne la valeur contenue dans la cellule indiquée. Le SIERREUR permet en cas d'erreur (la feuille précédente n'existe pas) de renvoyer 0 et pas une valeur d'erreur. J'ai mis les formules sur la feuille S15.
J'ai modifié la feuille S14 pour mettre le n° de semaine en formule, idem sur la feuille 15 (modifications indispensables) et sur celle-ci j'ai également changé la date du lundi 3 au 10 (sinon la macro plante car elle ajoute 7 à la date du lundi 3 et tente de recréer une feuille S15 ...).
Reste en suspens, la 1ère semaine de l'année car si les 3 formules sont liées à un classeur précédent, elles seront recopiées dans les semaines suivantes ... Il est possible de modifier la macro pour systématiquement mettre la formule "INDIRECT" dans les 3 cellules concernées. Dites moi comment vous voyez les choses et si vous voulez que je modifie.
ATTENTION : la feuille S15 contient des données qui sont recopiées dans les feuilles 16 à 52 et qui se cumulent de semaine en semaine ...
Et bien ma foi c'est parfait.
J'ai réussi à ajuster comme je le souhaitais c'est super.
Merci pour votre aide précieuse qui va grandement me simplifier la vie !
Merci encore et bonne continuation.
Thomas
Ok
Ne perds pas de vue le point en suspens car la question se posera forcément lorsque tu referas le fichier pour une nouvelle année.
Bonjour à tous !
Je me permets de relancer le sujet car en effet, j'ai voulu reprendre le fichier proposé par Cylfo pour l'année 2024.
J'ai donc créer ma semaine 1 et ma semaine 2 "à la main", puis j'ai appliqué la macro (je sais pas si ça s'appelle vraiment comme ça) pour créer automatiquement un onglet par semaine jusqu'à la fin de l'année. Cette fonctionnalité fonctionne bien, mais j'ai quand même un soucis.
Dans les colonnes "SEC" et "SURG", j'applique une formule le lundi, qui est censé actualiser le nombre de colis restants réellement à produire en fonction de l'avance ou du retard pris la veille, le dimanche. Ce chiffre dois s'ajouter ou se soustraire au total à préparer pour la journée du dimanche.
Cette formule se situe en case F6 au sec ,et I6 au SURG. Je l'ai donc écrite pour la semaine 2, en fonction de ce qu'il me restait à produire le dimanche soir en semaine 1.
Le problème c'est que quand j'applique la macro pour créer les onglets de toute l'année, j'ai l'impression cette formule reste basée sur les chiffres du dimanche soir de la première semaine, alors que je voudrais qu'elle s'applique chaque semaine par rapport au dimanche de la semaine précédente.
Par exemple, on peut voir que de la semaine 1 vers la semaine 2, il me reste 2010 colis de surg à faire le dimanche soir (case CC63 de la semaine 1), ces 2010 colis viennent s'additionner au lundi de la semaine 2 (case I6 de la semaine 6 --> 8488 colis de prévu + les 2010 restant à faire la veille = les 10497 en réel).
Par contre de la semaine 2 vers la 3, c'est à dire la première semaine générée avec la macro, et bien le chiffre n'est pas bon car je finis ma semaine 2 à 0 colis le dimanche soir, pourtant le lundi de la S3, il m'annonce 8488 + 2010 = 10497 colis à faire, alors que ne devrait avoir que 8488 en case I6 car je finis à 0 la veille).
Comment faire en sorte que la macro se base sur la semaine précédente, et pas sur la semaine une ?
J'espère que je suis clair, pouvez vous m'aider ?
Merci d'avance !
Thomas
Je suppose qu'il faut remplacer le '1' dans la formule par "onglet précédent" mais je ne sais pas comment faire :/
Bonjour Thomas,
Les feuilles doivent se nommer "S1" et "S2" mais pas "1" et "2". Pour la feuille "S2". Les formules de reprise des données du mois précédent doivent utiliser la fonction INDIRECT, voir [F6] et [I6] de la feuille "S2" du fichier joint et ma réponse ci-dessous en date du "16/03/2023 à 16:43".
J'ai retouché la macro en considérant qu'elle sera maintenant utilisée pour le changement d'année (contrairement au fichier précédent qui démarrait en cours d'année) et que le classeur contiendra les feuilles des 2ères semaines de l'année et l'onglet navigation les 2ers liens.
Cdlt,
Cylfo
Bonsoir Cylfo,
Merci encore une fois pour cette efficacité. J'avais repris votre message du 16/03/2023 à 16:43 concernant la fonction INDIRECT.
J'ai réussi à obtenir un résultat satisfaisant mais ma formule ne se présente pas exactement comme la votre, pensez vous que j'aurais des soucis à termes avec la mienne ?
j'ai mis ça: =INDIRECT(STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;99)-1&"!CC63")+I4
Elle parait beaucoup plus compliqué et pour être honnête je l'ai copié d'un forum internet sans vraiment comprendre ce que je faisais, et j'ai vraiment galérer !
En tous cas merci bcp, je vais essayer de comprendre la votre qui me semble beaucoup plus simple !
Cordialement,
Bonjour,
ATTENTION : Je vous joins une nouvelle version car je viens de me rendre compte que les formules pour accéder à la feuille de la semaine précédente comportaient une erreur ...TEXTE(D1-1;"00")... eu lieu de ...TEXTE(D1-1;"0")... .
Explication sur la base de l'exemple de la formule en [F6] de la feuille "S2" : =F4+SIERREUR(INDIRECT("'S" & TEXTE(D1-1;"0")&"'!BZ63");0)
SIERREUR(INDIRECT("'S" & TEXTE(D1-1;"0")&"'!BZ63");0)
..............................................TEXTE(D1-1;"0") => D1 = n° de la semaine de la feuille (dans l'exemple "S2"), D1 - 1 = n° de la semaine précédente,
..............................................TEXTE(D1-1;"0") formate le n° de la semaine précédente sur 2 position TEXTE(D1-1;"0"),
..............................................dans l'exemple = TEXTE(2-1;"0") = "1"
...................................."'S" & TEXTE(D1-1;"0")&"'!BZ63" => crée une référence texte à la cellule [BZ63] de la feuille de la semaine précédente = "'S" & "1"&"'!BZ63"
..............................................................................................= "'S1'!BZ63" (c'est peu visible mais dans la formule ' est accolée à " à gauche du S et à gauche du !)
.................INDIRECT(<valeur texte>) => retourne la valeur de la référence passé en paramètre = INDIRECT("'S1'!BZ63") retourne la valeur de
...................................................................la cellule [BZ63] de la feuille "S1"
SIERREUR(<expression>;0) => retourne 0 si l'expression retourne une valeur d'erreur ou le résultat de l'expression si celle-ci ne retourne pas une valeur d'erreur.
Cela évite d'avoir des valeurs d'erreur dans la cellule.
F4+SIERREUR(INDIRECT("'S" & TEXTE(D1-1;"0")&"'!BZ63");0) = additionne la cellule [F4] de la feuille (dans l'exemple "S2") avec la cellule BZ63 de la feuille correspondant à la semaine précédente (dans l'exemple "S1") si la feuille existe sinon additionne 0.
Je vous confirme que cette formule est plus simple
Je n'ai pas bien compris le fichier que vous avez renvoyé ... le code VB n'est pas le bon et l'onglet "Navigation" n'est pas correctement initialisé.
Cdlt,
Cylfo
Merci pour les explications je vais essayer de comprendre tout ça.
Le fichier ne semble pas correct car j'ai du couper une partie pour que le site l'accepte (sinon trop lourd).
Pour l'onglet navigation en effet il commence qu'à la semaine 3, certainement car j'ai créer les deux premières semaines manuellement..
Merci beaucoup
Cdlt
Ma remarque ne portait sur le fait que le fichier soit tronqué des feuilles mais surtout sur le fait que code VBA n'est pas le bon ...
Je l'ai un tout petit modifié en effet pour enlever le fait que le code nom les onglets "S" 1/2/3/4... car la formule que j'ai trouvé ne fonctionnait pas avec en renommant les onglets "S", sinon j'ai touché à rien !