Période légumes vendredi samedi

Edit; Laissez tomber, je vais essayer de trouver une autre solution car, je m'aperçois que la façon dont est construite la base de données, ça ne marchera pas à tous les coups. Patientez.
Pensez-vous pouvoir me proposer un projet pour la les premiers jours de décembre 2023 ? D'avance merci pour votre réponse.
Pensez-vous pouvoir me proposer un projet pour la les premiers jours de décembre 2023
Mais, votre fichier pour 2023 n'est -il pas abouti? Comment avez-vous fait jusqu'à présent?

J'ai ouvert celui qui est mis à disposition, et je constate qu'il n'est pas structuré de la même façon que celui de 2024, donc que faut-il faire?

Je vais être très occupé les jours à venir, donc je ne serai pas toujours suffisamment disponible pour essayer de vous apporter mon aide, j'essaierai cependant de me pencher au mieux sur le problème, dans la mesure du possible.

Par contre, il faut me mettre sur la voie sur ce que vous attendez en retour.

Je vous l'ai signalé à maintes reprises que les deux fichiers n'étaient pas structurés de la même façon : c'est un contributeur d'un autre site qui m'avait proposé de travailler sur le nom plutôt que sur le code, ce que j'ai accepté volontiers. Par la suite, il a décidé unilatéralement de cesser poursuivre, à mon grand dam.

Que faut-il faire ? Je souhaiterais parvenir aux mêmes résultats, avec les mêmes obligations, restrictions, etc. dans mon fichier 2024.

Par contre, il faut me mettre sur la voie sur ce que vous attendez en retour. voir ligne précédente.

J'ai complété le programme avec les instructions de tbDateMenu_Change, cbNomDessert_Change et Function IndiceArticle. J'ai créé un menu du samedi. En P1, dans la feuille Accueil, il met FAUX. Pour la case 6, qu'il y ait ou pas sheets ("Accueil"), ne change rien : toujours faux.

Si vous avez un fichier complet, avec toutes les modifications que vous avez effectuées, merci de me le faire parvenir. Je le testerai et regarderai ce qui est non identique entre les deux fichiers.

En attendant que vous puissiez travailler sur la réforme du programme, merci de voir les erreurs du fichier actuel afin que je les corrige et que je puisse créer mes menus journaliers.

4menus-2024-smp.zip (378.77 Ko)

Moi je suis perdu sur la marche à suivre car, n'étant pas à l'origine du projet, il me faut essayer de comprendre comment cela fonctionne simplement en analysant le code. Avouez que ce n'est pas simple.

Le problème pour moi, est de comprendre lors de la saisie de la date par exemple le vendredi 5 janvier, en MJ, qu'est-ce qui va déterminer si le légume à afficher fait partie de la période du "lundi à vendredi midis", du" lundi à vendredi soir", du "vendredi soir" ou encore du "lundis à dimanche soirs", j'ai 4 possibilités sous les yeux, laquelle de ces possibilités doit être retenue, car toutes les 4 englobent le vendredi? A chaque question que vous posez, ça en soulève d'autres.

Dans le formulaire, ne faudrait-il pas une combobox supplémentaire à côté de la date pour choisir "manuellement" l'une de ces 4 options? cela agirait comme un filtre, c'est une supposition.

À partir de la date du menu, à mon avis, tout est indiqué dans la procédure tbDateMenu_Change, à partir de JourSemaine = Weekday(tbDateMenu.Value, vbMonday) pour choisir la liste des légumes puis, à partir de ce choix, il recherche ledit légume dans la BDArticlesMenus, je pense que c'est ainsi.

Et pour mon faux en P1, avez-vous trouvé l'éventuelle erreur ?

À partir de la date du menu, à mon avis, tout est indiqué dans la procédure tbDateMenu_Change, à partir de JourSemaine = Weekday(tbDateMenu.Value, vbMonday) pour choisir la liste des légumes puis, à partir de ce choix, il recherche ledit légume dans la BDArticlesMenus, je pense que c'est ainsi.
Certainement
, mais alors pourquoi ça ne marche pas?

Je n'ai pas vraiment le temps de regarder ce soir ni demain, donc patientez un peu.

ok

Bonjour,

Me voilà de retour et un peu plus disponible.

Au risque de vous paraître un peu lourd, j'aimerai qu'on reprenne le problème d'un peu plus loin. Je commence à m'imprégner modérément du fonctionnement de l'appli.

Ce que je comprends, lors de la saisie dans "cbNomNatureCréationMenu", si on choisit par exemple: "MJ", et que la date "tbDateMenu" est le 5 janvier 2024, l'outil va voir dans la "BD menus" si cette date est présente, si c'est le cas, le formulaire doit se remplir avec tout ce qui est présent dans la base, si au contraire, la date n'existe pas, alors il va chercher dans "BD articles menus" et doit remonter dans le formulaire la liste de tous les articles qui correspondent à "MJ".

Partant de là, il faut choisir un des articles et en fonction de ce choix, on fait remonter le code qui lui est attribué or, et c'est là qu'il y a problème et, comme j'ai déjà eu l'occasion de l'écrire, il n'y a pas suffisamment d'éléments pour faire le bon choix. Il faudrait une combobox supplémentaire dans le formulaire pour sélectionner "Nom nature articles menus", ce qui permettrait de pointer directement sur le bon article.

Bonjour Arturo83,

En gros, c'est bien cela. Si la date existe (que ce soit Menus midi retraite, journalier ou viandes midi weekend), alors je dois avoir le message m'informant que ce menu existe déjà et ce que je veux faire. Dans le cas contraire, le menu doit être créé.

"Il faudrait une combobox supplémentaire dans le formulaire pour sélectionner "Nom nature articles menus", ce qui permettrait de pointer directement sur le bon article." : si cela règle définitivement le problème, je suis d'accord. Si vous le souhaitez et si vous voulez bien, faites-moi un programme approprié afin que je ouisse le tester.

Bonjour,

A force d'essayer de vouloir résoudre le problème, je me suis dis que le code déjà existant était très bien fait et que ce n'était pas possible que l'auteur n'ait pas pensé à faire ce que je voulais faire de mon côté.

Avec autant de variables dans le code et beaucoup de similitudes entre elles dans leurs appellations, j'ai fini par me mélanger les pinceaux et ne cherchait pas dans les bonnes bases de données.

En conclusion, tout ce que j'ai fait jusqu'à présent est, soit faux, soit inutile. Désolé, il me faut tout reprendre depuis le début.

Bonjour Arturo83,

C'est très louable de votre part de reconnaître que vous estimez que vous avez fait des propositions fausses ou inutiles. Vous terminez en disant que vous devez reprendre tout depuis le début. Je vous en remercie d'avance. Sauf impossibilités absolues et irréductibles, le programme devrait me donner le résultat tel qu'il figure dans les feuilles BD articles menus, Menus midi retraite, menus journaliers et menu viande midi weekend du fichier MENUS 2023 d'une part, et toujours contenir les diverses prédéfinitions spécifiques, les restrictions de saisie selon le jour de la semaine (menu midi retraite, menu viande midi weekend), les saisie de maïs et Radis, etc. d'autre part.

Pour 2024, j'ai fait mes saisies à partir du fichier MENUS 2023. Donc vous avez jusqu'au lundi 30 septembre 2024 pour me faire autant de propositions que vous souhaitez afin que je puisse les tester et donner ou pas mon accord.

Bonjour à tous,

Pour 2024, j'ai fait mes saisies à partir du fichier MENUS 2023

Il est possible d'en voir le résultat ?

vous avez jusqu'au lundi 30 septembre 2024

Vous demandiez pourtant une proposition pour début décembre ?

Bonjour BeGood,

Le fichier incomplet (il me reste à créer les menus journaliers et les menus viande midi weekend).

Comme Arturo83 semble vouloir recommencer tout d'une part, et que je me sers du fichier MENUS 2023.xlsm pour créer mes menus 2024 d'autre part, il m'a semblé honnête et responsable de lui donner du temps pour me proposer un nouveau programme.

Bonjour,

Bon, je suis reparti du début, en fait ce que j'avais analysé auparavant, n'était pas faux mais il fallait passer par une étape intermédiaire.

Donc, il faut:

-dans un premier temps, suivant le jour, chercher l'article dans la feuille "Listes" et le tableau concerné, et récupérer le code de cet article.

-puis, dans un second temps, aller dans la feuille "Bd articles menus", rechercher ce code dans la colonne "Code nom articles menus", qui renverra sa position dans le tableau. Partant de là, le programme continu son cycle normalement.

En clair et pour simplifier, il faut chercher l'article dans une base de données spécifique (dans feuille "Listes") liée à la nature de création menu "MJ" et en fonction du jour de la semaine, ce qui retourne le code de l'article, puis avec ce code , on le recherche dans "TabBDArticlesMenus", qui donnera sa position, et à partir de cette position, les autres cellules du formulaires se rempliront.

Je n'ai traité que la partie "légumes", me dire déjà si ça vous convient.

La fonction modifiée est celle-ci:

Private Function IndiceArticle(ByVal NomArticle As String) As Long
    Dim Coderecherche As String, Chiff As Byte
    Dim plageRecherche1, plageRecherche2
    Dim PositionIndiceArticle As Long

    If NomArticle = cbNomLégumeDeux.Value Then
        Coderecherche = tbCodeNomLégumeDeux.Value
        For Chiff = 0 To 9
            Coderecherche = Replace(Coderecherche, Chiff, "")
        Next Chiff
        IndiceArticle = MATCH2(Range("TabBDArticlesmenus[Code nom nature articles menus]"), Coderecherche, Range("TabBDArticlesMenus[Nom articles menus]"), NomArticle)
    Else
    'Worksheetfunction.match : Renvoie la position relative d'un élément dans une matrice (matrice : permet de créer des formules uniques permettant d’obtenir plusieurs résultats
    'et qui agissent sur un groupe d’arguments répartis dans des lignes et des colonnes. Une plage matricielle partage une même formule tandis qu’une constante matricielle est
    'un groupe de constantes qui sert d’argument.), qui correspond à une valeur spécifiée dans un ordre spécifié. Utilisez la fonction MATCH au lieu de l'une des fonctions
    'LOOKUP lorsque vous avez besoin de la position d'un élément dans une plage au lieu de l'élément proprement dit.
        'cbnomnaturecréationmenu.
        If cbNomNatureCréationMenu = "Menu journalier" And NomArticle = "Pomme" Then
            IndiceArticle = WorksheetFunction.Match("Dessert soir", Range("TabBDArticlesMenus[Nom nature articles menus]"), 0)
        Else
            Select Case tbJour
                Case Is = "samedi"
                    'IndiceArticle = WorksheetFunction.Match(NomArticle, Range("TabLégumesWeekendSamedi[Nom légumes weekend samedi]"), 0)
                    '1)- on récupère le code dans "TabLégumesWeekendSamedi"
                    Set plageRecherche1 = Sheets("Listes").ListObjects("TabLégumesWeekendSamedi").ListColumns("Nom légumes weekend samedi").DataBodyRange
                    PositionIndiceArticle = Application.WorksheetFunction.Match(cbNomLégume, plageRecherche1, 0)
                    If PositionIndiceArticle > 0 Then tbCodeNomLégume = plageRecherche1.Offset(0, 1).Cells(PositionIndiceArticle, 1).Value
                    '2)- recherche du code dans "TabBDArticlesMenus"
                    Set plageRecherche2 = Sheets("BD articles menus").ListObjects("TabBDArticlesMenus").ListColumns("Code nom articles menus").DataBodyRange
                    IndiceArticle = WorksheetFunction.Match(tbCodeNomLégume, plageRecherche2, 0)

                Case Is = "dimanche"
                    'IndiceArticle = WorksheetFunction.Match(NomArticle, Range("TabLégumesWeekendSamedi[Nom légumes weekend samedi]"), 0)
                    '1)- on récupère le code dans "TabLégumesWeekendSamedi"
                    Set plageRecherche1 = Sheets("Listes").ListObjects("TabLégumesWeekendDimanche").ListColumns("Nom légumes weekend dimanche").DataBodyRange
                    PositionIndiceArticle = Application.WorksheetFunction.Match(cbNomLégume, plageRecherche1, 0)
                    If PositionIndiceArticle > 0 Then tbCodeNomLégume = plageRecherche1.Offset(0, 1).Cells(PositionIndiceArticle, 1).Value
                    '2)- recherche du code dans "TabBDArticlesMenus"
                    Set plageRecherche2 = Sheets("BD articles menus").ListObjects("TabBDArticlesMenus").ListColumns("Code nom articles menus").DataBodyRange
                    IndiceArticle = WorksheetFunction.Match(tbCodeNomLégume, plageRecherche2, 0)

                Case Is = "lundi", "mardi"
                    'IndiceArticle = WorksheetFunction.Match(NomArticle, Range("TabLégumesWeekendSamedi[Nom légumes weekend samedi]"), 0)
                    '1)- on récupère le code dans "TabLégumesWeekendSamedi"
                    Set plageRecherche1 = Sheets("Listes").ListObjects("TabLégumesSoirsLundiMardi").ListColumns("Nom légumes soirs lundi mardi").DataBodyRange
                    PositionIndiceArticle = Application.WorksheetFunction.Match(cbNomLégume, plageRecherche1, 0)
                    If PositionIndiceArticle > 0 Then tbCodeNomLégume = plageRecherche1.Offset(0, 1).Cells(PositionIndiceArticle, 1).Value
                    '2)- recherche du code dans "TabBDArticlesMenus"
                    Set plageRecherche2 = Sheets("BD articles menus").ListObjects("TabBDArticlesMenus").ListColumns("Code nom articles menus").DataBodyRange
                    IndiceArticle = WorksheetFunction.Match(tbCodeNomLégume, plageRecherche2, 0)

                Case Is = "mercredi", "jeudi"
                    'IndiceArticle = WorksheetFunction.Match(NomArticle, Range("TabLégumesWeekendSamedi[Nom légumes weekend samedi]"), 0)
                    '1)- on récupère le code dans "TabLégumesWeekendSamedi"
                    Set plageRecherche1 = Sheets("Listes").ListObjects("TabLégumesSoirsMercrediJeudi").ListColumns("Nom légumes soirs mercredi jeudi").DataBodyRange
                    PositionIndiceArticle = Application.WorksheetFunction.Match(cbNomLégume, plageRecherche1, 0)
                    If PositionIndiceArticle > 0 Then tbCodeNomLégume = plageRecherche1.Offset(0, 1).Cells(PositionIndiceArticle, 1).Value
                    '2)- recherche du code dans "TabBDArticlesMenus"
                    Set plageRecherche2 = Sheets("BD articles menus").ListObjects("TabBDArticlesMenus").ListColumns("Code nom articles menus").DataBodyRange
                    IndiceArticle = WorksheetFunction.Match(tbCodeNomLégume, plageRecherche2, 0)

                Case Is = "vendredi"
                    'IndiceArticle = WorksheetFunction.Match(NomArticle, Range("TabLégumesWeekendSamedi[Nom légumes weekend samedi]"), 0)
                    '1)- on récupère le code dans "TabLégumesWeekendSamedi"
                    Set plageRecherche1 = Sheets("Listes").ListObjects("TabLégumesSoirsVendredi").ListColumns("Nom légumes soirs vendredi").DataBodyRange
                    PositionIndiceArticle = Application.WorksheetFunction.Match(cbNomLégume, plageRecherche1, 0)
                    If PositionIndiceArticle > 0 Then tbCodeNomLégume = plageRecherche1.Offset(0, 1).Cells(PositionIndiceArticle, 1).Value
                    '2)- recherche du code dans "TabBDArticlesMenus"
                    Set plageRecherche2 = Sheets("BD articles menus").ListObjects("TabBDArticlesMenus").ListColumns("Code nom articles menus").DataBodyRange
                    IndiceArticle = WorksheetFunction.Match(tbCodeNomLégume, plageRecherche2, 0)
            End Select
        End If
    End If
End Function

le fichier:

Cdlt

Edit:

Dans celui-ci, j'ai intégré la "menus viande midi weekend"

12menus-2024-smp-5.zip (345.16 Ko)

Bonjour Arturo83,

Pour les légumes vendredi, c'est bon. Pour la viande, il reprend le code légume au lieu du code viande.

Samedi : même remarque que ci-dessus.

Dimanche : même remarque que ci dessus et en plus il ne reprend toujours pas le dessert du samedi.

Dans Function Indice article, pour chaque case, peut-être est-il nécessaire de créer des instructions similaires aux légumes en faisant référence ici au tableau structuré des viandes ?

Dans celui-ci, j'ai intégré la "menus viande midi weekend"

menus-2024-smp-5.zip (345.16 Ko)

Où l'avez-vous intégré ? Je n'ai rien vu.

Dans le premier et le second fichier de votre message de ce matin, impossible de créer le cbNomViande (saucisson) du samedi 06 janvier 2024, il rencontre une erreur sur ces lignes 'impossible de lire la propriété Match de la classe WorksheetFunction.:

PositionIndiceArticle = Application.WorksheetFunction.Match(cbNomViande, plageRecherche1, 0)

IndiceArticle = WorksheetFunction.Match(tbCodeNomViande, plageRecherche2, 0)

Pour viande soir, ne faudrait-il pas prévoir des lignes identiques à viandes midi weekend en effectuant les modifications de nom nécessaires pour chaque case de jour semaine ?

Bonsoir,

Désolé mais je n'ai eu beaucoup de temps à consacrer à ce travail. mais pour répondre à la question suivante, dans ""TabViandesMidiWeekend").ListColumns("Nom viandes midi weekend"), "Saucisson " n'existe pas dans la table, il y est dans les viandes du soir mais pas à midi.

Dans le premier et le second fichier de votre message de ce matin, impossible de créer le cbNomViande (saucisson) du samedi 06 janvier 2024, il rencontre une erreur sur ces lignes 'impossible de lire la propriété Match de la classe WorksheetFunction.:

PositionIndiceArticle = Application.WorksheetFunction.Match(cbNomViande, plageRecherche1, 0)

IndiceArticle = WorksheetFunction.Match(tbCodeNomViande, plageRecherche2, 0)

Pour le reste je regarderai demain.

Cdlt

Pour viande soir du samedi 06 janvier 2024, j'ai rajouté les instructions du samedi dimanche en mettant TabViandesSoirs mais l'erreur persiste. J'ai compris une partie des instructions mais pas tout, hélas.

Rechercher des sujets similaires à "periode legumes vendredi samedi"