Période légumes vendredi samedi

Bonjour à toutes et à tous,

Feuille accueil : clic sur création menus

Formulaire UF02_CréationMenus : Nom nature création menu : clic sur Menu journalier, Date menu : 06 janvier 2024, Nom légume : Pâtes à la sauce tomates

1) Le code légume est erroné : il sort LMR09 alors qu'il devrait sortir LWS01

2) Nom période légume : il sort Lundi à vendredi midis alors que la bonne période est Samedi midi et soir

3) code nom période légume : il sort PAM05 alors que la bonne référence est pam11

Pour le vendredi, c'est pareil, il sort les références de Midi retraite au lieu des références du vendredi. Pour le dimanche, le même problème se pose, à ceci près qu'il prend la référence de LSLM au lieu de celle du dimanche.

Mille excuses si j'ai déjà exposé le problème mais je ne me souviens pas de son intitulé et des réponses éventuelles reçues.

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

Cordialement.

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

Les références période sont partout erronées dès qu'un légume est présent à la fois en menu midi retraite et dans un menu soir

Bonjour,

En fait, il manque plein de tests, dans la fonction suivante je n'ai traité que le cas correspondant au 6 janvier, reste à faire la même chose pour les autres cas de figure.

J'ai ajouté ces 2 lignes:

        ElseIf cbNomNatureCréationMenu = "Menu journalier" And NomArticle <> "Pomme" Then
            IndiceArticle = WorksheetFunction.Match("Samedi midi et soir", Range("TabBDArticlesMenus[Nom période articles menus]"), 0)

dans la fonction suivante:

Private Function IndiceArticle(ByVal NomArticle As String) As Long
    Dim Coderecherche As String, Chiff As Byte
    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)
        ElseIf cbNomNatureCréationMenu = "Menu journalier" And NomArticle <> "Pomme" Then
            IndiceArticle = WorksheetFunction.Match("Samedi midi et soir", Range("TabBDArticlesMenus[Nom période articles menus]"), 0)
        Else
            IndiceArticle = WorksheetFunction.Match(NomArticle, Range("TabBDArticlesMenus[Nom articles menus]"), 0)
        End If
    End If
End Function

Pour les autres questions:

Pour le vendredi, c'est pareil, il sort les références de Midi retraite au lieu des références du vendredi. Pour le dimanche, le même problème se pose, à ceci près qu'il prend la référence de LSLM au lieu de celle du dimanche.

décrivez les actions à faire avec le résultat attendu, c'est plus simple pour arriver au résultat, parce que c'est déjà pas simple avec tous ces tableaux, et on finit par vite se perdre.

re,

Je vais modifier mon programme avec les indications citées dans votre message. Je vais tester. Pour les autres questions, je vous donnerai les manipulations à faire ultérieurement. Pourquoi avoir choisi <>Pomme dans le elseif ?

Pour légumes samedi, problème résolu. Pour le samedi, trois autres problèmes :

1) Nom légume : si je prends pâtes au beurre ou pâtes au fromage râpé, le code légume reste au code pâtes à la sauce tomates;

2) Nom viande : le code viande prend la valeur du code pâtes à la sauce tomates ainsi que pour les nom et code période nom viande.

3) Nom dessert : mêmes remarques que pour le 2).

Bonsoir,

Comme je ne connais pas exactement ce que vous devez trouver pour chaque article, j'ai fait un peu comme je l'ai compris, il y aura surement des points à modifier ou à améliorer, mais vous en avez déjà le principe ce qui peut vous permettre d'y apporter les modifications nécessaire si besoin.

La modification est comprise entre le 2 lignes de *********

Private Function IndiceArticle(ByVal NomArticle As String) As Long
    Dim Coderecherche As String, Chiff As Byte
    'Dim ws As Worksheet
    'Dim plageNomArticles As Range
    'Dim plagePeriodes As Range
    Dim Formule As String

    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)
        ElseIf cbNomNatureCréationMenu = "Menu journalier" And NomArticle <> "Pomme" Then

            '**********************************************************************************************************
            On Error GoTo Gestion_Erreur
RechercheSuivante1:
            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Samedi midi et soir""),0)"
            IndiceArticle = Application.Evaluate(Formule)
            If IndiceArticle > 0 Then Exit Function

RechercheSuivante2:
            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Lundi à dimanche soirs""),0)"
            IndiceArticle = Application.Evaluate(Formule)
            If IndiceArticle > 0 Then Exit Function

RechercheSuivante3:
            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Samedi et dimanche midis et soirs""),0)"
            IndiceArticle = Application.Evaluate(Formule)
            If IndiceArticle > 0 Then Exit Function
            '**********************************************************************************************************
        Else
            IndiceArticle = WorksheetFunction.Match(NomArticle, Range("TabBDArticlesMenus[Nom articles menus]"), 0)
        End If
    End If
    Exit Function

Gestion_Erreur:
    Resume Next
End Function

Je vais regarder cela demain. Pour vous aider, je vous joins le fichier dans lequel la modification que vous avez proposée ce midi est incluse. Pour voir les noms légume et légume deux, viande, dessert et leurs codes respectifs, le nom période légume et légume deux, viande, dessert et leurs codes respectifs, les noms conditionnement légume et légume deux, viande et dessert et leurs codes respectifs, regardez la feuille BDArticlesMenus : le nom des colonnes de ce tableau structuré est identiques au nom des objets du formulaire.

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

Explication :

Feuille accueil : clic sur Création menus

Formulaire UF02_CréationMenus : Nom nature création menu : Menu journalier; Date du menu : samedi 06 janvier 2024; Nom légume : Pâtes à la sauce tomates. Quand tout cela est saisi, vous n'avez plus rien à faire. Dans une ou plusieurs procédures, il est prévu d'aller chercher les renseignements dans le tableau structuré TabBDArticlesMenus. Dans ce tableau, comme il s'agit d'un samedi qui fait partie du weekend, vous cherchez dans la colonne Nom nature articles menus, un légume weekend samedi (LWS), puis dans la colonne Nom articles menus, Pâtes à la sauce tomates : dans les colonnes suivantes, vous aurez le code légume, le nom et code période, le nom et le code conditionnement, la quantité (je ne me souviens plus si j'ai pris la quantité pour un repas ou la quantité pour la journée). Pour les viandes et les desserts, ce sera le même principe, en tenant compte, éventuellement, des prédéfinitions spécifiques. Pour ce qui est de Menu midi retraite, vous passez, cela ne nous intéresse pas puisque tous les menus midi retraite ont été créés sur le même principe de recherche dans ledit tableau.

Légume soir lundi mardi = LSLM

Légume soir mercredi jeudi = LSMJ

Légume soir vendredi = LSV

Légume weekend samedi = LWS

Légume weekend dimanche = LWD

Viande soir = VS

Dessert soir = DS

Dessert weekend = DW

J'espère que ces explications vous seront utiles afin de savoir ce que je dois trouver et que je n'ai rien oublié dans mes explications.

Bonnes fin de soirée et continuation. Prenez bien soin de vous.

Très cordialement.

Bonjour,

Quand j'ai écrit: Comme je ne connais pas exactement ce que vous devez trouver pour chaque article, cela ne voulais pas dire que je ne comprenais rien, sinon je n'aurais jamais pu mettre les doigts dedans, juste c'était de comprendre quelle était la bonne période à prendre en fonction de la date et de l'article demandé, par exemple, quelle période prendre entre "Samedi et dimanche midis et soirs" et "Samedi et dimanche midis" ou "Lundi à dimanche soirs", puisqu'enfin votre problème vient de là. En effet, dans la feuille "BD articles menus", dans la colonne "Nom articles menus" la plupart des articles sont en doubles et le seul critère qui fait la différence est dans la colonne "Nom période articles menus" et le code actuel n'inclut pas ce dernier critère, c'est pour cela que vous n'obteniez pas les bons codes (il prenais le premier trouver sur la liste)

Dans ma dernière proposition, j'ai inclus ce critère dans la recherche, mais je ne suis pas sûr d'avoir fait le bon choix. Mais, même si cela ne l'était pas, il devient plus aisé de modifier un élément de la "Formule", voire même d'ajouter une ou plusieurs formule suivant le même principe. (les formules se trouvent dans la zone encadrée par des lignes d'astérisques.

Bonjour Arturo83,

Je n'ai jamais pensé ni écrit d'ailleurs que vous ne compreniez rien, loin de moi cette idée saugrenue et également diffamante. Nom articles menus : oui, certains sont en double et ce qui les différencie ce sont le code d'une part et la période d'autre part.

oui, certains sont en double et ce qui les différencie ce sont le code d'une part et la période d'autre part.

Pas tout à fait, car si j'ai bien compris et, c'est là tout le noeud du problème, les seuls critères à utiliser sont le nom de l'article et la période et, le code qui en découle est lié à de ces 2 critères.
Pour l'article, il n'y a pas de problème, mais pour la période, il faut appliquer la bonne, et c'est pas toujours évident, d'où les besoins de précisions qui s'imposent.
Dans ma dernière modification du code, j'ai joué sur 3 périodes différentes, mais je n'ai peut-être pas pris les bonnes, c'est pour cela que j'attends votre retour pour me dire ce qui va ou ne va pas.

Ps: Quand je dis que je ne comprenais rien, je voulais simplement dire que sur certains points c'était un peu flou et que je ne voyais pas suffisamment d'éléments pour clarifier tout cela. C'est vrai qu'en écrivant, les expressions linguistiques ne sont pas toujours évidentes et ne reflètent pas toujours le ressenti de chacun.

Re,

Légume, viande, dessert des samedi 06, 13 et 20 janvier 2024: parfait tout est correct. Dimanche 07 janvier 2024 : légume : Haricots verts : le code légume reste vide. Il en est de même pour les légumes lundi, mardi, mercredi, jeudi. Pour le vendredi, si légume = asperges, code erroné (LMR01), le bon code serait LSV01. Peut-être des ajouts sont nécessaires dans function IndiceArticle ? Pour le vendredi, la plupart des légumes (excepté Betterave rouge absent dans LMR) sont présents tant en LMR que dans LSV.

Il suffi d'ajouter la condition suivante:

            
RechercheSuivante4:
            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Dimanche midi et soir""),0)"
            IndiceArticle = Application.Evaluate(Formule)
            If IndiceArticle > 0 Then Exit Function

le code la fonction en entier:

Private Function IndiceArticle(ByVal NomArticle As String) As Long
    Dim Coderecherche As String, Chiff As Byte
    'Dim ws As Worksheet
    'Dim plageNomArticles As Range
    'Dim plagePeriodes As Range
    Dim Formule As String

    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)
        ElseIf cbNomNatureCréationMenu = "Menu journalier" And NomArticle <> "Pomme" Then

            '**********************************************************************************************************
            On Error GoTo Gestion_Erreur
RechercheSuivante1:
            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Samedi midi et soir""),0)"
            IndiceArticle = Application.Evaluate(Formule)
            If IndiceArticle > 0 Then Exit Function

RechercheSuivante2:
            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Lundi à dimanche soirs""),0)"
            IndiceArticle = Application.Evaluate(Formule)
            If IndiceArticle > 0 Then Exit Function

RechercheSuivante3:
            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Samedi et dimanche midis et soirs""),0)"
            IndiceArticle = Application.Evaluate(Formule)
            If IndiceArticle > 0 Then Exit Function

RechercheSuivante4:
            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Dimanche midi et soir""),0)"
            IndiceArticle = Application.Evaluate(Formule)
            If IndiceArticle > 0 Then Exit Function
            '**********************************************************************************************************
        Else
            IndiceArticle = WorksheetFunction.Match(NomArticle, Range("TabBDArticlesMenus[Nom articles menus]"), 0)
        End If
    End If
    Exit Function

Gestion_Erreur:
    Resume Next
End Function

Bonjour ARTURO83,

Je me languissais de ne pas avoir de réponse de votre part à mon dernier message. J'ai ouvert Excel pratique pour voir si vous aviez lu mon message et là surprise, j'ai vu que vous m'aviez répondu hier à 11h14 : je n'ai pas été averti de votre message. Merci pour le complément. Pour les légumes lundi mardi, mercredi jeudi, vendredi, il faudra partir du même principe et ajouter autant de RechercheSuivante que nécessaires ? Dimanche 7 janvier 2024 : Nom légume : Haricots verts ; tout se remplit bien. Par contre, pour le dessert, il ne remplit pas automatiquement il faut saisir le nom du dessert (normalement, il est prévu des instructions pour que le dessert dimanche soit identique au dessert samedi). J'ai testé un lundi : à part le nom légume, tout le reste pour légume reste vide. Donc il va falloir des RechercheSuivante supplémentaires. À toutes fins utiles, je vous signale également que le légume mardi doit être identique au légume lundi. Il y a également la particularité du légume dimanche dans le cas où celui-ci est Frites : tout ce qui contient le mot deux se remplit mais tout ce qui concerne légume reste vide.

Du fait de toutes ces nouveautés, des procédures doivent-elles être supprimées totalement ou partiellement ? Si oui, merci de me transmettre un nouveau fichier ou de me signaler ce qui doit être abrogé.

Bonjour,

Pour les légumes lundi mardi, mercredi jeudi, vendredi, il faudra partir du même principe et ajouter autant de RechercheSuivante que nécessaires ?

OUI, je pense que vous pouvez essayer de le faire vous-même, il suffit de recopier autant que nécessaire les lignes pour chaque RechercheSuivante(en n'oubliant pas de changer le n°) et de remplacer le titre de la période par le titre de la période correspondante.

*******************************************************************************************************************************************

Dimanche 7 janvier 2024 : Nom légume : Haricots verts ; tout se remplit bien. Par contre, pour le dessert, il ne remplit pas automatiquement il faut saisir le nom du dessert (normalement, il est prévu des instructions pour que le dessert dimanche soit identique au dessert samedi)

là j'ai besoin de plus de précisons, qu'est-ce qui permet de dire: si c'est dimanche alors j'affiche le dessert du samedi.

Comment fait-on pour savoir quel dessert à été servi le samedi, alors que la liste en comporte une vingtaine? Ne peut pas y avoir un changement d'une journée sur l'autre?

*******************************************************************************************************************************************

Procédure Prédéfinitions Spécifiques

'Dessert dimanche identique au dessert samedi.

If Weekday(DateValue(tbDateMenu.Value), vbMonday) = 7 Then

I = IndiceMenu(cbNomNatureCréationMenu.Value, DateValue(tbDateMenu.Value) = -1)

If I > 0 Then cbNomDessert.Value = Range("TabBDMenus[Nom dessert]").Item(I)

If 1 > 0 Then tbQuantitéDessert.Value = Range("TabBDMenus[Quantité dessert]").Item(I)

End If

Quand vous parlez de numéro, c'est le numéro de RechercheSuivante ?

Quand vous parlez de numéro, c'est le numéro de RechercheSuivante ?
Oui, pour ne pas qu'il y ait un doublon de l'étiquette.

ok Et pour le dessert du dimanche identique au dessert du samedi (par date menu) ? Je viens de penser à quelque chose : peut-être faut-il que la rechercheSuivante pour le dimanche soit faite pour qu'il obéisse aux instructions. Je vais essayer.

Dans la première modification d'hier, je me suis fait des commentaires car au départ, je n'avais rien compris. J'ai regardé les instructions et le TabBDArtilesMenus et là tout s'est éclairé, notamment l'histoire de =Pomme et <>Pomme.

Je vous laisse essayer parce que moi je m'y perds entre ces "BD articles menus" et "BD menus".

Pour essayer de comprendre, j'ai repris le fichier initial, j'ai rempli le formulaire avec la journée du samedi 6 janvier 2024, puis je ferme et rouvre le formulaire, avec la journée du dimanche janvier, après avoir saisi le légume, il faudrait que le dessert de la veille remonte tout seul? je pige pas bien le principe.

Oui, c'est bien cela.

1) J'ai fait en sorte d'avoir le moins possible de saisies manuelles à effectuer.

2) Comme le dessert du samedi et du dimanche sont identiques, j'ai fait en sorte (pas seul) qu'une instruction signale que le dessert dimanche était toujours identique à celui du samedi.

3) Nom période légume dimanche : si j'ai bien compris, dans recherche suivante, selon le nom du légume (article), il va rechercher dans le TabBDArticlesMenus le nom article (légume correspondant) et affecter dans le cbNomPériode ce qu'il aura trouvé dans la colonne Nom période du tabBDArticlesMenus pour ledit article (légume) ?

4) Comment fait-il pour trouver pour un légume, une viande, un dessert son code et les références du conditionnement (code et nom) : je n'ai rien trouvé dans RehercheSuivante.

Vous devez me trouver casse-pieds mais j'essaie de comprendre tout ce que vous me proposez.

Pour le dimanche, il y a trois périodes différentes pour les légumes. Actuellement, si je tape Frites, son code et les références période n'apparaissent pas. Pour Chips et haricots verts, c'est correct (ils ont la même période).

Si vous m'expliquez en détail la procédure IndiceArticle, peut-être pourrais-je compléter son code seul (ce n'est pas sûr, mais je peux tenter de faire cet effort).

Rechercher des sujets similaires à "periode legumes vendredi samedi"