Quantité légumes : si pas frites, supprimer le 20

Bonjour à toutes et à tous,

Procédure Private Sub cbLégumes_Change : il y a ces deux lignes d'instructions qui fonctionnent correctement :

If cbNatureMenu = "Légume weekend dimanche" And cbLégumes = "Frites" Then Call AfficherLégumeDeux
tbQuantitéLégume.Value = "20,00"

Si les conditions ne sont pas remplies, je souhaiterai, lors de la saisie d'un nouveau menu journalier autre que le dimanche ou dimanche mais hors frites, que le tbQuantitéViande reste vide ?.

D'avance merci pour l'aide que vous allez pouvoir m'apporter pour résoudre ce problème.

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

Bonjour,

Si j'ai bien compris, partie modifiée et complétée entre lignes d'*;

'Appel de la procédure AfficherLégumeDeux avec conditions.
    If cbNatureMenu = "Légume weekend dimanche" And cbLégumes = "Frites" Then Call AfficherLégumeDeux
    '******************************************************************************************
    If cbNatureMenu <> "Légume weekend dimanche" Or cbNatureMenu = "Légume weekend dimanche" And cbLégumes <> "Frites" Then
        tbQuantitéLégume.Value = ""
    Else
        tbQuantitéLégume.Value = "20,00"
    End If
    '******************************************************************************************

Cdlt

Bonjour Arturo83,

Merci, c'st bien ce que je voulais.

Je crée un menu, quelle que soit la nature menu, je valide. Sans fermer le formulaire, donc pas de retour à la feuille Accueil, je crée un nouveau menu, je choisis la date ! erreur : impossible de lire la propriété Match de la classe WorksheetFunction. Prenez n'importe nature menu, n'importe légume, viande, choisissez une date (il est possible que certains contrôles se remplissent automatiquement),validez. Puis, sans fermer le formulaire, donc sans retour à la feuille accueil, tentez de créer un nouveau menu (même nature menu ou une nouvelle) et voyez ce qui se passe.

Pas trop le temps de chercher, il doit y avoir une procédure d'effacement des contrôles après validation, sinon au plus simple, on ferme le formulaire et le ouvre de nouveau dans la foulée, ce qui revient à le réinitialiser:

Private Sub cmdValidationCréationMenu_Click()
Dim I As Long
'*******************************************************************************
    Application.ScreenUpdating = False
'*******************************************************************************
'Si le menu à la date proposée n'existe pas, on ne fait rien et on sort de la procédure.
    If cbNatureMenuAllégée.ListIndex = -1 Then Exit Sub

'Recherche IndiceMenus.

       I = IndiceMenus(tbCodeNatureMenuAllégée.Value, DateMenu)

    With Range("TabBDMenus").ListObject
        If I = 0 Then
'Menu à la date proposée non trouvé : ajout d'une ligne à la fin du tableau structuré TabBDMenus. ListRowsAdd : Ajoute une nouvelle li _
gne à la table représentée par l'objet ListObject spécifié.
            .ListRows.Add
'ListRows.Count : cette proproété renvoie une valeur de type Integer qui représente le nombre d'objets dans la collection.
            I = .ListRows.Count
        End If
'Insertion des données saisies dans le formulaire UF02CréationMenus (objet) vers la feuille BD menus, tableau structuré TabBDMenus. _
.ListColumns : cette propriété renvoie une collection ListColums qui représente toutes les colonnes d'un objet ListObject. Type de don _
nées en lecture seule. DataBodyRange : Cette propriété renvoie un objet Range qui représente la plage de valeurs, à l'exception de la li _
gne d'en-tête dans une table. Type de données en lecture seule. Nature menu : nom de la colonne dans la feuille BD menus, tableau _
structuré TabBDMenus. cbNatureMenu.Value : nom de l'objet dans le formulaire UF02CréationMenus (Objet).
    'TabDate = Split(tbDateMenu, " ") 'Split : Cette propriété a la valeur True si la fenêtre est fractionnée. Type de données Boolean en lectu _
    're-écriture.
        'Zéro pour jour en lettres, un = jour en nombre, deux = mois en lettres, trois = année en nombre. On prend les premier, deuxième et troisiè _
    '    mes termes que l'on colle dans tbMoisMenu.
    '    DateMenu = Format(TabDate(1) & "/" & TabDate(2) & "/" & TabDate(3), "m/d/yyyy")

        .ListColumns("Nature menu").DataBodyRange(I) = cbNatureMenuAllégée.Value
        .ListColumns("Code nature menu").DataBodyRange(I) = tbCodeNatureMenuAllégée.Value
'===============
        .ListColumns("Date menu").DataBodyRange(I) = DateMenu
'===============
        .ListColumns("Date création menu").DataBodyRange(I) = tbDateCréationMenu.Value
        .ListColumns("Légume").DataBodyRange(I) = cbLégumes.Value
        .ListColumns("Code légume").DataBodyRange(I) = tbCodeLégumes.Value
        .ListColumns("Période légume").DataBodyRange(I) = cbPériodeLégumes.Value
        .ListColumns("Code période légume").DataBodyRange(I) = tbCodePériodeLégumes.Value
        .ListColumns("Conditionnement légume").DataBodyRange(I) = cbConditionnementLégumes.Value
        .ListColumns("Code conditionnement légume").DataBodyRange(I) = tbCodeConditionnementLégumes.Value
        .ListColumns("Légume deux").DataBodyRange(I) = cbLégumeDeux.Value
        .ListColumns("Code légume deux").DataBodyRange(I) = tbCodeLégumeDeux.Value
        .ListColumns("Période légume deux").DataBodyRange(I) = cbPériodeLégumeDeux.Value
        .ListColumns("Code période légume deux").DataBodyRange(I) = tbCodePériodeLégumeDeux.Value
        .ListColumns("Conditionnement légume deux").DataBodyRange(I) = cbConditionnementLégumeDeux.Value
        .ListColumns("Code conditionnement légume deux").DataBodyRange(I) = tbCodeConditionnementLégumeDeux.Value
'CDbl : La fonction CLng convertit une expression en un type de données spécifique (Type de données stockant sur 64 bits les nombres à _
virgule flottante en double précision compris entre -1,79769313486231E308 et -4,94065645841247E-324 pour les valeurs négatives, et _
entre 4,94065645841247E-324 et 1,79769313486232E308 pour les valeurs positives. Dans Visual Basic, le signe dièse (#) est le carac _
tère de déclaration du type Double.
    If tbQuantitéLégume.Value <> "" Then
        .ListColumns("Quantité légume").DataBodyRange(I) = CDbl(tbQuantitéLégume.Value)
    Else
        .ListColumns("Quantité légume").DataBodyRange(I) = ""
    End If
    If tbQuantitéLégumeDeux.Value <> "" Then
        .ListColumns("Quantité légume deux").DataBodyRange(I) = CDbl(tbQuantitéLégumeDeux.Value)
    Else
        .ListColumns("Quantité légume deux").DataBodyRange(I) = ""
    End If
        .ListColumns("Viande").DataBodyRange(I) = cbViandes.Value
        .ListColumns("Code viande").DataBodyRange(I) = tbCodeViandes.Value
        .ListColumns("Période viande").DataBodyRange(I) = cbPériodeViandes.Value
        .ListColumns("Code période viande").DataBodyRange(I) = tbCodePériodeViandes.Value
        .ListColumns("Conditionnement viande").DataBodyRange(I) = cbConditionnementViandes.Value
        .ListColumns("Code conditionnement viande").DataBodyRange(I) = tbCodeConditionnementViandes.Value
    If tbQuantitéViandes.Value <> "" Then
        .ListColumns("Quantité viande").DataBodyRange(I) = CDbl(tbQuantitéViandes.Value)
    Else
        .ListColumns("Quantité légume").DataBodyRange(I) = ""
    End If
        .ListColumns("Référence semestre viandes midi weekend").DataBodyRange(I) = tbRéférenceSemestreViandesMidiWeekend.Value
        .ListColumns("Dessert").DataBodyRange(I) = cbDesserts.Value
        .ListColumns("Code dessert").DataBodyRange(I) = tbCodeDesserts.Value
        .ListColumns("Période dessert").DataBodyRange(I) = cbPériodeDesserts.Value
        .ListColumns("Code période dessert").DataBodyRange(I) = tbCodePériodeDesserts.Value
        .ListColumns("Conditionnement dessert").DataBodyRange(I) = cbConditionnementDesserts.Value
        .ListColumns("Code conditionnement dessert").DataBodyRange(I) = tbCodeConditionnementDesserts.Value
    If tbQuantitéDesserts.Value <> "" Then
        .ListColumns("Quantité dessert").DataBodyRange(I) = CDbl(tbQuantitéDesserts.Value)
    Else
        .ListColumns("Quantité dessert").DataBodyRange(I) = ""
    End If
        .ListColumns("Numéro création menu").DataBodyRange(I) = tbNuméroCréationMenu.Value
        .ListColumns("Nom jour férié").DataBodyRange(I) = tbJoursFériés.Value
        .ListColumns("Mois menu").DataBodyRange(I) = tbMoisMenu.Value
        .ListColumns("Nature menu allégée").DataBodyRange(I) = cbNatureMenuAllégée.Value
        .ListColumns("Code nature menu allégée").DataBodyRange(I) = tbCodeNatureMenuAllégée.Value
'Trier la feuille  BD menus, tableau structuré TabBDMenus, par code nature menu allégée et par date. Range.Sort key1 : désigne le pre _
mier champ du tri, soit sous forme de chaîne de nom de plage, soit sous forme d'objet. .Range : détermine les valeurs à trier. Hea _
der:=xlYes : La plage entière ne doit pas être triée.
        .Range.Sort key1:=.ListColumns("Code nature menu allégée"), key2:=.ListColumns("Date menu"), order2:=xlAscending, Header:=xlYes
'Appel de la procédure ModifierNuméroCréationMenu.
    Call ModifierNuméroCréationMenu
    I = IndiceMenus(tbCodeNatureMenuAllégée.Value, DateMenu)
    tbNuméroCréationMenu.Value = .ListColumns("Numéro création menu").DataBodyRange(I)
    End With
'*******************************************************************************
    Unload UF02CréationMenus
    UF02CréationMenus.Show
    Application.ScreenUpdating = False
'*******************************************************************************
End Sub

Comme toujours, votre réponse répond correctement à ma question. Merci Arturo83. Autant que je m'en souvienne, chez BeGood, ce problème ne se pose pas. Il faudra que je vérifie mais, est-ce une cause à effet, le formulaire ne se présente pas de la même manière. Dans l'hypothèse où cela pourrait vous aider, fichier de BeGood dans lequel j'ai créé des menus pour l'année 2027. Je confirme 1) le problème du 20 était absent; 2) Je peux passer d'une date à une autre sans fermer le formulaire.

Je vous demande, pour l'instant, de répondre par Oui ou par Non. Dans mon message de 16 heures 42, je vous ai joint un fichier de BeGood. Dans ce fichier, dans la feuille Liste, il y a le tableau structuré TabProduitsArticlesMenus qui comprend deux colonnes (Quantité repas et Quantité jour), lesquelles n'ont aucun contrôle dans le formulaire. Ce sont les colonnes 6 et 7 dont il est fait référence dans diverses procédures. Ma question : dans le tableau structuré de mon fichier, pourrais-je créer ces colonnes et m'en servir dans le code. Si la réponse est oui, alors je créerai un nouveau message (Quantité repas et Quantité repas jour).

Bonne nuit si vous avez l'intention d'aller dormir.

Bonjour,

Réponse à votre post d'hier à 16:42, comme je vous l'ai dit dans ma réponse de 14:54, je manquais de temps pour regarder plus en détail votre fichier, j'ai donc opté pour une méthode simple et rapide, mais j'avais bien précisé qu'il devait y avoir sûrement une procédure d'effacement des contrôles après validation, je viens de regarder plus aisément, et effectivement il y en a bien une mais qui ne s'applique pas après validation, dans le fichier de BeGood, elle s'applique lors de la sélection de la nature menu, rien ne vous empêche de reprendre cette méthode si vous préférez, peu importe la méthode que vous choisirez, l'essentiel étant d'en comprendre le raisonnement.

Réponse à votre post de 00:26: Vous pouvez ajouter les colonnes que vous souhaitez, mais avant de créer un autre fil, essayez de trouver le moyen de remplir ces colonnes par vos propres moyens, quitte, pour vous faciliter la tache, à vous inspirer du travail de BeGood, puisqu'il vous en a donné l'idée.

Bonjour Arturo83,

Je vais regarder le fichier de BeGood : je pense que la solution de BeGood se trouve dans la procédure EffacerContrôles.

Pour les nouvelles colonnes, je vais solliciter une nouvelle fois le fichier de Begood et chercher Quantité : j'ai vu que dans certaines procédures, il utilisait le mot État qui ne doit pas faire partie du langage VBA et qu'il a dû déclarer quelque part. Je vais risquer de l'utiliser. C'était bien dans mon intention d'examiner le fichier de BeGood, d'écrire mon code et faute du résultat attendu, alors de créer un nouveau fil. Voir le fil Quantité un repas Quantité repas jour

Rechercher des sujets similaires à "quantite legumes pas frites supprimer"