Code nom légume ne se remplit pas correctement

BUDGETS Messages postés 1612 Date d'inscription   Statut Membre Dernière intervention   -  
mariam-j Messages postés 1656 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour à toutes et à tous,

Feuille Accueil : clic sur création menu

Formulaire UF02_Création menus : Nom nature création menu : clic sur menu journalier; Date menu : Vendredi 05 janvier 2024; Nom légume : Asperges. Le code nom légume sort soit LMR01 ou LWD01 alors qu'il devrait mettre LSV01. merci de m'apporter votre aide.

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

https://www.cjoint.com/c/MKxltku5pns


BUDGETS

7 réponses

  1. CCMBot
     
    Bonjour !
    L'IA qui aime les défis, est là !
    Il semble qu'il y ait une erreur dans la logique de votre code VB/VBA qui attribue les codes aux légumes. Avez-vous vérifié si le bon code est associé aux Asperges ? Si ce n'est pas le cas, assurez-vous d'associer "Asperges" à "LSV01" dans votre base de données ou votre tableau de correspondance. Si le problème persiste, il peut être utile de revoir l'ensemble du code pour identifier une possible erreur de logique ou de syntaxe. Il sera plus facile d'identifier l'origine du problème en ayant accès à votre code VBA. Malheureusement, le lien que vous avez fourni ne fonctionne pas, pouvez-vous reposter le code ici ou décrire plus précisément la partie de votre code qui gère cette fonctionnalité ?

    0
  2. BUDGETS Messages postés 1612 Date d'inscription   Statut Membre Dernière intervention  
     

    Bonjour,

    Quand je clique sur le lien de mon message, le fichier s'ouvre bien. 

    Je vous l'envoie de nouveau. Je pense que les instructions concernées sont dans la procédure tbDateMenu_Change, select case jour semaine, case 5 puisqu'il s'agit d'un légume du vendredi.

    https://www.cjoint.com/c/MKymjXb00Qs


    0
    1. bazfile Messages postés 58491 Date d'inscription   Statut Modérateur Dernière intervention   20 266
       

      C'est BoBot (l'IA de CCM) qui t'a répondu, ce qu'il souhaite c'est du code pas un fichier, voir les-balises-de-code.

      0
  3. BUDGETS Messages postés 1612 Date d'inscription   Statut Membre Dernière intervention  
     

    C'est idiot. C'est plus logique de joindre un fichier complet que du code, enfin c'est mon avis.

    Option Explicit
    
    Private Sub cmdRetourFeuilleAccueil_Click()
        'Va fermer le formulaire et retourner sur la feuille Accueil.
            Unload Me
    End Sub
    
    Private Sub UserForm_Activate()
    tbDateMenu.Left = 488
        'Initialisation de la Zone de liste modifiable cbNomNatureCréationMenu.
            cbNomNatureCréationMenu.List = Range("TabNatureCréation").Value
        'Appel de la procédure MasquerLégumeDeux.
            Call MasquerLégumeDeux
    End Sub
    
    Private Sub MasquerLégumeDeux()
        'Va masquer Les Intitulés (lb), les Zones de liste modifiable (cb) et les Zones de texte (tb) concernant Légume deux dès l'ouverture du formulaire.
            lbNomLégumeDeux.Visible = False
            cbNomLégumeDeux.Visible = False
            tbCodeNomLégumeDeux.Visible = False
            
            lbNomPériodelégumeDeux.Visible = False
            cbNomPériodeLégumeDeux.Visible = False
            tbCodeNomPériodeLégumeDeux.Visible = False
            
            lbNomConditionnementLégumeDeux.Visible = False
            cbNomConditionnementLégumeDeux.Visible = False
            tbCodeNomConditionnementLégumeDeux.Visible = False
            
            lbQuantitéLégumeDeux.Visible = False
            tbQuantitéLégumeDeux.Visible = False
    End Sub
    
    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.
            tbDateMenu = Format(Calendrier.Choix(tbDateMenu), "d mmmm yyyy")
            Call MiseÀJourTitre
    End Sub
    
    Private Sub cbNomNatureCréationMenu_Change()
        If cbNomNatureCréationMenu.ListIndex = -1 Then
            'Nom nature création menu invalide, on efface la Zone de liste modifiable (cb) et la Zone de texte (tb).
            tbCodeNomNatureCréationMenu.Value = Empty
            cbNomNatureCréationMenu.Value = Empty
        Else
            'Nom nature création menu valide, on affiche le code nom nature création menu.
                tbCodeNomNatureCréationMenu.Value = cbNomNatureCréationMenu.Column(1)
        End If
        'Appel de la procédure Mise à jour Titre qui modifiera la caption de l'Intitulé lbTitre.
        Call MiseÀJourTitre
        'Période viande : à l'ouverture du programme, c'est le True (Vrai) qui s'exécute; quand on choisit menu viande midi weekend dans la Zone de liste modifiable cnNomNatureCréa
        'tionMenu, c'est la False (Faux) qui alors s'exécute.
            If cbNomNatureCréationMenu.Value = "Menu viande midi weekend" Then
                'lbNomPériodeViandeMidiWeekend.Visible = False
                'tbNomPériodeViandeMidiWeekend.Visible = False
                Call MasquerLégume
                Call MasquerDessert
            Else
                'lbNomPériodeViandeMidiWeekend.Visible = True
                'tbNomPériodeViandeMidiWeekend.Visible = True
                Call AfficherLégume
                Call AfficherDessert
            End If
            'Si la Zone de texte tbDayeMenu est différente de vide, alors appel de la procédure tbDateMenu_Change
                If tbDateMenu.Value <> "" Then Call tbDateMenu_Change
    End Sub
    
    Sub MiseÀJourTitre()
        'Modifie la caption de l'Intitulé lbTitre (anciennement ModificationLibellés) en ajoutant le contenu de la Zone de liste modifiable cbNomNatureCréationMenu et le contenu de la
        'Zone de texte tbDateMenu.
            Me.lbTitre = "Création " & LCase(cbNomNatureCréationMenu) & " du " & LCase(tbDateMenu.Value) & "."
    End Sub
    
    Private Sub MasquerLégume()
        'Va masquer les Intitulés (lb), les Zones de liste modifiable (cb) et les Zones de texte (tb) quand la Zone de liste modifiable cbMenuViandeMidiWeekend est actif.
            lbNomLégume.Visible = False
            cbNomLégume.Visible = False
            tbCodeNomLégume.Visible = False
            
            lbNomPériodelégume.Visible = False
            cbNomPériodeLégume.Visible = False
            tbCodeNomPériodeLégume.Visible = False
            
            lbNomConditionnementLégume.Visible = False
            cbNomConditionnementLégume.Visible = False
            tbCodeNomConditionnementLégume.Visible = False
            
            lbQuantitéLégume.Visible = False
            tbQuantitéLégume.Visible = False
    End Sub
    
    Private Sub MasquerDessert()
        'Va masquer les Intitulés (lb), les Zones de liste modifiable (cb) et les Zones de texte (tb) quand la Zone de liste modifiable cbMenuViandeMidiWeekend est actif.
            lbNomDessert.Visible = False
            cbNomDessert.Visible = False
            tbCodeNomDessert.Visible = False
            
            lbNomPériodeDessert.Visible = False
            cbNomPériodeDessert.Visible = False
            tbCodeNomPériodeDessert.Visible = False
            
            lbNomConditionnementDessert.Visible = False
            cbNomConditionnementDessert.Visible = False
            tbCodeNomConditionnementDessert.Visible = False
            
            lbQuantitéDessert.Visible = False
            tbQuantitéDessert.Visible = False
    End Sub
    
    Private Sub AfficherLégume()
        'Va affichquer les Intitulés (lb), les Zones de liste modifiable (cb) et les Zones de texte (tb) quand la Zone de liste modifiable cbMenuViandeMidiWeekend est inactif.
            lbNomLégume.Visible = True
            cbNomLégume.Visible = True
            tbCodeNomLégume.Visible = True
            
            lbNomPériodelégume.Visible = True
            cbNomPériodeLégume.Visible = True
            tbCodeNomPériodeLégume.Visible = True
            
            lbNomConditionnementLégume.Visible = True
            cbNomConditionnementLégume.Visible = True
            tbCodeNomConditionnementLégume.Visible = True
            
            lbQuantitéLégume.Visible = True
            tbQuantitéLégume.Visible = True
    End Sub
    
    Private Sub AfficherDessert()
        'Va afficher les Intitulés (lb), les Zones de liste modifiable (cb) et les Zones de texte (tb) quand la Zone de liste modifiable cbMenuViandeMidiWeekend est inactif.
            lbNomDessert.Visible = True
            cbNomDessert.Visible = True
            tbCodeNomDessert.Visible = True
            
            lbNomPériodeDessert.Visible = True
            cbNomPériodeDessert.Visible = True
            tbCodeNomPériodeDessert.Visible = True
            
            lbNomConditionnementDessert.Visible = True
            cbNomConditionnementDessert.Visible = True
            tbCodeNomConditionnementDessert.Visible = True
            
            lbQuantitéDessert.Visible = True
            tbQuantitéDessert.Visible = True
    End Sub
    
    Private Sub AfficherLégumeDeux()
        'Va afficher Les Intitulés (lb), les Zones de liste modifiable (cb) et les Zones de texte (tb) quand la Zone de liste modifiable cbMenuViandeMidiWeekend est inactif..
            lbNomLégumeDeux.Visible = True
            cbNomLégumeDeux.Visible = True
            tbCodeNomLégumeDeux.Visible = True
            
            lbNomPériodelégumeDeux.Visible = True
            cbNomPériodeLégumeDeux.Visible = True
            tbCodeNomPériodeLégumeDeux.Visible = True
            
            lbNomConditionnementLégumeDeux.Visible = True
            cbNomConditionnementLégumeDeux.Visible = True
            tbCodeNomConditionnementLégumeDeux.Visible = True
            
            lbQuantitéLégumeDeux.Visible = True
            tbQuantitéLégumeDeux.Visible = True
    End Sub
    
    Private Sub tbDateMenu_Change()
    Dim J As Integer, JourSemaine As Integer
        'Effacement préalable des Zones de liste modifiable.
            cbNomLégume.Clear
            cbNomLégumeDeux.Clear
            cbNomViande.Clear
            cbNomDessert.Clear
            
        'Si verification Date menu NOk, on ne fait rien (on sort de la procédure).
            If VérifDateMenu = False Then Exit Sub
        'Vérification jour férié.
            'On error Résume Next : lorsqu'une erreur survient, le contrôle est transmis à l'instruction qui suit immédiatement celle où l'erreur s'est produite, et l'exécution continue. Il
            'est recommandé d'utiliser cette formulation plutôt que l'instruction On Error GoTo pour accéder à des objets.
                On Error Resume Next
            '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ésul
            'tats 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 matri-
            'cielle 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 fonc-
            'tions LookUp lorsque vous avez besoin de la position d'un élément dans une plage au lieu de l'élément proprement dit.
                J = WorksheetFunction.Match(CLng(DateValue(tbDateMenu.Value)), Range("TabJoursFériés[Date jour férié]"), 0)
            'On Error GoTo : valide la routine de gestion d'erreur commençant à la ligne indiquée dans l'argument Line. L'argument Line peut être une étiquette de ligne ou un numéro
            'de ligne. En cas d'erreur d'exécution, le contrôle est transmis au point indiqué dans l'argument Line, ce qui valide le gestionnaire d'erreurs. La ligne indiquée dans l'argu-
            'ment Line doit se trouver dans la même procédure que l'instruction On Error, sinon une erreur se produit au moment de la compilation.
                On Error GoTo 0
                If J <> 0 Then
                    tbNomJourFérié.Value = Range("TabJoursFériés[Nom jour férié]").Item(J)
                Else
                    tbNomJourFérié.Value = ""
                End If
                
                JourSemaine = Weekday(tbDateMenu.Value, vbMonday)
                'Select Case exécute un des blocs d'instructions indiqués, selon la valeur d'une expression. Selon la valeur de la Zone de liste modifiable cbNomNatureCréationMenu et
                'selon la valeur de la Case, va effectuer les affichages demandés.
                    Select Case cbNomNatureCréationMenu.Value
                        Case Is = "Menu midi retraite"
                            'Du lundi au vendredi inclus, si le jour de la semaine est inférieur ou égal à cinq, alors il va remplir les Zones de liste modifiable cbNomLégume, cbNomViande,
                            'cbNomDessert correspondant à Menu midi retraite.
                                If JourSemaine <= 5 Then
                                    cbNomLégume.List = Range("TabLégumesMidiRetraite").Value
                                    cbNomViande.List = Range("TabViandesMidiRetraite").Value
                                    cbNomDessert.List = Range("TabDessertMidiRetraite").Value
                                End If
                        Case Is = "Menu journalier"
                            'Viande toute la semaine, dessert cas le plus fréquent.
                                cbNomViande.List = Range("TabViandesSoirs").Value
                                cbNomDessert.List = Range("TabDessertSoir").Value
                            'Particularités légumes et desserts selon jour de la semaine.  'Select Case exécute un des blocs d'instructions indiqués, selon la valeur d'une expression. Selon
                            'la valeur de JourSemaine, va effectuer les affichages demandés.
                                Select Case JourSemaine
                                    'Lundi et mardi.
                                    Case 1, 2
                                        cbNomLégume.List = Range("TabLégumesSoirsLundiMardi").Value
                                    'Mercredi et jeudi.
                                    Case 3, 4
                                        cbNomLégume.List = Range("TabLégumesSoirsMercrediJeudi").Value
                                    'Vendredi.
                                    Case 5
                                        cbNomLégume.List = Range("TabLégumesSoirsVendredi").Value
                                    'Samedi.
                                    Case 6
                                        cbNomLégume.List = Range("TabLégumesweekendSamedi").Value
                                        cbNomDessert.List = Range("TabDessertsWeekend").Value
                                     'Dimanche.
                                    Case 7
                                        cbNomLégume.List = Range("TabLégumesweekendDimanche").Value
                                        cbNomDessert.List = Range("TabDessertsWeekend").Value
                                End Select
                        Case Is = "Menu viande midi weekend"
                            cbNomViande.List = Range("TabViandesMidiWeekend").Value
                    End Select
                    'Données menu.
        Call RécupérationMenu
        tbJour = Format(tbDateMenu, "dddd")
        tbDateMenu.Left = 555
                    
    End Sub
    
    Private Function VérifDateMenu() As Boolean
        VérifDateMenu = True
        'Select Case exécute un des blocs d'instructions indiqués, selon la valeur d'une expression. Selon la valeur de la Zone de liste modifiable cbNomNatureCréationMenu et selon
        'la valeur de la Case, va afficher le MsgBox concerné si le jour de la semaine est supérieur ou égal à six (Menu midi retraite) ou si le jour de la semaine est inférieur à six (me-
        'nu viande midi weekend).
            Select Case cbNomNatureCréationMenu.Value
                Case Is = "Menu midi retraite"
                    If Weekday(tbDateMenu.Value, vbMonday) >= 6 Then
                        MsgBox "Menu midi retraite : saisir une date du lundi au vendredi inclus !", vbExclamation
                    End If
                Case Is = "Menu viande midi weekend"
                    If Weekday(tbDateMenu.Value, vbMonday) < 6 Then
                        MsgBox "Menu viande midi weekend : saisir une date du samedi au dimanche inclus !", vbExclamation
                        VérifDateMenu = False
                    End If
            End Select
    End Function
    
    Private Sub RécupérationMenu()
    Dim I As Long
        'Recherche existence menu.
        I = IndiceMenu(cbNomNatureCréationMenu.Value, DateValue(tbDateMenu.Value))
        If I > 0 Then
            'Menu existant dans la feuille BD menu, tableau structuré TabBDMenus : récupération infos menu.
            MsgBox "Le menu " & cbNomNatureCréationMenu & " du " & Format(tbDateMenu, "dddd d mmmm yyyy") & " exite déjà dans la feuille BD menus, tableau structuré tabBDMenus. " & vbCrLf & vbCrLf & "Vous pouvez le modifier ou le supprimer.", vbExclamation
            Call RécupérationInfosMenu(I)
        Else
            'Menu inexistant dans la feuille BD menus, tableau structuré TabBDMenus : réinitialisation des données du formulaire.
                cbNomLégume.Value = ""
                cbNomLégumeDeux.Value = ""
                cbNomViande.Value = ""
                cbNomDessert.Value = ""
                tbQuantitéLégume.Value = ""
                tbQuantitéViande.Value = ""
                tbQuantitéDessert.Value = ""
                'Prédéfinition des valeurs.
                'WorksheetFunction.CountIfs : compte le nombre de cellules à l'intérieur d'une plage qui répondent à plusieurs critères.
                tbNuméroCréationMenu.Value = tbCodeNomNatureCréationMenu.Value & "-" & Format(WorksheetFunction.CountIfs(Range("TabBDMenus[Code Nom Nature Création Menu]"), tbCodeNomNatureCréationMenu.Value) + 1, "00")
                tbDateCréationMenu.Value = Format(Date, "dddd d mmmm yyyy")
                tbNomMoisMenu.Value = Format(DateValue(tbDateMenu.Value), "mmmm yyyy")
                Call PrédéfinitionsSpécifiques
        End If
    End Sub
    
    Private Function IndiceMenu(ByVal NomNatureCréationMenu As String, ByVal DateMenu As Date) As Long
    Dim I As Long
        'Renvoie l'indice du menu de la feuille BD menus, tableau structuré TabBDMenus, pour le code menu défini si le menu existe. Renvoie zéro si le menu n'existe pas.
            IndiceMenu = 0
            For I = 1 To Range("TabBDMenus").ListObject.ListRows.Count
                If Range("TabBDMenus[Nom nature création menu]").Item(I) = NomNatureCréationMenu And Range("TabBDMenus[Date menu]").Item(I) = DateMenu Then
                    IndiceMenu = I
                    Exit Function
                End If
            Next I
    End Function
    
    Private Sub RécupérationInfosMenu(ByVal Indice As Long)
        With [TabBDMenus].ListObject
        'Va remplir les Zones de liste modifiable (cb) et les Zones de texte (tb) en allant chercher les informations dans la feuille BD menus, tableau structuré BDMenus.
            'DataBodyRange : cette propriété renvoie un objet Range qui représente la plage de valeurs, à l'exception de la ligne d'en-tête, dans un tableau structuré. Type de données
            'en lecture seule.
            cbNomLégume.Value = .ListColumns("Nom légume").DataBodyRange(Indice)
            tbCodeNomLégume.Value = .ListColumns("Code nom légume").DataBodyRange(Indice)
            cbNomPériodeLégume.Value = .ListColumns("Nom période légume").DataBodyRange(Indice)
            tbCodeNomPériodeLégume.Value = .ListColumns("Code nom période légume").DataBodyRange(Indice)
            cbNomConditionnementLégume.Value = .ListColumns("Nom conditionnement légume").DataBodyRange(Indice)
            tbCodeNomConditionnementLégume.Value = .ListColumns("Code nom conditionnement légume").DataBodyRange(Indice)
            cbNomLégumeDeux.Value = .ListColumns("Nom légume deux").DataBodyRange(Indice)
            tbCodeNomLégumeDeux.Value = .ListColumns("Code nom légume deux").DataBodyRange(Indice)
            cbNomPériodeLégumeDeux.Value = .ListColumns("Nom période légume deux").DataBodyRange(Indice)
            tbCodeNomPériodeLégumeDeux.Value = .ListColumns("Code nom période légume deux").DataBodyRange(Indice)
            cbNomConditionnementLégumeDeux.Value = .ListColumns("Nom conditionnement légume deux").DataBodyRange(Indice)
            tbCodeNomConditionnementLégumeDeux.Value = .ListColumns("Code nom conditionnement légume deux").DataBodyRange(Indice)
            'Replace : renvoie une chaîne dans laquelle une sous-chaîne spécifiée a été remplacée plusieurs fois par une autre sous-chaîne.
            tbQuantitéLégume.Value = Replace(Format(.ListColumns("Quantité légume").DataBodyRange(Indice), "# ##0.00"), ",", ",")
            'Replace : renvoie une chaîne dans laquelle une sous-chaîne spécifiée a été remplacée plusieurs fois par une autre sous-chaîne.
            tbQuantitéLégumeDeux.Value = Replace(Format(.ListColumns("Quantité légume deux").DataBodyRange(Indice), "# ##0.00"), ",", ",")
            cbNomViande.Value = .ListColumns("Nom viande").DataBodyRange(Indice)
            tbCodeNomViande.Value = .ListColumns("Code nom viande").DataBodyRange(Indice)
            cbNomPériodeViande.Value = .ListColumns("Nom période viande").DataBodyRange(Indice)
            tbCodeNomPériodeViande.Value = .ListColumns("Code nom période viande").DataBodyRange(Indice)
            cbNomConditionnementViande.Value = .ListColumns("Nom conditionnement viande").DataBodyRange(Indice)
            tbCodeNomConditionnementViande.Value = .ListColumns("Code nom conditionnement viande").DataBodyRange(Indice)
            tbNomPériodeViandeMidiWeekend.Value = .ListColumns("Nom période viande midi weekend").DataBodyRange(Indice)
            'Replace : renvoie une chaîne dans laquelle une sous-chaîne spécifiée a été remplacée plusieurs fois par une autre sous-chaîne.
            tbQuantitéViande.Value = Replace(Format(.ListColumns("Quantité viande").DataBodyRange(Indice), "# ##0.00"), ",", ",")
            cbNomDessert.Value = .ListColumns("Nom dessert").DataBodyRange(Indice)
            tbCodeNomDessert.Value = .ListColumns("Code nom dessert").DataBodyRange(Indice)
            cbNomPériodeDessert.Value = .ListColumns("Nom période dessert").DataBodyRange(Indice)
            tbCodeNomPériodeDessert.Value = .ListColumns("Code nom période dessert").DataBodyRange(Indice)
            cbNomConditionnementDessert.Value = .ListColumns("Nom conditionnement dessert").DataBodyRange(Indice)
            tbCodeNomConditionnementDessert.Value = .ListColumns("Code nom conditionnement dessert").DataBodyRange(Indice)
            'Replace : renvoie une chaîne dans laquelle une sous-chaîne spécifiée a été remplacée plusieurs fois par une autre sous-chaîne.
            tbQuantitéDessert.Value = Replace(Format(.ListColumns("Quantité dessert").DataBodyRange(Indice), "# ##0.00"), ",", ",")
            tbNuméroCréationMenu.Value = .ListColumns("Numéro création menu").DataBodyRange(Indice)
            tbDateCréationMenu.Value = .ListColumns("Date création menu").DataBodyRange(Indice)
            tbNomMoisMenu.Value = .ListColumns("Nom mois menu").DataBodyRange(Indice)
        End With
    End Sub
    
    Private Sub PrédéfinitionsSpécifiques()
    Dim I As Long, LigMoins1 As Long, LigMoins2 As Long
        'Select Case exécute un des blocs d'instructions indiqués, selon la valeur d'une expression. Selon la valeur de la Zone de liste modifiable cbNomNatureCréationMenu et selon
        'valeur de la Case, va exécuter les instructions qui suivent la case.
        Select Case cbNomNatureCréationMenu.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 ou-
                'vrés excluent les weekends et les jours de congès. Utilisez la Fonction WorkDay pour exclure les weekends 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 effectués.
                 LigMoins1 = IndiceMenu(cbNomNatureCréationMenu.Value, WorksheetFunction.WorkDay(DateValue(tbDateMenu.Value), -1))
                    If LigMoins1 > 0 Then
                        If Range("TabBDMenus[Nom légume]").Item(LigMoins1) = "Maïs" Or Range("TabBDMenus[Nom légume]").Item(LigMoins1) = "Radis" Then
                            LigMoins2 = IndiceMenu(cbNomNatureCréationMenu.Value, WorksheetFunction.WorkDay(DateValue(tbDateMenu.Value), -2))
                            If LigMoins2 = 0 Or Range("TabBDMenus[Nom légume]").Item(LigMoins2) <> Range("TabBDMenus[Nom légume]").Item(LigMoins1) Then
                            cbNomLégume.Value = Range("TabBDMenus[Nom légume]").Item(LigMoins1)
                            End If
                        End If
                    End If
                    'Viandes mardi à vendredi identiques à viande lundi précédent.
                    If Weekday(DateValue(tbDateMenu.Value), vbMonday) >= 2 And Weekday(DateValue(tbDateMenu), vbMonday) <= 5 Then
                        I = IndiceMenu(cbNomNatureCréationMenu.Value, DateValue(tbDateMenu.Value) - Weekday(DateValue(tbDateMenu.Value), vbMonday) + 1)
                        If I > 0 Then cbNomViande.Value = Range("TabBDMenus[Nom viande]").Item(I)
                    End If
                    'Dessert unique toute la semaine.
                    cbNomDessert.Value = "Pomme"
            Case Is = "Menu journalier"
                'Légume mardi identique au légume lundi ou légume jeudi identique au légume mercredi.
                If Weekday(DateValue(tbDateMenu), vbMonday) = 2 Or Weekday(DateValue(tbDateMenu.Value), vbMonday) = 4 Then
                    I = IndiceMenu(cbNomNatureCréationMenu.Value, DateValue(tbDateMenu.Value) - 1)
                    If I > 0 Then cbNomLégume.Value = Range("TabBDMenus[Nom légume]").Item(I)
                    If I > 0 Then tbQuantitéLégume.Value = Range("TabBDMenus[Quantité légume]").Item(I)
                End If
            'Dessert unique en semaine.
                If Weekday(DateValue(tbDateMenu.Value), vbMonday) <= 5 Then
                    cbNomDessert.Value = "Pomme"
                    'tbCodeNomDessert.Value = "DS01"
                    'cbNomPériodeDessert.Value = "Lundi à vendredi soirs"
                    'tbCodeNomPériodeDessert.Value = "PAM06"
                End If
            '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
            Case Is = "Menu viande midi weekend"
                'Période viande midi weekend.
                    If Month(DateValue(tbDateMenu.Value)) <= 6 Then
                        tbNomPériodeViandeMidiWeekend.Value = "Premier semestre"
                    Else
                        tbNomPériodeViandeMidiWeekend.Value = "Deuxième semestre"
                    End If
        End Select
    End Sub
    
    Private Sub cbNomLégume_Change()
    Dim I As Long
    'Ne pas supprimer : utile pour la création d'un nouveau menu.
        'Recherche existence article dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus afin de remplir la Zone de texte tbCodeNomLégume, la zone de liste mo-
        'difiable cbNomPériodeLégume, la Zone de texte tbCodeNomPériodeLégume, la Zone de liste modifiable cbNomConditionnementLégume, la Zone de texte tbCodeNomCondi-
        'tionnementLégume.
        I = IndiceArticle(cbNomLégume)
        If I > 0 Then
            'Article existant : récupération des données dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus.
            tbCodeNomLégume.Value = Range("TabBDArticlesMenus[Code nom articles menus]").Item(I)
            cbNomPériodeLégume.Value = Range("TabBDArticlesMenus[Nom période articles menus]").Item(I)
            tbCodeNomPériodeLégume.Value = Range("TabBDArticlesmenus[Code nom période articles menus]").Item(I)
            cbNomConditionnementLégume.Value = Range("TabBDArticlesMenus[nom conditionnement articles menus]").Item(I)
            tbCodeNomConditionnementLégume.Value = Range("TabBDArticlesMenus[Code nom conditionnement articles menus]").Item(I)
            tbQuantitéLégume.Value = Range("TabBDArticlesMenus[Quantité pour un repas]").Item(I)
        Else
            'Article inexistant : effacement des données.
            tbCodeNomLégume.Value = ""
            cbNomPériodeLégume.Value = ""
            tbCodeNomPériodeLégume.Value = ""
            cbNomConditionnementLégume.Value = ""
            tbCodeNomConditionnementLégume.Value = ""
            tbQuantitéLégume.Value = ""
        End If
        'Cas particulier Légume deux.
        If cbNomLégume.Value = "Frites" Then
            Call AfficherLégumeDeux
            'Le code avant le nom est utile pour savoir trouver la bonne ligne du dimanche soir.
            tbCodeNomLégumeDeux.Value = "LWD013"
            cbNomLégumeDeux.Value = "Asperges"
        Else
            cbNomLégumeDeux.Value = ""
            Call MasquerLégumeDeux
        End If
        'Cas particulier légume-viande combinés lundi mardi soirs.
    'Select Case exécute un des blocs d'instructions indiqués, selon la valeur d'une expression. Selon la valeur de la Zone de liste modifiable cbNomLégume et du nm de la case,
    'va remplir la zone de liste modifiable cbNomViande de son nom de viande adéquat.
        Select Case cbNomLégume.Value
            Case Is = "Cassoulet"
                cbNomViande.Value = "Viande cassoulet"
            Case Is = "Choucroute"
                cbNomViande.Value = "Viande choucroute"
            Case Is = "Paella"
                cbNomViande.Value = "Viande paella"
        End Select
    End Sub
    
    Private Sub cbNomLégumeDeux_Change()
    Dim I As Long
    'Ne pas supprimer : utile pour la création d'un nouveau menu.
        'Recherche existence article dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus afin de remplir la Zone de texte tbCodeNomLégumeDeux, la zone de
        'liste modifiable cbNomPériodeLégumeDeux, la Zone de texte tbCodeNomPériodeLégumeDeux, la Zone de liste modifiable cbNomConditionnementLégumeDeux, la Zone de
        'texte tbCodeNomCondi-tionnementLégumeDeux.
        I = IndiceArticle(cbNomLégumeDeux)
        If I > 0 Then
            'Article existant : récupération des données dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus.
            tbCodeNomLégumeDeux.Value = Range("TabBDArticlesMenus[Code nom articles menus]").Item(I)
            cbNomPériodeLégumeDeux.Value = Range("TabBDArticlesMenus[Nom période articles menus]").Item(I)
            tbCodeNomPériodeLégumeDeux.Value = Range("TabBDArticlesmenus[Code nom période articles menus]").Item(I)
            cbNomConditionnementLégumeDeux.Value = Range("TabBDArticlesMenus[nom conditionnement articles menus]").Item(I)
            tbCodeNomConditionnementLégumeDeux.Value = Range("TabBDArticlesMenus[Code nom conditionnement articles menus]").Item(I)
            tbQuantitéLégumeDeux.Value = Range("TabBDArticlesMenus[Quantité pour un repas]").Item(I)
        Else
            'Article inexistant : effacement des données.
            tbCodeNomLégumeDeux.Value = ""
            cbNomPériodeLégumeDeux.Value = ""
            tbCodeNomPériodeLégumeDeux.Value = ""
            cbNomConditionnementLégumeDeux.Value = ""
            tbCodeNomConditionnementLégumeDeux.Value = ""
            tbQuantitéLégumeDeux.Value = ""
        End If
    End Sub
    Private Sub cbNomViande_Change()
    Dim I As Long
    'Ne pas supprimer : utile pour la création d'un nouveau menu.
        'Recherche existence article dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus afin de remplir la Zone de texte tbCodeNomViande, la zone de liste mo-
        'difiable cbNomPériodeViande, la Zone de texte tbCodeNomPériodeViande, la Zone de liste modifiable cbNomConditionnementViande, la Zone de texte tbCodeNomCondition-
        'nementViande.
        I = IndiceArticle(cbNomViande)
        If I > 0 Then
            'Article existant : récupération des données dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus.
            tbCodeNomViande.Value = Range("TabBDArticlesMenus[Code nom articles menus]").Item(I)
            cbNomPériodeViande.Value = Range("TabBDArticlesMenus[Nom période articles menus]").Item(I)
            tbCodeNomPériodeViande.Value = Range("TabBDArticlesmenus[Code nom période articles menus]").Item(I)
            cbNomConditionnementViande.Value = Range("TabBDArticlesMenus[nom conditionnement articles menus]").Item(I)
            tbCodeNomConditionnementViande.Value = Range("TabBDArticlesMenus[Code nom conditionnement articles menus]").Item(I)
            tbQuantitéViande.Value = Range("TabBDArticlesMenus[Quantité pour un repas]").Item(I)
        Else
            'Article inexistant : effacement des données.
            tbCodeNomViande.Value = ""
            cbNomPériodeViande.Value = ""
            tbCodeNomPériodeViande.Value = ""
            cbNomConditionnementViande.Value = ""
            tbCodeNomConditionnementViande.Value = ""
            tbQuantitéViande.Value = ""
        End If
        End Sub
    
    Private Sub cbNomDessert_Change()
    Dim I As Long
    'Ne pas supprimer : utile pour la création d'un nouveau menu.
        'Recherche existence article dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus afin de remplir la Zone de texte tbCodeNomDessert, la zone de liste mo-
        'difiable cbNomPériodeDessert, la Zone de texte tbCodeNomPériodeDessert, la Zone de liste modifiable cbNomConditionnementDessert, la Zone de texte tbCodeNomCondi-
        'tionnementDessert.
        I = IndiceArticle(cbNomDessert)
        If I > 0 Then
            'Article existant : récupération des données dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus.
            tbCodeNomDessert.Value = Range("TabBDArticlesMenus[Code nom articles menus]").Item(I)
            cbNomPériodeDessert.Value = Range("TabBDArticlesMenus[Nom période articles menus]").Item(I)
            tbCodeNomPériodeDessert.Value = Range("TabBDArticlesmenus[Code nom période articles menus]").Item(I)
            cbNomConditionnementDessert.Value = Range("TabBDArticlesMenus[nom conditionnement articles menus]").Item(I)
            tbCodeNomConditionnementDessert.Value = Range("TabBDArticlesMenus[Code nom conditionnement articles menus]").Item(I)
            tbQuantitéDessert.Value = Range("TabBDArticlesMenus[Quantité pour un repas]").Item(I)
        Else
            'Article inexistant : effacement des données.
            tbCodeNomDessert.Value = ""
            cbNomPériodeDessert.Value = ""
            tbCodeNomPériodeDessert.Value = ""
            cbNomConditionnementDessert.Value = ""
            tbCodeNomConditionnementDessert.Value = ""
            tbQuantitéDessert.Value = ""
        End If
        End Sub
    
    Private Function IndiceArticle(ByVal NomArticle As String) As Long
    Dim Coderecherche As String, Chiff As Byte, 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 line  Valide la routine de gestion d'erreur commençant à la ligne indiquée dans l'argument line. L'argument line peut être une étiquette de ligne ou un numéro de
    'ligne. En cas d'erreur d'exécution, le contrôle est transmis au point indiqué dans l'argument line, ce qui valide le gestionnaire d'erreurs. La ligne indiquée dans l'argument line
    'doit se trouver dans la même procédure que l'instruction On Error ; sinon, une erreur se produit au moment de la compilation.
                    On Error GoTo Gestion_Erreur
    RechercheSuivante1:
                            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Dimanche midi""),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]=""Dimanche midi et soir""),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]=""Dimanche soir""),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]=""Lundi à dimanche soirs""),0)"
                            IndiceArticle = Application.Evaluate(Formule)
                            If IndiceArticle > 0 Then Exit Function
    RechercheSuivante5:
                            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""lundi à vendredi midis""),0)"
                            IndiceArticle = Application.Evaluate(Formule)
                            If IndiceArticle > 0 Then Exit Function
    RechercheSuivante6:
                            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Lundi à vendredi soirs""),0)"
                            IndiceArticle = Application.Evaluate(Formule)
                            If IndiceArticle > 0 Then Exit Function
    RechercheSuivante7:
                            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Lundi et mardi soirs""),0)"
                            IndiceArticle = Application.Evaluate(Formule)
                            If IndiceArticle > 0 Then Exit Function
    RechercheSuivante8:
                            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Mercredi et jeudi soirs""),0)"
                            IndiceArticle = Application.Evaluate(Formule)
                            If IndiceArticle > 0 Then Exit Function
    RechercheSuivante9:
                            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Samedi et dimanche midis""),0)"
                            IndiceArticle = Application.Evaluate(Formule)
                            If IndiceArticle > 0 Then Exit Function
    RechercheSuivante10:
                            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
    RechercheSuivante11:
                            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
    RechercheSuivante12:
                            Formule = "=MATCH(1,(TabBDArticlesMenus[Nom articles menus]=""" & NomArticle & """)*(TabBDArticlesMenus[Nom période articles menus]=""Vendredi 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 Si l'erreur s'est produite dans une procédure contenant le gestionnaire d'erreurs, l'exécution reprend à partir de l'instruction qui suit immédiatement celle qui a pro-
    'voqué l'erreur. Si l'erreur s'est produite dans une procédure appelée, l'exécution reprend à l'instruction qui suit immédiatement la dernière instruction ayant appelé la procédure
    'contenant la routine de gestion d'erreur (ou l'instruction On Error Resume Next).
        Resume Next
    End Function
    
    Function MATCH2(Plage1 As Range, Critère1, Plage2 As Range, Critère2)
    Dim T1, T2 As Variant, I As Long
        T1 = Plage1.Value
        T2 = Plage2.Value
        'LBound : Renvoie une valeur de type Long contenant le plus petit indice disponible pour la dimension indiquée d'un tableau. UBound : Renvoie une valeur de type Long conte-
        'nant le plus grand indice disponible pour la dimension indiquée d'un tableau.
        For I = LBound(T1) To UBound(T2)
            'Like : Permet de comparer deux chaînes.
            If T1(I, 1) Like Critère1 And T2(I, 1) Like Critère2 Then
                MATCH2 = I
                Exit Function
            End If
        Next I
    End Function
    Private Sub tbQuantitéLégume_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        'N'autoriser que la saisie des chiffres et d'une seule virgule. KeyAscii : c'est la référence Ascii qui caractérise le point et la virgule : 44 pour la virgule, 46 pour le point. Va permet
        'tre de transformer le point en virgule lors de la saisie des chiffres du tbQuantitéLégume.Value.
        If KeyAscii = 46 Then KeyAscii = 44
            'InStr : liste des chiffres autorisés.
                If InStr("1234567890,", Chr(KeyAscii)) = 0 Or (InStr(tbQuantitéLégume.Value, ",") <> 0 And Chr(KeyAscii) = ",") Then
                KeyAscii = 0
        End If
    End Sub
    
    Private Sub tbQuantitéLégumeDeux_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        'N'autoriser que la saisie des chiffres et d'une seule virgule. KeyAscii : c'est la référence Ascii qui caractérise le point et la virgule : 44 pour la virgule, 46 pour le point. Va permet
        'tre de transformer le point en virgule lors de la saisie des chiffres du tbQuantitéLégumeDeux.Value.
        If KeyAscii = 46 Then KeyAscii = 44
            'InStr : liste des chiffres autorisés.
                If InStr("1234567890,", Chr(KeyAscii)) = 0 Or (InStr(tbQuantitéLégumeDeux.Value, ",") <> 0 And Chr(KeyAscii) = ",") Then
                KeyAscii = 0
        End If
    End Sub
    
    Private Sub tbQuantitéViande_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        'N'autoriser que la saisie des chiffres et d'une seule virgule. KeyAscii : c'est la référence Ascii qui caractérise le point et la virgule : 44 pour la virgule, 46 pour le point. Va permet
        'tre de transformer le point en virgule lors de la saisie des chiffres du tbQuantitéViande.Value.
        If KeyAscii = 46 Then KeyAscii = 44
            'InStr : liste des chiffres autorisés.
                If InStr("1234567890,", Chr(KeyAscii)) = 0 Or (InStr(tbQuantitéViande.Value, ",") <> 0 And Chr(KeyAscii) = ",") Then
                KeyAscii = 0
        End If
    End Sub
    
    Private Sub tbQuantitéDessert_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        'N'autoriser que la saisie des chiffres et d'une seule virgule. KeyAscii : c'est la référence Ascii qui caractérise le point et la virgule : 44 pour la virgule, 46 pour le point. Va permet
        'tre de transformer le point en virgule lors de la saisie des chiffres du tbQuantitéDessert.Value.
        If KeyAscii = 46 Then KeyAscii = 44
            'InStr : liste des chiffres autorisés.
                If InStr("1234567890,", Chr(KeyAscii)) = 0 Or (InStr(tbQuantitéDessert.Value, ",") <> 0 And Chr(KeyAscii) = ",") Then
                KeyAscii = 0
        End If
    End Sub
    
    Private Sub cmdValidationCréationMenu_Click()
    Dim I As Long
        'Si VérifDateMenu NOk, on ne fait rien et on quitte la procédure.
            If VérifDateMenu = False Then Exit Sub
            
        'Recherche existence menu.
            I = IndiceMenu(cbNomNatureCréationMenu.Value, DateValue(tbDateMenu.Value))
            If I = 0 Then
                'Nouveau menu : dans la feuille BD menus, tableau structuré tabBDMenus, ajouter une ligne vide en fin de tableau.
                    With Range("TabBDMenus").ListObject
                        .ListRows.Add
                        'Dernière ligne du tableau.
                        I = .ListRows.Count
                    End With
            End If
            'Insérer les données saisies dans le formulaire UF02_CréationMenus dans la feuille BD menus, tableau structuré TabBDMenus dans la dernière ligne nouvellement ajoutée.
            'Première partie destination des données (TabBDMenus), deuxième partie (Source des donées : Zone de liste modifiable (cb) et Zones de texte (tb) avec des particularités
            'pour les quantités.
                Range("TabBDMenus[Nom nature création menu]").Item(I) = cbNomNatureCréationMenu.Value
                Range("TabBDMenus[Code nom nature création menu]").Item(I) = tbCodeNomNatureCréationMenu.Value
                Range("TabBDMenus[Date menu]").Item(I) = DateValue(tbDateMenu.Value)
                Range("TabBDMenus[Date création menu]").Item(I) = tbDateCréationMenu.Value
                Range("TabBDMenus[Nom légume]").Item(I) = cbNomLégume.Value
                Range("TabBDMenus[Code nom légume]").Item(I) = tbCodeNomLégume.Value
                Range("TabBDMenus[Nom période légume]").Item(I) = cbNomPériodeLégume.Value
                Range("TabBDMenus[Code nom période légume]").Item(I) = tbCodeNomPériodeLégume.Value
                Range("TabBDMenus[Nom conditionnement légume]").Item(I) = cbNomConditionnementLégume.Value
                Range("TabBDMenus[Code nom conditionnement légume]").Item(I) = tbCodeNomConditionnementLégume.Value
                Range("TabBDMenus[Nom légume deux]").Item(I) = cbNomLégumeDeux.Value
                Range("TabBDMenus[Code nom légume deux]").Item(I) = tbCodeNomLégumeDeux.Value
                Range("TabBDMenus[Nom période légume deux]").Item(I) = cbNomPériodeLégumeDeux.Value
                Range("TabBDMenus[Code nom période légume deux]").Item(I) = tbCodeNomPériodeLégumeDeux.Value
                Range("TabBDMenus[Nom conditionnement légume deux]").Item(I) = cbNomConditionnementLégumeDeux.Value
                Range("TabBDMenus[Code nom conditionnement légume deux]").Item(I) = tbCodeNomConditionnementLégumeDeux.Value
                If tbQuantitéLégume <> "" Then
                    Range("TabBDMenus[Quantité légume]").Item(I) = CDbl(tbQuantitéLégume.Value)
                End If
                If tbQuantitéLégumeDeux <> "" Then
                    Range("TabBDMenus[Quantité légume deux]").Item(I) = CDbl(tbQuantitéLégumeDeux.Value)
                End If
                Range("TabBDMenus[Nom viande]").Item(I) = cbNomViande.Value
                Range("TabBDMenus[Code nom viande]").Item(I) = tbCodeNomViande.Value
                Range("TabBDMenus[Nom période viande]").Item(I) = cbNomPériodeViande.Value
                Range("TabBDMenus[Code nom période viande]").Item(I) = tbCodeNomPériodeViande.Value
                Range("TabBDMenus[Nom conditionnement viande]").Item(I) = cbNomConditionnementViande.Value
                Range("TabBDMenus[Code nom conditionnement viande]").Item(I) = tbCodeNomConditionnementViande.Value
                Range("TabBDMenus[Nom période viande midi weekend]").Item(I) = tbNomPériodeViandeMidiWeekend.Value
                If tbQuantitéViande <> "" Then
                    Range("TabBDMenus[Quantité viande]").Item(I) = CDbl(tbQuantitéViande.Value)
                End If
                Range("TabBDMenus[Nom dessert]").Item(I) = cbNomDessert.Value
                Range("TabBDMenus[Code nom dessert]").Item(I) = tbCodeNomDessert.Value
                Range("TabBDMenus[Nom période dessert]").Item(I) = cbNomPériodeDessert.Value
                Range("TabBDMenus[Code nom période dessert]").Item(I) = tbCodeNomPériodeDessert.Value
                Range("TabBDMenus[Nom conditionnement dessert]").Item(I) = cbNomConditionnementDessert.Value
                Range("TabBDMenus[Code nom conditionnement dessert]").Item(I) = tbCodeNomConditionnementDessert.Value
                 If tbQuantitéDessert <> "" Then
                    Range("TabBDMenus[Quantité dessert]").Item(I) = CDbl(tbQuantitéDessert.Value)
                End If
                Range("TabBDMenus[Numéro création menu]").Item(I) = tbNuméroCréationMenu.Value
                Range("TabBDMenus[Nom jour férié]").Item(I) = tbNomJourFérié.Value
                Range("TabBDMenus[Nom mois menu]").Item(I) = tbNomMoisMenu.Value
                If cbNomNatureCréationMenu = "Menu midi retraite" Then
                    Call GénérerMenusMidiRetraite
                ElseIf cbNomNatureCréationMenu = "Menu journalier" Then
                    Call GénérerMenusJournaliers
                ElseIf cbNomNatureCréationMenu = "Menu viande midi weekend" Then
                    Call GénérerMenusViandesMidiWeekend
                End If
                
        'Trier la feuille BD menus, tableau structuré TabBDMenus, par date menu et nom nature création menu.
            Range("TabBDMenus").Sort key1:=Range("TabBDMenus[Date menu]"), key2:=Range("TabBDMenus[Nom nature création menu]"), order2:=xlDescending, _
            Header:=xlYes
            
        Call RenuméroterMenus
    End Sub
    
    Private Sub cmdSuppressionCréationMenu_Click()
    Dim I As Long
        'Recherche existence article. Si la zone de liste modifiable cbNomNatureCréationMenu et si la zone de texte tbDateMenu est vide, alors on quitte la procédure.
            If cbNomNatureCréationMenu.Value = "" Or tbDateMenu.Value = "" Then Exit Sub
            I = IndiceMenu(cbNomNatureCréationMenu.Value, DateValue(tbDateMenu.Value))
            If I > 0 Then
                If MsgBox("Souhaitez-vous supprimer le menu " & cbNomNatureCréationMenu.Value & vbCrLf & "du " & Format(tbDateMenu.Value, "dddd d mmmm yyyy") & " ?", vbExclamation + vbYesNo) = vbYes Then
                    Range("TabBDMenus").ListObject.ListRows(I).Delete
                    Call RenuméroterMenus
                    cbNomNatureCréationMenu.Value = ""
                    If cbNomNatureCréationMenu = "Menu midi retraite" Then
                        Call GénérerMenusMidiRetraite
                    ElseIf cbNomNatureCréationMenu = "Menu journalier" Then
                        Call GénérerMenusJournaliers
                    ElseIf cbNomNatureCréationMenu = "Menu viande midi weekend" Then
                        Call GénérerMenusViandesMidiWeekend
                    End If
                End If
            End If
    End Sub
    Private Sub RenuméroterMenus()
    Dim K As Long, NbLignes As Long, N As Long
        NbLignes = Range("TabBDMenus").ListObject.ListRows.Count
        K = 1
        For N = 1 To NbLignes
            'Si la valeur CodeMenu de l'élément N du tableau est identique au contrôle de la Zone de liste modifiable CBNomNatureCréationMenu pour l'année en cours, alors on renu-
            'mérote l 'élément.
                If Range("TabBDMenus[Code nom nature création menu]").Item(N) = tbCodeNomNatureCréationMenu.Value Then
                    'Alors on renumérote l'élément.
                    Range("TabBDMenus[Numéro création menu]").Item(N) = tbCodeNomNatureCréationMenu.Value & "-" & Format(K, "00")
                    K = K + 1
                End If
        Next N
    End Sub

    Création articles menusCAMDessert midi retraiteDMRPommeDMR01Lundi à vendredi midisPAM051 sachet de 2 kilogrammes. 1 pomme pour 1 repasCAM171,001,00mercredi 6 septembre 2023DMR-01DMRPommeCréation articles menusCAMDessert soirDSPommeDS01Lundi à vendredi soirsPAM061 sachet de 2 kilogrammes. 1 pomme pour 1 repasCAM171,001,00mercredi 6 septembre 2023DS-01DSPommeCréation articles menusCAMDesserts weekendDWAnanasDW01Samedi et dimanche midis et soirsPAM10Unité : 1 pour 4 repasCAM330,250,50mercredi 6 septembre 2023DW-01DWAnanasCréation articles menusCAMDesserts weekendDWAutres fruitsDW02Samedi et dimanche midis et soirsPAM10Unité : 2 à 4 pour 1 repasCAM354,008,00mercredi 6 septembre 2023DW-02DWAutres fruitsCréation articles menusCAMDesserts weekendDWAvocatsDW03Samedi et dimanche midis et soirsPAM10Unité : 1 pour 1 repasCAM311,002,00mercredi 6 septembre 2023DW-03DWAvocatsCréation articles menusCAMDesserts weekendDWBananesDW04Samedi et dimanche midis et soirsPAM10Unité : 1 pour 1 repasCAM311,002,00mercredi 6 septembre 2023DW-04DWBananesCréation articles menusCAMDesserts weekendDWClémentinesDW05Samedi et dimanche midis et soirsPAM10Unité : 2 à 4 pour 1 repasCAM354,008,00mercredi 6 septembre 2023DW-05DWClémentinesCréation articles menusCAMDesserts weekendDWCrèmeDW06Samedi et dimanche midis et soirsPAM101 pack de 4 pots pour le weekend. 1 pot pour 1 repasCAM101,002,00mercredi 6 septembre 2023DW-06DWCrèmeCréation articles menusCAMDesserts weekendDWDattesDW07Samedi et dimanche midis et soirsPAM101 paquet pour 4 repasCAM150,250,50mercredi 6 septembre 2023DW-07DWDattesCréation articles menusCAMDesserts weekendDWFiguesDW08Samedi et dimanche midis et soirsPAM101 paquet pour 4 repasCAM150,250,50mercredi 6 septembre 2023DW-08DWFiguesCréation articles menusCAMDesserts weekendDWFromage blancDW09Samedi et dimanche midis et soirsPAM101 pack de 4 pots pour le weekend. 1 pot pour 1 repasCAM101,002,00mercredi 6 septembre 2023DW-09DWFromage blancCréation articles menusCAMDesserts weekendDWFruits au siropDW10Samedi et dimanche midis et soirsPAM101 boîte pour 2 repasCAM050,501,00mercredi 6 septembre 2023DW-10DWFruits au siropCréation articles menusCAMDesserts weekendDWFruits de saisonDW11Samedi et dimanche midis et soirsPAM10Unité : 2 à 4 pour 1 repasCAM354,008,00mercredi 6 septembre 2023DW-11DWFruits de saisonCréation articles menusCAMDesserts weekendDWGâteau de rizDW12Samedi et dimanche midis et soirsPAM101 pack de 4 pots pour le weekend. 1 pot pour 1 repasCAM101,002,00mercredi 6 septembre 2023DW-12DWGâteau de rizCréation articles menusCAMDesserts weekendDWGâteau de semouleDW13Samedi et dimanche midis et soirsPAM101 pack de 4 pots pour le weekend. 1 pot pour 1 repasCAM101,002,00mercredi 6 septembre 2023DW-13DWGâteau de semouleCréation articles menusCAMDesserts weekendDWGâteaux samedi dimancheDW14Samedi et dimanche midis et soirsPAM101 boîte pour 2 repasCAM050,501,00mercredi 6 septembre 2023DW-14DWGâteaux samedi dimancheCréation articles menusCAMDesserts weekendDWMousse au chocolatDW15Samedi et dimanche midis et soirsPAM101 pack de 4 pots pour le weekend. 1 pot pour 1 repasCAM101,002,00mercredi 6 septembre 2023DW-15DWMousse au chocolatCréation articles menusCAMDesserts weekendDWOrangesDW16Samedi et dimanche midis et soirsPAM10Unité : 1 pour 1 repasCAM311,002,00mercredi 6 septembre 2023DW-16DWOrangesCréation articles menusCAMDesserts weekendDWPetits suissesDW17Samedi et dimanche midis et soirsPAM101 pack de 6 pots. 3 pots pour 1 repasCAM113,006,00mercredi 6 septembre 2023DW-17DWPetits suissesCréation articles menusCAMDesserts weekendDWPruneauxDW18Samedi et dimanche midis et soirsPAM101 paquet pour 4 repasCAM150,250,50mercredi 6 septembre 2023DW-18DWPruneauxCréation articles menusCAMDesserts weekendDWRiz au laitDW19Samedi et dimanche midis et soirsPAM101 pack de 4 pots pour le weekend. 1 pot pour 1 repasCAM101,002,00mercredi 6 septembre 2023DW-19DWRiz au laitCréation articles menusCAMDesserts weekendDWTapiocaDW20Samedi et dimanche midis et soirsPAM1025 grammes pour 1 repasCAM2525,0050,00mercredi 6 septembre 2023DW-20DWTapiocaCréation articles menusCAMDesserts weekendDWYaourtsDW21Samedi et dimanche midis et soirsPAM101 pack de 4 pots pour le weekend. 1 pot pour 1 repasCAM101,002,00mercredi 6 septembre 2023DW-21DWYaourtsCréation articles menusCAMLégumes midi retraiteLMRAspergesLMR01Lundi à vendredi midisPAM051 bocal ou 1 boîte pour 1 repasCAM011,001,00mercredi 6 septembre 2023LMR-01LMRAspergesCréation articles menusCAMLégumes midi retraiteLMRAvocatLMR02Lundi à vendredi midisPAM05Unité : 1 pour 1 repasCAM311,001,00mercredi 6 septembre 2023LMR-02LMRAvocatCréation articles menusCAMLégumes midi retraiteLMRCarottesLMR03Lundi à vendredi midisPAM05Unité : 2 pour 1 repasCAM362,002,00mercredi 6 septembre 2023LMR-03LMRCarottesCréation articles menusCAMLégumes midi retraiteLMRCéleriLMR04Lundi à vendredi midisPAM05Unité : 1 branche pour 1 repasCAM291,001,00mercredi 6 septembre 2023LMR-04LMRCéleriCréation articles menusCAMLégumes midi retraiteLMRChampignonsLMR05Lundi à vendredi midisPAM051 boîte pour 1 repasCAM041,001,00mercredi 6 septembre 2023LMR-05LMRChampignonsCréation articles menusCAMLégumes midi retraiteLMRConcombreLMR06Lundi à vendredi midisPAM05Unité : 1 pour 1 repasCAM311,001,00mercredi 6 septembre 2023LMR-06LMRConcombreCréation articles menusCAMLégumes midi retraiteLMRCouscousLMR07Lundi à vendredi midisPAM0525 grammes pour 1 repasCAM2525,0025,00mercredi 6 septembre 2023LMR-07LMRCouscousCréation articles menusCAMLégumes midi retraiteLMRMaïsLMR08Lundi à vendredi midisPAM051 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LMR-08LMRMaïsCréation articles menusCAMLégumes midi retraiteLMRPâtes à la sauce tomatesLMR09Lundi à vendredi midisPAM055 cuillères pour 1 repasCAM275,005,00mercredi 6 septembre 2023LMR-09LMRPâtes à la sauce tomatesCréation articles menusCAMLégumes midi retraiteLMRPâtes au beurreLMR10Lundi à vendredi midisPAM055 cuillères pour 1 repasCAM275,005,00mercredi 6 septembre 2023LMR-10LMRPâtes au beurreCréation articles menusCAMLégumes midi retraiteLMRPoireauLMR11Lundi à vendredi midisPAM05Unité : 1 pour 1 repasCAM311,001,00mercredi 6 septembre 2023LMR-11LMRPoireauCréation articles menusCAMLégumes midi retraiteLMRPomme de terreLMR12Lundi à vendredi midisPAM05Unité : 1 pour 1 repasCAM311,001,00mercredi 6 septembre 2023LMR-12LMRPomme de terreCréation articles menusCAMLégumes midi retraiteLMRPuréeLMR13Lundi à vendredi midisPAM0525 grammes pour 1 repasCAM2525,0025,00mercredi 6 septembre 2023LMR-13LMRPuréeCréation articles menusCAMLégumes midi retraiteLMRRadisLMR14Lundi à vendredi midisPAM051 botte ou 1 sachet pour 2 repasCAM070,500,50mercredi 6 septembre 2023LMR-14LMRRadisCréation articles menusCAMLégumes midi retraiteLMRRizLMR15Lundi à vendredi midisPAM0525 grammes pour 1 repasCAM2525,0025,00mercredi 6 septembre 2023LMR-15LMRRizCréation articles menusCAMLégumes midi retraiteLMRSaladeLMR16Lundi à vendredi midisPAM05Unité : 1 tête pour 1 repasCAM341,001,00mercredi 6 septembre 2023LMR-16LMRSaladeCréation articles menusCAMLégumes midi retraiteLMRTomatesLMR17Lundi à vendredi midisPAM05Unité : 2 pour 1 repasCAM362,002,00mercredi 6 septembre 2023LMR-17LMRTomatesCréation articles menusCAMLégumes soirs lundi mardiLSLMCassouletLSLM01Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSLM-01LSLMCassouletCréation articles menusCAMLégumes soirs lundi mardiLSLMChoucrouteLSLM02Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSLM-02LSLMChoucrouteCréation articles menusCAMLégumes soirs lundi mardiLSLMChou-fleurLSLM03Lundi et mardi soirsPAM07Unité : 1 pour 2 repasCAM320,500,50mercredi 6 septembre 2023LSLM-03LSLMChou-fleurCréation articles menusCAMLégumes soirs lundi mardiLSLMChoux de BruxellesLSLM04Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSLM-04LSLMChoux de BruxellesCréation articles menusCAMLégumes soirs lundi mardiLSLMCouscousLSLM05Lundi et mardi soirsPAM0725 grammes pour 1 repasCAM2525,0025,00mercredi 6 septembre 2023LSLM-05LSLMCouscousCréation articles menusCAMLégumes soirs lundi mardiLSLMEndivesLSLM06Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSLM-06LSLMEndivesCréation articles menusCAMLégumes soirs lundi mardiLSLMHaricots vertsLSLM07Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSLM-07LSLMHaricots vertsCréation articles menusCAMLégumes soirs lundi mardiLSLMMaïsLSLM08Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSLM-08LSLMMaïsCréation articles menusCAMLégumes soirs lundi mardiLSLMPaellaLSLM09Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSLM-09LSLMPaellaCréation articles menusCAMLégumes soirs lundi mardiLSLMPoireauLSLM10Lundi et mardi soirsPAM07Unité : 1 pour 1 repasCAM311,001,00mercredi 6 septembre 2023LSLM-10LSLMPoireauCréation articles menusCAMLégumes soirs lundi mardiLSLMPomme de terreLSLM11Lundi et mardi soirsPAM07Unité : 1 pour 1 repasCAM311,001,00mercredi 6 septembre 2023LSLM-11LSLMPomme de terreCréation articles menusCAMLégumes soirs lundi mardiLSLMPuréeLSLM12Lundi et mardi soirsPAM0725 grammes pour 1 repasCAM2525,0025,00mercredi 6 septembre 2023LSLM-12LSLMPuréeCréation articles menusCAMLégumes soirs lundi mardiLSLMQuenellesLSLM13Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSLM-13LSLMQuenellesCréation articles menusCAMLégumes soirs lundi mardiLSLMRizLSLM14Lundi et mardi soirsPAM0725 grammes pour 1 repasCAM2525,0025,00mercredi 6 septembre 2023LSLM-14LSLMRizCréation articles menusCAMLégumes soirs mercredi jeudiLSMJMacédoine de légumesLSMJ01Mercredi et jeudi soirsPAM081 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSMJ-01LSMJMacédoine de légumesCréation articles menusCAMLégumes soirs mercredi jeudiLSMJPetits poisLSMJ02Mercredi et jeudi soirsPAM081 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSMJ-02LSMJPetits poisCréation articles menusCAMLégumes soirs mercredi jeudiLSMJPetits pois et jeunes carottesLSMJ03Mercredi et jeudi soirsPAM081 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSMJ-03LSMJPetits pois et jeunes carottesCréation articles menusCAMLégumes soirs mercredi jeudiLSMJRatatouilleLSMJ04Mercredi et jeudi soirsPAM081 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSMJ-04LSMJRatatouilleCréation articles menusCAMLégumes soirs mercredi jeudiLSMJRaviolisLSMJ05Mercredi et jeudi soirsPAM081 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSMJ-05LSMJRaviolisCréation articles menusCAMLégumes soirs mercredi jeudiLSMJTomates peléesLSMJ06Mercredi et jeudi soirsPAM081 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023LSMJ-06LSMJTomates peléesCréation articles menusCAMLégumes soirs vendrediLSVAspergesLSV01Vendredi soirPAM121 bocal ou 1 boîte pour 1 repasCAM011,001,00mercredi 6 septembre 2023LSV-01LSVAspergesCréation articles menusCAMLégumes soirs vendrediLSVAvocatLSV02Vendredi soirPAM12Unité : 1 pour 1 repasCAM311,001,00mercredi 6 septembre 2023LSV-02LSVAvocatCréation articles menusCAMLégumes soirs vendrediLSVBetteraves rougesLSV03Vendredi soirPAM121 paquet pour 5 repas (betteraves rouges)CAM161,001,00mercredi 6 septembre 2023LSV-03LSVBetteraves rougesCréation articles menusCAMLégumes soirs vendrediLSVCarottesLSV04Vendredi soirPAM12Unité : 2 pour 1 repasCAM362,002,00mercredi 6 septembre 2023LSV-04LSVCarottesCréation articles menusCAMLégumes soirs vendrediLSVCéleriLSV05Vendredi soirPAM12Unité : 1 branche pour 1 repasCAM291,001,00mercredi 6 septembre 2023LSV-05LSVCéleriCréation articles menusCAMLégumes soirs vendrediLSVChampignonsLSV06Vendredi soirPAM121 boîte pour 1 repasCAM041,001,00mercredi 6 septembre 2023LSV-06LSVChampignonsCréation articles menusCAMLégumes soirs vendrediLSVConcombreLSV07Vendredi soirPAM12Unité : 1 pour 1 repasCAM311,001,00mercredi 6 septembre 2023LSV-07LSVConcombreCréation articles menusCAMLégumes soirs vendrediLSVRadisLSV08Vendredi soirPAM121 botte ou 1 sachet pour 1 repasCAM061,001,00mercredi 6 septembre 2023LSV-08LSVRadisCréation articles menusCAMLégumes soirs vendrediLSVSaladeLSV09Vendredi soirPAM12Unité : 1 tête pour 1 repasCAM341,001,00mercredi 6 septembre 2023LSV-09LSVSaladeCréation articles menusCAMLégumes soirs vendrediLSVSalsifisLSV10Vendredi soirPAM121 boîte pour 1 repasCAM041,001,00mercredi 6 septembre 2023LSV-10LSVSalsifisCréation articles menusCAMLégumes soirs vendrediLSVTomatesLSV11Vendredi soirPAM12Unité : 2 pour 1 repasCAM362,002,00mercredi 6 septembre 2023LSV-11LSVTomatesCréation articles menusCAMLégumes weekend dimancheLWDAspergesLWD01Dimanche soirPAM031 bocal ou 1 boîte pour 1 repasCAM011,001,00mercredi 6 septembre 2023LWD-01LWDAspergesCréation articles menusCAMLégumes weekend dimancheLWDChipsLWD02Dimanche midi et soirPAM021 sachet pour 2 repas (Chips)CAM180,501,00mercredi 6 septembre 2023LWD-02LWDChipsCréation articles menusCAMLégumes weekend dimancheLWDFritesLWD03Dimanche midiPAM0120 frites pour 1 repasCAM2420,0020,00mercredi 6 septembre 2023LWD-03LWDFritesCréation articles menusCAMLégumes weekend dimancheLWDHaricots vertsLWD04Dimanche midi et soirPAM021 boîte pour 2 repasCAM050,501,00mercredi 6 septembre 2023LWD-04LWDHaricots vertsCréation articles menusCAMLégumes weekend samediLWSPâtes à la sauce tomatesLWS01Samedi midi et soirPAM115 cuillères pour 1 repasCAM275,0010,00mercredi 6 septembre 2023LWS-01LWSPâtes à la sauce tomatesCréation articles menusCAMLégumes weekend samediLWSPâtes au beurreLWS02Samedi midi et soirPAM115 cuillères pour 1 repasCAM275,0010,00mercredi 6 septembre 2023LWS-02LWSPâtes au beurreCréation articles menusCAMLégumes weekend samediLWSPâtes au fromage râpéLWS03Samedi midi et soirPAM115 cuillères pour 1 repasCAM275,0010,00mercredi 6 septembre 2023LWS-03LWSPâtes au fromage râpéCréation articles menusCAMViandes midi retraiteVMRRôti d'agneauVMR01Lundi à vendredi midisPAM051 morceau de 500 grammes pour 5 repasCAM09100,00100,00mercredi 6 septembre 2023VMR-01VMRRôti d'agneauCréation articles menusCAMViandes midi retraiteVMRRôti de bœufVMR02Lundi à vendredi midisPAM051 morceau de 500 grammes pour 5 repasCAM09100,00100,00mercredi 6 septembre 2023VMR-02VMRRôti de bœufCréation articles menusCAMViandes midi retraiteVMRRôti de chevalVMR03Lundi à vendredi midisPAM051 morceau de 500 grammes pour 5 repasCAM09100,00100,00mercredi 6 septembre 2023VMR-03VMRRôti de chevalCréation articles menusCAMViandes midi retraiteVMRRôti de porcVMR04Lundi à vendredi midisPAM051 morceau de 500 grammes pour 5 repasCAM09100,00100,00mercredi 6 septembre 2023VMR-04VMRRôti de porcCréation articles menusCAMViandes midi retraiteVMRRôti de veauVMR05Lundi à vendredi midisPAM051 morceau de 500 grammes pour 5 repasCAM09100,00100,00mercredi 6 septembre 2023VMR-05VMRRôti de veauCréation articles menusCAMViandes midi weekendVMWAgneauVMW01Samedi et dimanche midisPAM091 tranche pour 1 repasCAM211,001,00mercredi 6 septembre 2023VMW-01VMWAgneauCréation articles menusCAMViandes midi weekendVMWBœufVMW02Samedi et dimanche midisPAM091 tranche pour 1 repasCAM211,001,00mercredi 6 septembre 2023VMW-02VMWBœufCréation articles menusCAMViandes midi weekendVMWChevalVMW03Samedi et dimanche midisPAM091 tranche pour 1 repasCAM211,001,00mercredi 6 septembre 2023VMW-03VMWChevalCréation articles menusCAMViandes midi weekendVMWDindeVMW04Samedi et dimanche midisPAM091 tranche pour 1 repasCAM211,001,00mercredi 6 septembre 2023VMW-04VMWDindeCréation articles menusCAMViandes midi weekendVMWPoissonVMW05Samedi et dimanche midisPAM09Unité : 1 pour 1 repasCAM311,001,00mercredi 6 septembre 2023VMW-05VMWPoissonCréation articles menusCAMViandes midi weekendVMWPorcVMW06Samedi et dimanche midisPAM091 tranche pour 1 repasCAM211,001,00mercredi 6 septembre 2023VMW-06VMWPorcCréation articles menusCAMViandes midi weekendVMWVeauVMW07Samedi et dimanche midisPAM091 tranche pour 1 repasCAM211,001,00mercredi 6 septembre 2023VMW-07VMWVeauCréation articles menusCAMViandes soirsVSBifteck haché de bœufVS01Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-01VSBifteck haché de bœufCréation articles menusCAMViandes soirsVSBifteck haché de chevalVS02Lundi à dimanche soirsPAM04125 grammes pour 1 repas (Bifteckh haché de cheval)
    125,00125,00mercredi 6 septembre 2023VS-02VSBifteck haché de chevalCréation articles menusCAMViandes soirsVSBifteck haché de veauVS03Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-03VSBifteck haché de veauCréation articles menusCAMViandes soirsVSBouchée à la reineVS04Lundi à dimanche soirsPAM041 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023VS-04VSBouchée à la reineCréation articles menusCAMViandes soirsVSBoudinVS05Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-05VSBoudinCréation articles menusCAMViandes soirsVSCervelasVS06Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-06VSCervelasCréation articles menusCAMViandes soirsVSCœurVS07Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-07VSCœurCréation articles menusCAMViandes soirsVSCroque-monsieurVS08Lundi à dimanche soirsPAM041 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023VS-08VSCroque-monsieurCréation articles menusCAMViandes soirsVSFoieVS09Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-09VSFoieCréation articles menusCAMViandes soirsVSFromage de têteVS10Lundi à dimanche soirsPAM041 tranche pour 2 repasCAM220,500,50mercredi 6 septembre 2023VS-10VSFromage de têteCréation articles menusCAMViandes soirsVSJambonVS11Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-11VSJambonCréation articles menusCAMViandes soirsVSJambonneauVS12Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-12VSJambonneauCréation articles menusCAMViandes soirsVSMortadelleVS13Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-13VSMortadelleCréation articles menusCAMViandes soirsVSŒufsVS14Lundi à dimanche soirsPAM041 boîte de 6 œufs. 3 œufs pour 1 repasCAM023,003,00mercredi 6 septembre 2023VS-14VSŒufsCréation articles menusCAMViandes soirsVSPizzaVS15Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-15VSPizzaCréation articles menusCAMViandes soirsVSPoissonVS16Lundi à dimanche soirsPAM04Unité : 1 pour 1 repasCAM311,0010,00mercredi 6 septembre 2023VS-16VSPoissonCréation articles menusCAMViandes soirsVSQuiche lorraineVS17Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-17VSQuiche lorraineCréation articles menusCAMViandes soirsVSRoulade à la pistacheVS18Lundi à dimanche soirsPAM043 tranches pour 1 repasCAM263,003,00mercredi 6 septembre 2023VS-18VSRoulade à la pistacheCréation articles menusCAMViandes soirsVSRoulé au fromageVS19Lundi à dimanche soirsPAM041 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023VS-19VSRoulé au fromageCréation articles menusCAMViandes soirsVSSalamiVS20Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-20VSSalamiCréation articles menusCAMViandes soirsVSSaucissesVS21Lundi à dimanche soirsPAM041 paquet pour 2 repasCAM130,500,50mercredi 6 septembre 2023VS-21VSSaucissesCréation articles menusCAMViandes soirsVSSaucissonVS22Lundi à dimanche soirsPAM041 sachet pour 6 repas. 5 tranches pour 1 repas (Saucisson)CAM205,005,00mercredi 6 septembre 2023VS-22VSSaucissonCréation articles menusCAMViandes soirsVSTête persilléeVS23Lundi à dimanche soirsPAM041 tranche pour 2 repasCAM220,500,50mercredi 6 septembre 2023VS-23VSTête persilléeCréation articles menusCAMViandes soirsVSTête rouléeVS24Lundi à dimanche soirsPAM043 tranches pour 1 repasCAM263,003,00mercredi 6 septembre 2023VS-24VSTête rouléeCréation articles menusCAMViandes soirsVSThonVS25Lundi à dimanche soirsPAM041 boîte pour 1 repasCAM041,001,00mercredi 6 septembre 2023VS-25VSThonCréation articles menusCAMViandes soirsVSViande cassouletVS26Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023VS-26VSViande cassouletCréation articles menusCAMViandes soirsVSViande choucrouteVS27Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023VS-27VSViande choucrouteCréation articles menusCAMViandes soirsVSViande paellaVS28Lundi et mardi soirsPAM071 boîte pour 2 repasCAM050,500,50mercredi 6 septembre 2023VS-28VSViande paella


    0
    1. mariam-j Messages postés 1656 Date d'inscription   Statut Membre Dernière intervention   38
       

      Bonjour,

      La logique, c'est ce qui manque le plus dans ton tableur.

      Tu devrais peut-être exposer en termes clairs ce que tu veux obtenir au final.

      0
      1. brucine Messages postés 24800 Date d'inscription   Statut Membre Dernière intervention   4 166 > mariam-j Messages postés 1656 Date d'inscription   Statut Membre Dernière intervention  
         

        Bonjour,

        à l'impossible nul n'est tenu.

        On en n'avait plus entendu parler depuis 3 mois, je suppose que d'autres y ont été exposés ailleurs et s'en sont lassés, mais ça fait de mémoire au moins 8 ans que ça dure.

        Plus personne ne répond, sauf Bobot, qui n'est donc pas si intelligent qu'il le prétend.

        0
    2. bazfile Messages postés 58491 Date d'inscription   Statut Modérateur Dernière intervention   20 266
       

      C'est idiot. C'est plus logique de joindre un fichier complet que du code

      Tu n'as pas compris, c'est une IA (intelligence artificielle) qui t'a répondu pas une personne, ses modes de raisonnement et de fonctionnement sont donc différents.

      0
  4. BUDGETS Messages postés 1612 Date d'inscription   Statut Membre Dernière intervention  
     

    Dans mon message initial d'hier, j'explique ce que je veux obtenir quand je crée le menu journalier du vendredi 05 janvier 2024


    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. BUDGETS Messages postés 1612 Date d'inscription   Statut Membre Dernière intervention  
     

    Je me demande comment qu'une IA (pour moi équivalent d'un robot) peut résoudre un problème quel qu'il soit.


    0
    1. bazfile Messages postés 58491 Date d'inscription   Statut Modérateur Dernière intervention   20 266
       

      L'IA de CCM répond aux posts qui n'ont pas été pris en charge au bout de 24h, vu qu'apparemment personne d'autre ne veut répondre à tes questions, attend la réponse de BoBot tu verras bien ce qu'il te propose.

      0
  7. BUDGETS Messages postés 1612 Date d'inscription   Statut Membre Dernière intervention  
     

    OK. J'attends


    0
  8. mariam-j Messages postés 1656 Date d'inscription   Statut Membre Dernière intervention   38
     

    Quel est l'intérêt de mettre des codes aux ingrédients, si ce n'est pour ajouter de la complexité au chaos existant ?
    Pourquoi ne te sers-tu as du soft que je t'ai donné il y a longtemps, et qui permet de créer des menus, de les enregistrer, et de les dater si besoin dans des fichiers, qui peuvent êtres classés, triés, indexés, et tout ce qu'on voudra.
    Et qui donne en outre les valeurs en protéines lipides, glucides et Kcal.
    Je conclus que ton but n'est pas d'établir des menus, mais de te casser la tête (et celle d'autrui) avec un exel que tu ne maîtrise pas.
    Et pour lequel dans son état même une IA ne peux t'aider.

    0
    1. mariam-j Messages postés 1656 Date d'inscription   Statut Membre Dernière intervention   38
       

      Suite du 14h33:

      Note que si tu donne ton code à: "Bobot la gentille IA", tu risque de nous le faire crever d'indigestion.

      1