Remplissage du cbNomLégume si Maïs ou Radis

Bonjour à toutes et à tous :

Mardi 7 mars 2023 : nom légume : Maïs

Dans la procédure Private Sub PréinitialisationsSpécifiques, Select Case cbNomNatureCréation, Case Is="Menu midi retraite", il est prévu des instructions qui permettent (ou qui devraient permettre) que si un jour nom légume = Maïs (ou radis), le lendemain ce sera le même nom légume; Si c'est un vendredi, deux jours après (le lundi), ce sera également le même nom légume. Or, le 8 mars 2023, le cbNomLégume reste vide. D'avance merci à celle (celles), à celui (ceux) qui m'aidera (m'aideront) à résoudre ce problème.

8tests-ccm-thev.xlsm (233.11 Ko)

Bonsoir Christian,

C'est une application bien complexe que tu nous mets à disposition avec juste un zeste d'explication, je me suis donc focalisé sur le bout de code qui te pose problème en cherchant comment y arriver... Pas évident

Dans cette ligne de code :

WorksheetFunction.Weekday(DateMenu, -2)

La méthode Weekday renvoie le numéro de la semaine en fonction de 2 arguments : le premier est la date et le second est un nombre facultatif qui précise le premier jour de la semaine. Selon la norme ISO comme c'est le cas en France, le premier jour commence le lundi, donc on doit mettre 2.

Cela ne peut pas fonctionner car -2 n'est pas accepté.

Si tu veux récupérer le jour de la semaine du 06/03/2023 quand tu fais le menu du 08/03/2023, il faut écrire comme ceci :

WorksheetFunction.Weekday(DateMenu -2, 2)

Cela te retournera 1 pour Lundi, si tu voulais récupérer la date du 06/03/2023, tu n'as pas de la fonction Weekday, il faut juste faire :

(DateMenu -2)

Benead

Bpnsoir Benead,

Excuses-moi mais je ne suis vraiment pas un expert et je n'ai pas, hélas, l'esprit de déduction. Pour paraphraser la publicité de MacDonalds "Je dis comme je suis". J'ai essayé de transformer les instructions selon ce que tu as écris mais j'ai une erreur : Nombre d'arguments incorrect ou affectation de propriété incorrecte.

'Préinitialisations spécifiques selon menu et jour semaine.
Select Case cbNomNatureCréation.Value
Case Is = "Menu midi retraite"
'Légumes spécifiques Maïs et radis : deux jours ouvrés de suite.
'WorksheetFunction.WorkDay : Renvoie un nombre représentant une date qui est le nombre de jours ouvrés indiqué avant ou après une date (date de début). Les jours ouvrés
'excluent les week-ends et les jours de congés. Utilisez la fonction WORKDAY pour exclure les week-ends et les jours de congés lorsque vous calculez les dates d'échéance
'des factures, les heures de livraison attendues ou le nombre de jours ouvrés effectués.
Dim LigMoins1 As Long, LigMoins2 As Long
LigMoins1 = IndiceMenus(cbNomNatureCréation.Value, WorksheetFunction.WorkDay(DateMenu, -1))
'Si LigMoins1 supérieur à zéro alors va exécuter la ligne d'après.
If LigMoins1 > 0 Then
If Range("TabBDMenus[Nom menu légume]").Item(LigMoins1) = "Maïs" Or Range("TabBDMenus[Nom menu légume]").Item(LigMoins1) = "Radis" Then
LigMoins2 = IndiceMenus(cbNomNatureCréation.Value, WorksheetFunction.Weekday(DateMenu, -2, 2))
If LigMoins2 = 0 Or Range("TabBDMenus[Nom menu légume]").Item(LigMoins2) <> Range("TabBDMenus[Nom menu légume]").Item(LigMoins1) Then
cbNomLégume.Value = Range("TabBDMenus[Nom menu légume]").Item(LigMoins1)
End If
End If
End If

Edit modo : merci de mettre le code entre balises SVP avec le bouton </>

Bonjour,

tu as ajouté une "," à la proposition. Forcément ça te fait un argument en plus.
D'autre part il faut traiter de la même façon toutes les autres utilisations incorrectes de cette fonction.
J'en vois au moins une...
eric

Bonjour Erilic,

J'ai essayé de recopier la formule de Benead mais comme je l'ai dit, je persiste et signe, je suis nul et je n'ai pas l'esprit de déduction. Tu veux parler des instructions de LigMoins1 et LigMoins2 qui ne sont pas identiques, donc pas traitées de la même manière.

Non, tu as ajouté une ","
Il ne s'agit pas de déduction mais de simple lecture et de recopier à l'identique.
Tu as aussi le copié-collé à ta disposition.

Oui, je te parle de LigMoins1 = IndiceMenus(cbNomNatureCréation.Value, WorksheetFunction.WorkDay(DateMenu, -1))
Tu vois bien que tu as un -1 malvenu ici
eric

Où ai-je ajouté un "," ? Normalement, j'avais fait un copier-coller mais peut-être ai-je fait une sélection trop importante.

Pour toi c'est l'évidence même que le -1 est malvenu mais hélas pas pour moi : il faut donc supprimer le -1; doit-on le remplacer par autre chose ou laisse uniquement (datemenu) ?

Faut ouvrir les yeux. Ca, c'est quoi ??
WorksheetFunction.Weekday(DateMenu, -2, 2)

il faut donc supprimer le -1; doit-on le remplacer par autre chose ou laisse uniquement (datemenu) ?

Il faut lire l'aide sur cette fonction, ça sera un bon point de départ pour savoir ce qu'elle attend.
Je ne faisais qu'un passage pour te dire que tu avais mal copié, pas le temps d'en faire plus, désolé.
eric

Tu fais comme bon te semble : soit tu pars (alors merci pour ton aide), ou tu m'écris les lignes qui sont à modifier telles qu'elle devraient être, d'avance merci. J'ai essayé de recopier ce qu'a écrit Benead mais cela sort des erreurs ou le tb ne se remplit pas.

J'ai regardé l'aide pour WorksheetFunction.workday : pour moi, le -1 est correct dans l'instruction ligmoins1 puisque on recherche le jour précédant le contenu du tbDateMenu (Date 8 mars 2023;on recherche le contenu du 7 mars 2023, donc antérieur au 8 mars 2023, donc il faut que ce soit un nombre négatif et 1 puisque c'est juste le jour d'avant). Pour ligmoins2 : pour moi les chiffres sont corrects puisque dans l'aide il est précisé que seuls comptent les jours ouvrés, donc samedi et dimanche sont considérés comme non ouvrés d'une part, et que on veut le contenu du vendredi, donc moins 2; quant au deuxième 2, je ne sais pas à quoi il correspond, d'autre part. Enfin, worksheetfunction.weekday, pour moi, il semble n'avoir aucune utilité dans cette partie du programme.

Désolé, suis parti sur WorkDay() suite à une lecture trop rapide.
Il s'agit bien de Weekday() qui lui n'accepte que 2 arguments dont tu pourras voir leur rôle et valeurs acceptées dans l'aide.
Y ajouter une "," comme tu as fait en fourni 3...
eric.

Bonjour,

A la lecture des échanges que tu as eu avec Eric je comprend mieux le problème, la personne qui a écrit ces lignes de codes a certainement fait une erreur : il ne faut pas confondre la fonction WorkDay de la fonction WeekDay.

WorkDay retourne le jour ouvré en fonction de la date passé en argument 1 et du nombre de jour avant et après la date passée en argument 1, il y a aussi un argument 3 qui est facultatif pour la prise en comptes de congés dans le calcul. Exemples : le 08/03/2023 - 2j = le 06/03/2023, le 06/03/2023 - 2j = 02/03/2023

WeekDay, comme je l'ai dit dans un autre poste, retourne le numéro du jour de la semaine : 1=Lundi, 2=Mardi...

Dans ton cas, je pense que tu dois remplacer la ligne :

                LigMoins2 = IndiceMenus(cbNomNatureCréation.Value, WorksheetFunction.Weekday(DateMenu, -2))

Par

                LigMoins2 = IndiceMenus(cbNomNatureCréation.Value, WorksheetFunction.Workday(DateMenu, -2))

en clair, il faut remplacer Weekday par Workday, et dans cette fonction l'argument -2 fera son rôle.

Benead

Le cbNomLégume ne se remplit toujours pas et reste vide pour le 8 mars 2023.

Je veux bien creuser un peu dans la semaine, mais pour reproduire l'anomalie que tu constate, ll faut que tu m'indiques les étapes très précisément pour y arriver, il y a des boutons un peu partout et plein de contrôles à remplir...

Benead

Nom menu création : menu midi retraite

Date menu : 08 mars 2023

Nom légume : reste vide. Il devrait se remplir du nom légume figurant dans la feuille BD menus, tableau structuré TabBDmenus, colonne nom légume à la date du 7 mars 2023.

Nom menu création : menu midi retraite

Date menu : 13 mars 2023

Nom légume : il reste vide. Il devrait se remplir du nom légume figurant dans la feuille BD menus, tableau structuré TabBDMenus, colonne nom légume à la date du 10 mars 2023.

Période et conditionnement légume : pas de problème pour l'instant. Si le cbnomlégume se remplit, ils se rempliront automatiquement sinon j'ajouterai les deux lignes nécessaires.

J'espère que ces informations te seront utiles. En cas de besoin, je reste à ton entière disposition pour répondre à tes éventuelles questions.

Bonjour,

Je vais regarder dans la semaine mais plutôt ce weekend, mais remets le sujet en non solutionné, tu auras peut-être une réponse plus rapidement

Benead

Bonjour Benead,

Merci. J'ai retiré tous les résolus (enfin j'espère).

Bonjour le fil

Christian, je suis navré BUDGET, mais la charte du forum indique bien

  • Ne postez pas la même question sur un autre forum pour éviter de faire perdre bêtement du temps aux membres sur un problème qui peut être déjà résolu sur l'autre forum. L'inverse est également valable, si vous avez déjà posé votre question sur un autre forum, ne créez pas un doublon sur ce forum (à moins d'avoir clôturé le sujet sur l'autre forum).

Je clôture donc le sujet ICI

Rechercher des sujets similaires à "remplissage cbnomlegume radis"