MasquerLégume ne s'exécute pas

Bonsoir à toutes et à tous,

J'espère que quelqu'un va avoir la gentillesse de me répondre et d'apporter la solution au problème rencontré.

Quand cbNomNatureCréationMenu est Menu viande midi weekend, il doit aller dans la procédure MasquerLégume et l'exécuter, ce qu'il ne fait pas.

Si cbNomNatureCréationMenu n'est pas Menu viande midi weekend, il doit rendre invisible tout ce qui concerne viande midi weekend, ce qu'il ne fait pas.

lb titre, lors d'une première exécution, la date n'apparaît pas : ouverture du fichier : clic sur Création menus : nom nature création menu midi retraite : date 08 septembre 2023 : lb titre se remplit bien de menu midi retraite sans la date; on garde l'userForm ouvert : dans nom nature création menu, clic sur menu journalier : le lbtitre se remplit en totalité.

D'avance merci pour votre aide.

8menus.xlsm (279.12 Ko)

Bonsoir Chistian,

Pour ton probleme avec "cbNomNatureCréationMenu"

        If cbNomNatureCréationMenu.Value = "Menu viande midi weekend" Then 'Geof => wekkend en weekend
            lbNomPériodeViandeMidiWeekend.Visible = True    'Geof => False en true
            tbNomPériodeViandeMidiWeekend.Visible = True    'Geof => False en true
            Call MasquerLégume
            'Call MasquerDessert
        Else
            lbNomPériodeViandeMidiWeekend.Visible = False   'Geof => True en False
            tbNomPériodeViandeMidiWeekend.Visible = False   'Geof => True en False
            'Call AfficherLégume
            'Call AfficherDessert
        End If

Weekend avait une coquille et les visiblilité des viandes étaient inversées (si j'ai bien compris ce que tu souhaites faire).
Vu que "Wekkend" etait différent de "Weekend" la procedure ne passait jamais dans "MasquerLégume".

________________________________________

Pour ton prrobleme avec la date :

image

Pour la date "lbtitre" la procedure ne passe pas dans la "Maj du titre" apres avoir changé de date mais avant.
Pour changer ça :

Private Sub tbDateMenu_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    'Va afficher le calendrier pour choisir la date du menu qui, grâce à dddd d mmmm yyyy, va la transformer en jour, date, mois et année.
    tbDateMenu = Format(Calendrier.Choix(tbDateMenu), "dddd d mmmm yyyy")
    Call MiseÀjourTitre '************Geof => Ajout de cette ligne
End Sub

On rappel "MiseAjourTitre" apres avoir renseigné une date dans "tbDateMenu"

A+

Bonsoir Geof52,

Merci de ton aide. Je n'avais pas vu hélas le weekend mal orthographié.

Comment as-tu fait pour que la date apparaisse à l'ouverture du fichier ? Je n'y arrive pas. Par là, j'entends ceci : cnNomNatureCréationMenu : clic sur menu midi retraite. Date menu : clic sur 08 septembre : le lbtitre se remplit de menu midi retraite sans la date. Je viens de recevoir ton second message et c'est parfait maintenant. Un grand merci à toi.

Comment procéder pour mettre ce fil come étant résolu ?

Bonnes fin de soirée et continuation? Prend bien soin de toi.

Oups, J'ai édité mon message tu as peut-etre pas vu la bonne version
(je fais généralement un brouillon et j'essai apres édit d'etre le plus clair possible )

Du coup j'ai ajouté "Call MiseÀjourTitre"

Ce qui donne en traduction du programme : Quand une date est selectionnée, on l'inscrit dans "tbDateMenu" et on appel la mise a jour du titre pour que la date soit aussi dans "lbTitre"

J'ai mis des commentaires avec "Geof" sur les lignes modifiées sur mon 1er message.

Bonsoir Geof52,

J'ai un problème que je n'arrive pas à résoudre :

le cbNomPériodeLégumeDeyx me sort lundi à vendredi midis alors qu'il devrait sortir Dimanche soir lorsque le nom légume est Frites. J'ai regardé toutes les procédures et je n'ai rien vu d'anormal. J'ai regardé la propriété Value du cbNomPériodelégumeDeux qui est vide. Je ne comprends pas cette anomalie.

D'avance merci pour ton aide.

Feuille Accueil clic sur Création menus

UserForm UF02_CréationMenus : nom nature création menus : clic sur Menu journalier, date menu : dimanche 17 septembre 2023, nom légume : Frites

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

7menus.zip (340.95 Ko)

Bonjour Christian,

La ligne 437 de ton code dans la procedure cbNomLégumeDeux_Change:

image
Private Sub cbNomLégumeDeux_Change()
...
    I = IndiceArticle(cbNomLégumeDeux)
...
        cbNomPériodeLégumeDeux.Value = Range("TabBDArticlesMenus[Nom période articles menus]").Item(I)

Va rechercher dans ton tableau de la feuille "BD articles menus" l'indice de "cbNomLégumeDeux" qui est "Asperges" et non "Frites"
("Frites" etant le Légume1 "cbNomLégume")

Donc la période est bien celle recherché.

image

Et c'est ta ligne 413 qui met "Asperges" en Légume 2 :

Private Sub cbNomLégume_Change()
...
    If cbNomLégume.Value = "Frites" Then
        Call AfficherLégumeDeux
        cbNomLégumeDeux.Value = "Asperges"

Mais comme la période correspond au légume 2 et que Asperges est le legume 2, pour moi il n'y a pas de probleme

Bonjour GEOF52,

Ta réponse est partiellement exacte : Asperges que tu cites concerne légume midi retraite tandis que mon asperges de ma manipulation concerne menu journalier.. Malgré que cela ne soit pas prévu dans MENUS2023, peut-être faut-il ajouter une ou plusieurs instructions (et si oui, dans quelle (s) procédure(s)) pour qu'il prenne en considération Frites (qui n'est que pour menu journalier et le dimanche mais qui n'existe pas dans légume midi retraite) ?

J'ai fait un test : fichier MENUS 2023 : Feuille Accueil : j'ai changé le contenu de la cellule F1 pour mettre 2024, j'ai accepté toutes les suppression et j'ai crée un menu journalier à la date du 15 septembre 2024 : tout est correct il me sort bien les renseignements tels qu'il doivent être.

Moi je te dis juste pourquoi la période est correct en terme de programmation, mais c'est pas forcement la période que tu souhaites.

Frites (legume1) renvoi Asperges (legume2) qui renvoi la Periode (legume2)

image

Si tu souhaites :
Frites (legume1) renvoi Asperges (legume2) qui renvoi la Période (legume1)

image

Déja "lbNomPériodeLégumeDeux" sera faux car il indiquera le legume 1 mais si tu souhaites forcer, change :

        cbNomPériodeLégumeDeux.Value = Range("TabBDArticlesMenus[Nom période articles menus]").Item(I)
Par :
        cbNomPériodeLégumeDeux.Value = Range("TabBDArticlesMenus[Nom période articles menus]").Item(IndiceArticle(cbNomLégume))

dans la procedure "Private Sub cbNomLégumeDeux_Change()" ligne 430

A savoir que tu auras forcement d'autre probleme si tu fait ça.

Pourquoi dans MENUS 2023, cela fonctionne-t-il correctement ? À mois que cela vienne du fait que le formulaire ne soit pas validé. Je viens de voir un autre problèmes, les tbCodeNomLégume, tbCodeNomViande et tbCodeNomDessert ne se remplissent pas correctement : c'est le nom qui ressort au lieu du code.

MENUS 2023 : premier mot de passe : MENUS 2023 deuxième mot de passe : MENUS 2023

7menus.zip (349.30 Ko)
4menus-2023.zip (505.15 Ko)

Désolé, je n'ai pas le temps de comparer 2 fichiers aussi gros qui n'ont pas la meme structure.

"A savoir que tu auras forcement d'autre probleme si tu fait ça."
Serais-tu disposé à régler ces problèmes dans le cas où ils se poseraient ?

Pour moi c'est une tres mauvaise idée d'utiliser le "periode legume 2" pour y indiquer du "periode de légume 1".
Déja que ton code est imposant, si les variables ne correspondent plus a ce qu'elles sont censées prendre comme données, ça va vite etre la merde.

Ce que je ne comprend pas (la base de ton probleme) c'est pourquoi vouloir avoir le "Nom période légume deux" identique a la ligne au dessus "Nom période légume" ?
(Fleche Bleu)

image

Non, le nom période légume deux (dimanche soir) doit être différent du nom période légume (dimanche midi) dans le cas où le nom légume est frites en temps que menu journalier et uniquement pour une date qui correspond à un dimanche.

Ok, je commence a comprendre

Tu as 3 asperges dans ton tableau et logiquement Excel prend la premiere valeur c'est pour ça que tu n'a pas de dimanche soir mais "Lundi ....".

image

Pour le moment d'apres ce que j'ai vu, le choix de la période ne prend pas en compte le jour pour choisir la bonne ligne de ton tableau.
Je regarde si je peux t'aider ce soir.

Question : C'est toi qui a choisi les "Code nom articles menus" ?
Si oui tu peux me dire comment tu les as défini ? On peut peut-etre s'en servir pour indiquer la bonne période.

Pour :

les tbCodeNomLégume, tbCodeNomViande et tbCodeNomDessert ne se remplissent pas correctement : c'est le nom qui ressort au lieu du code.

Il va chercher les mauvaises colonne de ton tableau

Ligne de code 399 :
tbCodeNomLégume.Value = Range("TabBDArticlesMenus[Nom articles menus]").Item(I)
Remplace :
"Nom articles menus" => "Code nom articles menus"

Code nom articles menus : oui, c'est moi qui les ai choisis. Critère de création : code nom nature articles menus suivi d'un nombre à deux chiffres. Merci pour les tb. Proposition contenue ton message de 10h19 semble intéressante, il faut que je l'examine de plus près. À ce soir pour ton éventuelle nouvelle proposition. Bon courage.

Mon message de 10h19, tu peux l'oublier sauf si tu veux avoir plus de problemes dans ton fichier.

Pour :

Code nom articles menus : oui, c'est moi qui les ai choisis

Tu peux me dire comment tu en es arrivé a ces caracteres là pour créer le code nom nature article ?

Edit : Ok j'ai trouvé, c'est les premiere lettre de chaque mot dans la colonne "Nom nature articles menus" ? Donc je peux grace au code trouver si c'est la ligne d'Asperge pour le dimanche soir normalement.

J'ai travaillé avec ton message de 10h19 que tu me dis ne plus prendre en compte : pour le conditionnement, cela va mais la période légume deux ne foctionne toujours pas. J'attends donc ta nouvelle proposition.

J'ai travaillé avec ton message de 10h19 que tu me dis ne plus prendre en compte

Donc comme j'ai dis dans mon précédent message, tu veux avoir plus de problemes dans ton fichier.

Je n'arrive pas a résoudre le probleme.
La fonction "Private Function IndiceArticle(ByVal NomArticle As String) As Long" va indiquer la ligne de la premiere "Asperges" trouvé qui est la ligne 26 (indiceArticle 24) de la je ne peux pas intégré le code nom nature pour etre identique a Legume 1 (qui devrait m'envoyer ligne 74 ou indiceArticle 72).

Bon courage A+

En clair, il n'y a pas de solution si ce n'est de reprendre l fichier MENUS 2023. J'ai trouvé la solution pour la période légume deux.

Bonjour Christian,

J'ai trouvé ce que je voulais hier, j'ai bien les bonnes données aux bons endroits.

image

1 ) Inverse les deux lignes de code dans "Private Sub cbNomLégume_Change()" pour avoir : [ligne 413]
(le code avant le nom utile pour savoir trouver la bonne ligne du dimanche soir)

        tbCodeNomLégumeDeux.Value = "LWD01"
        cbNomLégumeDeux.Value = "Asperges"

2 ) Remple la colonne "Nom ..." par "Code nom ..." dans "Private Sub cbNomLégumeDeux_Change() [ligne 436]

        tbCodeNomLégumeDeux.Value = Range("TabBDArticlesMenus[Code nom articles menus]").Item(I)

3 ) Ensuite dans la fonction "Private Function IndiceArticle(ByVal NomArticle As String) As Long" [ligne 499]

Remplace :

        IndiceArticle = WorksheetFunction.Match(NomArticle, Range("TabBDArticlesMenus[Nom articles menus]"), 0)

Par :

 If NomArticle = cbNomLégumeDeux.Value Then
        IndiceArticle = MATCH2(Range("TabBDArticlesMenus[Code nom nature articles menus]"), Left(tbCodeNomLégumeDeux.Value, 3), Range("TabBDArticlesMenus[Nom articles menus]"), NomArticle)
    Else
        IndiceArticle = WorksheetFunction.Match(NomArticle, Range("TabBDArticlesMenus[Nom articles menus]"), 0)
    End If

4 ) Rajoute cette fonction la la fin de ton code :

Function MATCH2(plage1 As Range, critere1, plage2 As Range, critere2)
'https://forum.excel-pratique.com/excel/fonction-match-avec-plusieurs-criteres-154538#p955956
Dim t1, t2 As Variant

t1 = plage1.Value
t2 = plage2.Value
For I = LBound(t1) To UBound(t1)
    If t1(I, 1) Like critere1 And t2(I, 1) Like critere2 Then
        MATCH2 = I
        Exit Function
    End If
Next I
End Function

A tester mais il faudra surement modifier la partie "Left(tbCodeNomLégumeDeux.Value, 3)" puisque ton "Code nom nature articles menus" n'a pas toujours 3 caracteres.

A+

Rechercher des sujets similaires à "masquerlegume execute pas"