Code nom légume ne se remplit pas correctement

Fermé
BUDGETS Messages postés 1559 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 20 décembre 2024 - Modifié le 23 nov. 2023 à 12:21
mariam-j Messages postés 1391 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 20 décembre 2024 - 24 nov. 2023 à 14:36

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


A voir également:

7 réponses

BoBot Messages postés 4251 Date d'inscription mardi 4 juillet 2023 Statut Modérateur Dernière intervention 9 décembre 2024 280
24 nov. 2023 à 13:05
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
BUDGETS Messages postés 1559 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 20 décembre 2024
24 nov. 2023 à 13:13

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
bazfile Messages postés 56672 Date d'inscription samedi 29 décembre 2012 Statut Modérateur, Contributeur sécurité Dernière intervention 21 décembre 2024 19 337
Modifié le 24 nov. 2023 à 13:25

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
BUDGETS Messages postés 1559 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 20 décembre 2024
Modifié le 24 nov. 2023 à 13:46

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
mariam-j Messages postés 1391 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 20 décembre 2024 15
24 nov. 2023 à 13:36

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
brucine Messages postés 18327 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 21 décembre 2024 2 713 > mariam-j Messages postés 1391 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 20 décembre 2024
24 nov. 2023 à 13:43

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
bazfile Messages postés 56672 Date d'inscription samedi 29 décembre 2012 Statut Modérateur, Contributeur sécurité Dernière intervention 21 décembre 2024 19 337
24 nov. 2023 à 13:49

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
BUDGETS Messages postés 1559 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 20 décembre 2024
24 nov. 2023 à 13:48

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

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

Posez votre question
BUDGETS Messages postés 1559 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 20 décembre 2024
24 nov. 2023 à 13:55

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


0
bazfile Messages postés 56672 Date d'inscription samedi 29 décembre 2012 Statut Modérateur, Contributeur sécurité Dernière intervention 21 décembre 2024 19 337
24 nov. 2023 à 14:02

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
BUDGETS Messages postés 1559 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 20 décembre 2024
24 nov. 2023 à 14:07

OK. J'attends


0
mariam-j Messages postés 1391 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 20 décembre 2024 15
Modifié le 24 nov. 2023 à 15:12

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
mariam-j Messages postés 1391 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 20 décembre 2024 15
24 nov. 2023 à 14:36

Suite du 14h33:

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

1