Feuille Propositions menus midi retrait

Bonjour à toutes et à tous,

Dans la feuille Propositions menus midi retrait, Serait-possible que chaque colonne, ligne Date du menu, se remplisse automatiquement à partir d'une année donnée, sans que j'ai l'obligation de saisir toutes les dates ou, alors saisir uniquement la ligne de la première colonne et la ligne Date du menu de toutes les autres colonnes se rempliront automatiquement, avec une restriction cependant : il ne devra pas y avoir de samedis ni de dimanches. D'autre part, en l'état actuel, certaines dates sont en double. Y aurait-il un moyen de supprimer ces doublons ?

D'avance merci pour votre aide.

Bonnes journée et continuation à toutes et à tous. Prenez bien soin de vous.

18budgets-menus.zip (227.71 Ko)

Cela pourrait se faire sur le modèle du fichier suivant : merci de me rappeler comment il fonctionne (je ne souviens pas de tout, hélas)

Salut BUDGETS,

une façon de faire en VBA, la solution par formule étant fonctionnelle mais... trop longue à implémenter!
La macro démarre au changement d'année, cellule que je renomme [NEWYEAR].
Je ne me suis pas (encore) tracassé de la mention des jours fériés...

        With Worksheets("Propositions menus midi retrait")
            For x = .Columns(1).Find(what:="Date", lookat:=xlPart, LookIn:=xlValues, searchdirection:=xlNext).Row To .Range("A" & Rows.Count).End(xlUp).Row Step 14
                For y = 2 To 8
                    iNb = iNb + 1
                    dDate = DateAdd("d", iNb, DateSerial([NEWYEAR] - 1, 12, 31))
                    iDay = Weekday(dDate, vbMonday)
                    .Cells(x, y) = DateAdd("d", IIf(iDay < 6, 0, 2), dDate)
                    iNb = iNb + IIf(iDay < 6, 0, 2)
                    If iNb >= IIf([NEWYEAR] Mod 4 = 0, 366, 365) Then
                        If [NEWYEAR] Mod 4 = 0 Then
                            .Cells(x, y).Offset(-1, -1).Resize(13, 1).Copy Destination:=.Cells(x - 1, y)
                            .Cells(x - 1, y) = "MMR262"
                            .Cells(x, y) = dDate
                        Else
                            .Cells(x, y).Offset(-1, 1).Resize(13, 1).Clear
                        End If
                        Exit For
                    End If
                Next
            Next
        End With

Euh, bête réflexion, comme ça en passant : ça ne te fatigue pas les yeux toutes ces bordures super épaisses et cette fonte Gras omniprésente?

A+

14budgets-menus.zip (211.56 Ko)

Bonjour Curulis57,

Merci pour ta réponse. Pour être franc, même si cela ne plaît pas à tout le monde, j'avais posé le même problème sur un autre site et j'ai reçu une réponse satisfaisante aussi mais en application, c'est la tienne que je vais retenir car elle évite un tas de formules dans chaque cellule. Pour menus journaliers, pas de problème puisqu'il n'y a aucune restriction. Pour menus viandes midi weekend, je vais reprendre ton code en le modifiant afin que seuls les samedis et les dimanches apparaissent. La restriction pour menus midi retrait se trouve sur cette ligne : iNb = iNb + IIf(iDay < 6, 0, 2) ? Si oui, à quoi correspondent le zéro et le deux qui figurent dans la parenthèse ?.Cells(x, y).Offset(-1, -1).Resize(13, 1).Copy Destination:=.Cells(x - 1, y) à quoi correspond le treize ?
.Cells(x - 1, y) = "MMR262" ) à quoi correspond le 262 ? (nombre de jours de l'année diminué de 104 (samedis + dimanches) ? If iNb >= IIf([NEWYEAR] Mod 4 = 0, 366, 365) Then
If [NEWYEAR] Mod 4 = 0 Then à quoi correspond Mod 4 ?

Dans chaque colonne (B à H incluses), Ligne Référence légume : comment faire pour prédéfinir à LMR ? Même question pour les lignes Référence viande, Quantité viande, Référence dessert, Dessert, Quantité dessert.

Bonjour à tous,

Ah on reconnait bien votre sens du cross-posting !

Cela dit, la solution qui vous a été proposée par formule prends moins d'une minute pour l'implémenter avec le copier/coller formule. Le cahngement d'année se fait en G1 de la feuille Accueil

J'en ai profité pour reprendre également vos autres propositions de menus, pour les menus week-end vos formules existantes étaient erronées si le 1er janvier tombait un dimanche.

Salut BUDGETS, BeGood,

Un peu de patience pour la suite, je chipote sur le visuel de certaines particularités de fin d'année.
Tant que j'y suis, je vais intégrer les fériés dans la boucle.

Pour ceux que ça intéresse, voici une des manières de calculer la date de Pâques.

        'Calcul de la date de Pâques
        iEaster = (19 * ([NEWYEAR] Mod 19) + 24) Mod 30 + ((2 * ([NEWYEAR] Mod 4)) + (4 * ([NEWYEAR] Mod 7)) + (6 * ((19 * ([NEWYEAR] Mod 19) + 24) Mod 30)) + 5) Mod 7
        dEaster = IIf(iEaster < 10, DateSerial([NEWYEAR], 3, iEaster + 22), DateSerial([NEWYEAR], 4, iEaster - 9))

A+

Bonsoir BeGood, Curulis57,

Pour le copier-coller, c'est ce que j'ai fait mais il faut modifier la formule car cela me sort "Valeur" car la cellule précédente se trouve erronée.

Merci de me fournir les réponses aux questions que j'ai posées à Curulis57, à moins que cela fasse partie de "Un peu de patience pour la suite, je chipote sur le visuel de certaines particularités de fin d'année. Tant que j'y suis, je vais intégrer les fériés dans la boucle."

Salut BUDGETS,

exact, je fus appelé pour de hautes tâches ménagères qui ont interrompu la rédaction du message! Déso, hein!

iNb = iNb + IIf(iDay < 6, 0, 2)

C'est la restriction, en effet, enfin, le premier système qui m'est venu à l'esprit.
Si iDay <6 (6 = samedi), alors laisse aller (0) sinon on pousse le curseur de 2 pour passer de samedi à lundi.

Resize(13, 1)

13 : c'est le nombre de lignes d'un bloc.

image

"MMR262"

C'est la suite logique d'un intitulé de colonne.

image

[NEWYEAR] Mod 4

Calcule si une année est bissextile ou (=0) ou pas (=1).

A+

Merci Curulis57 de votre réponse qui est très claire et, en plus visualisée.

Ta formule pour le calcul de la date de Pâques est-elle applicable également pour les autres jours fériés, en la modifiant éventuellement ? Si oui, pourrais-tu la commenter ? Tu es un nouveau contributeur à mes messages. Pour information, je n'ai pas honte de le dire, c'est pour moi un symptôme de sincérité, de franchise, mais je comprends vite mais il faut m'expliquer longtemps d'une part, et je n'ai pas l'esprit de déduction très développé, je dirais même qu'il est nul, d'autre part. Bonne, joyeuse et très longue retraite. C'est mon avis personnel, mais les contributeurs Outre-Quiévrains sont des gens très sympathiques, compétents et patients.

Bonjour à tous,

@BUDGETS

Pour les formules on fait correctement les lignes de dates 3 et 17 , puis on copie/colle formule la ligne 17 sur les autres lignes de dates (17, 31, 45, ...)

Salut BUDGETS,

il n'y a d'algorithme que pour Pâques, fête mobile, dont dépendent la Pentecôte et l'Ascension.
Pas besoin de formules pour les autres fériés qui sont fixes.

Je serais bien incapable de t'expliquer cet algorithme. Je n'ai fait que le traduire en VBA!

A+

ok. Je suis en train de modifier le code de la feuille Accueil de mon fichier pour qu'il corresponde à ta proposition. Je suis, dans la plupart des cas, contre le copier-coller.

Bonnes soirée, nuit et continuation. Prends bien soin de toi.

BUDGETS,

Petites modif', histoire de gérer les fériés et les particularités de certaines fins d'année : exemple en 2028.

        iEaster = (19 * ([NEWYEAR] Mod 19) + 24) Mod 30 + ((2 * ([NEWYEAR] Mod 4)) + (4 * ([NEWYEAR] Mod 7)) + (6 * ((19 * ([NEWYEAR] Mod 19) + 24) Mod 30)) + 5) Mod 7
        dEaster = IIf(iEaster < 10, DateSerial([NEWYEAR], 3, iEaster + 22), DateSerial([NEWYEAR], 4, iEaster - 9))
        With Worksheets("Propositions menus midi retrait")
            For x = .Columns(1).Find(what:="Date", lookat:=xlPart, LookIn:=xlValues, searchdirection:=xlNext).Row To .Range("A" & Rows.Count).End(xlUp).Row Step 14
                .Cells(x + 11, 2).Resize(1, 7).ClearContents
                .Cells(x + 11, 2).Resize(1, 7).Interior.ColorIndex = xlColorIndexNone
                For y = 2 To 8
                    Do
                        iNb = iNb + 1
                        dDate = DateAdd("d", iNb, DateSerial([NEWYEAR] - 1, 12, 31))
                        iDay = Weekday(dDate, vbMonday)
                        If Year(dDate) > [NEWYEAR] Then iDay = 0
                    Loop Until iDay < 6
                    If iDay > 0 Then
                        If y > 2 And .Cells(x - 1, 2) = "MMR260" Then _
                            .Cells(x, y).Offset(-1, 0).Resize(13, 2).Clear: _
                            .Cells(x, y).Offset(-1, -1).Resize(13, 1).Copy Destination:=.Cells(x - 1, y): _
                            .Cells(x - 1, y) = IIf(y = 3, "MMR261", "MMR262")
                        .Cells(x, y) = dDate
                        .Cells(x + 11, y) = _
                            IIf(dDate = DateSerial([NEWYEAR], 1, 1), "Jour de l'An", _
                            IIf(dDate = dEaster + 1, "Lundi de Pâques", _
                            IIf(dDate = dEaster + 50, "Lundi de Pentecôte", _
                            IIf(dDate = dEaster + 39, "Ascension", _
                            IIf(dDate = DateSerial([NEWYEAR], 5, 1), "Fête du travail", _
                            IIf(dDate = DateSerial([NEWYEAR], 5, 8), "Victoire 40-45", _
                            IIf(dDate = DateSerial([NEWYEAR], 7, 14), "Fête nationale", _
                            IIf(dDate = DateSerial([NEWYEAR], 8, 15), "Assomption", _
                            IIf(dDate = DateSerial([NEWYEAR], 11, 1), "Toussaint", _
                            IIf(dDate = DateSerial([NEWYEAR], 11, 11), "Armistice 14-18", _
                            IIf(dDate = DateSerial([NEWYEAR], 12, 25), "Noël", "")))))))))))
                        If .Cells(x + 11, y) <> "" Then .Cells(x + 11, y).Interior.Color = RGB(255, 100, 100)
                    Else
                        .Cells(x, y).Offset(-1, 0).Resize(13, 2).Clear
                        Exit For
                    End If
                Next
            Next
        End With
17budgets-menus.zip (216.47 Ko)

A+

Salut BUDGETS,

je viens d'ajouter ces lignes-ci, après avoir relu les messages précédents, qui complètent les lignes à chaque création d'une nouvelle année.

                .Range("B" & x + 1).Resize(11, 7).ClearContents
                .Range("B" & x + 1).Resize(11, 7).Interior.ColorIndex = xlColorIndexNone
                .Range("B" & x + 1).Resize(1, 7).Value = "LMR"
                .Range("B" & x + 4).Resize(1, 7).Value = "VMR"
                .Range("B" & x + 6).Resize(1, 7).Value = 100
                .Range("B" & x + 7).Resize(1, 7).Value = "DMR01"
                .Range("B" & x + 8).Resize(1, 7).Value = "Pomme"
                .Range("B" & x + 9).Resize(1, 7).Value = 1

J'imagine que cela ne reste pas ainsi toute l'année donc il faudrait que tu expliques comment tu fais varier tes menus au jour le jour!

21budgets-menus.zip (217.10 Ko)

A+

Bonjour Curulis57,

Merci beaucoup pour ces ajouts très intéressants.

Le code de propositions menus midi retrait peut-il être repris, avec les modifications qui s'imposeront, dans la feuille code de la feuille Accueil pour les propositions menus viandes midi weekend, étant entendu que seuls les samedis et les dimanches devront apparaître ?

"J'imagine que cela ne reste pas ainsi toute l'année donc il faudrait que tu expliques comment tu fais varier tes menus au jour le jour!" : la liste des légumes est prise dans le tableau structuré TabLMR : le lundi, par exemple, ce sera le riz, le lendemain ce sera la salade, le surlendemain, ok pour tomates. Excepté pour le maïs et les radis qui sont prévus pour deux jours de suite, tous les légumes LMR sont prévus pour un seul repas. La liste épuisée, on recommence avec les asperges et ainsi de suite. Pour les viandes LMR, une viande est prévue pour la semaine (du lundi au vendredi), sa liste épuisée, on recommence avec le rôti d'agneau. Pour DMR, un seul dessert prévu, pomme de code DMR01. Les feuilles vierges remplies avec les jours sont imprimées puis complétées manuellement puis je les saisis sur mon ordinateur dans le formulaire concerné. J'espère avoir répondu à votre demande.

Si j'ai bien compris votre réponse d'hier, le fait de faire le calcul du jour de Pâques va entraîner automatiquement la date des autres fêtes légales mobiles ou pas.

Selon l'aide de VBA, Mod semble ne pas correspondre à la définition que tu en proposes : toi : calcule si une année est bissextile (=0, c'est-à-dire true) ou pas (=1 donc false);selon l'aide de VBA :

Mod, opérateur

Permet de diviser deux nombres en ne renvoyant que le reste.

Lorsque je le jugerai indispensable, devoir le faire, puisse-je compter sur toi pour m'expliquer une instruction, des chiffres, etc. ? Je pars du principe que faire du copier-coller ne va pas m'éduquer en matière de développement; de ce fait, réécrire le code me sera beaucoup plus profitable même si je ne comprends pas tout.

J'ai commencé à écrire le code sans la feuille Accueil de mon fichier, mais pour l'instant, il y a des erreurs (variable non définie, objet requis, etc.). Je verrai le résultat quand tout le code sera complet.

À la ligne For X, le X se teinte en bleu : incompatibilité de type. Dans ton dernier fichier, je n'ai pas ce problème. Dans ton premierfichier (plus court), x ety sont déclarés, ainsi que z qui, lui, ne semble pas être utilisé.

13budgets-menus.zip (722.88 Ko)

Bonjour à toutes et à tous,

Feuille Propositions menus midi retrait ! ligne 1 : Le titre s'affiche bien et la bordure se fait correctement sans l'intérieur dans les différentes colonnes. Cette première ligne est parfaite.

Toutes les 14 lignes : le titre s'affiche bien mais la bordure est absente.
qui va pouvoir m'aider à résoudre ce problème ? Ensuite, cette absence résolue, je m'attaquerai à remplir les lignes et colonnes suivantes.

D'avance merci pour votre aide. Bonnes fin de journée à toutes età tous. Prenez bien soin de vous. Cordialement.

Le 12 janvier 2025 : pourquoi personne accepte de m'aider ? Je ne suis pasun monstre à fuir !

Bonjour BeGood,

Pensez-vous pouvoir m'aider pour ce qui de l'utilisation d'une table (d'un tableau) unique à quatre colonnes pour afficher le contenu de la table (du tableau) selon un ou deux critères? D'avance merci pour votre réponse.

Bonjour BeGood,

Oui, effectivement, elle est en lien avec cette demande.

Je pense que oui.

Rechercher des sujets similaires à "feuille propositions menus midi retrait"