Fichier MENUS.xlsm : procédure Sub GénPropMMR

BUDGETS Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   -  
 Dimitri - 9 avril 2025 à 13:42

Bonjour à toutes et à tous,

Je reprends du service. Je vais modifier mon fichier en conséquence. J'ai passé de nombreux examens médicaux dont les résultats ne sont très bons (possibilité que je développe différents cancers dans un délai très court) et j'ai été opéré, à une semaine d'intervalle, des deux yeux (cataracte), tout ceci expliquant ma longue absence.

Dans le fichier MENUS.xlsm, module MGénérer_GenPropMMR, procédure Sub GénPropMMR, où se trouvent les instructions qui permettent 1) de remplir les colonnes B à H incluses, 2) de recopier toutes les quatorze lignes, 3) de supprimer les samedis et les dimanches ?

Dans la feuille Listes menus, colonne BB, merci de m'aider à rectifier les formules dans lesquelles l'année est erronée (1905 au lieu de 2026).

D'avance merci à toutes et à tous pour votre réponse.

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


Windows / Chrome 134.0.0.0


A voir également:

2 réponses

Dimitri
 

Bonjour

1) Entre For Col = 2 To 8 ... et ... Next Col

2) Entre For Lig = 1 To 532 Step 14 ... et ... Next Lig

3) Datj = WorksheetFunction.WorkDay(DateSerial(Range("Année_en_Cours") - 1, 12, 31), 1)

et surtout

Datj = WorksheetFunction.WorkDay(Datj, 1)

4) Feuille ListeMenus, BB4, mettre BA1 au lieu de ANNEE(BA1)

Bon courage

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

Bonjour Dimitri,

Pour le 3), je n'arrive pas à trouver la solution pour que dans Propositions menus journaliers tous les jours de la semaine apparaissent. J'ai essayé différentes modifications mais aucune n'a donné le résultat escompté. Peut-être faut-il jouer sur les 1 ?

0
Dimitri > BUDGETS Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour,

Pourquoi ne pas être reparti de ce qu'avait fait charles en décembre ?

Les 4/5 du travail étaient faits, il suffisait de rajouter les bordures et les en-têtes  conformément à MMR.

Fichier avec MJ et MVMWE

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

0
BUDGETS Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   > Dimitri
 

Bonjour DIMITRI,

Merci pour le fichier qui correspond bien à ce que je souhaitais. Et cerise sur le gâteau, les lignes références légume, référence viande et référence dessert sont correctement remplies selon qu'il s'agit d'un lundi, d'un mercredi, etc.

0
BUDGETS Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   > Dimitri
 

Bonjour Dimitri,

J'ai imprimé votre code de GénérerPropositionsMMR et j'ai commencé à écrire les commentaires et le code dans mon fichier adéquat. Une erreur survient sur la ligne .range("B:H").ClearContents : impossible de modifier une cellule fusionnée. Voir lecode ci-dessous (impossible de joindre un fichier à partir de cjoint: limité à 15 mo !)

Option Explicit

Sub GénérerPropositionsMMR()
'Déclaration des variables.NM = Numéro menu. J représente le nombre de lignes, excepté a ligne titre; le décompte commence à la ligne 2. DatJ = Date du jour.
Dim Lig As Long, Col As Long, NM As Long, J As Long
Dim DatJ As Date

'ScreenUpdating : True si la mise à jour de l'écran est activée. Type de données Boolean en lecture écriture.
    Application.ScreenUpdating = False
    
'Initialisations. WorksheetFunction.WorkDay : renvoie un nombre représentant une date qui est le nombre jours ouvrés indiqué avant ou après une date (date de début).
'Les jours ouvrés excluent les weekends et les jours de congés. Utilisez la fonction WorkDay pour exclure les weekends etlesjours de congés lorsque vous calculez les dates
'd'échéance des factures, les heures de livraison attendues ou le nombre de jours ouvrés effectués. 12 représente le nombre de mois, 31 équivaut au nombre de jours maximum
'd'un mois. NM = 1 : le numéro menu commenceà 1.
    DatJ = WorksheetFunction.WorkDay(DateSerial(Range("Année_en_Cours") - 1, 12, 31), 1)
    NM = 1
    
'Remplissage. Worksheet ("Propositions MMR") : il s'agit de la feuille dont le nom est indiqué à l'intérieur de la parenthèse.
    With Worksheets("Propositions menus midi retrait")
        'B:H : représente les colonnes de la feuille Propositions menus midi retrait qui seront à remplir. ClearContents : Méthode ClearContents telle qu'elle s'applique à l'objet Ran-
        'ge : Efface les formules de la plage.
            .Range("B:H").ClearContents
        'xlThick : Bordure épaisse plage complète.
            .Range("A1").Resize(532, 8).Borders.Weight = xlThick
        'For Lig=1 to 532 step 14 : 1 to 532 : représente le nombre de lignes à remplir (y compris la ligne titre). Step 14 : le mot clé Step est employé dans les contextes suivants :
        'For...Next, instruction.
            For Lig = 1 To 532 Step 14
        'Va écrire à la ligne 0 (le décompte commence à zéro et non à 1), colonne 1(ici, la colonne A), le texte contenu dans les guillemets.
            .Cells(Lig + 0, 1) = "Propositions menus midi retraite"
        'C'est le centrage sur plusieurs colonnes qui annule l'affichage des bordures intérieures (Borders.Weight = xlThick). 1 = numéro de la ligne, 8 = nombre de colonnes (ici, li-
        'gne1, colonnes A à H incluses).
            .Cells(Lig + 0, 1).Resize(1, 8).HorizontalAlignment = xlCenterAcrossSelection
        'Dans chaque ligne mentionnée (Lig + 1, Lig + 2 , etc.) et uniquement dans la colonne indiquée(ici la colonne 1, soit la colonne A), va écrire le texte contenu dans les guille-
        'mets.
            .Cells(Lig + 1, 1) = "Numéro du menu"
            .Cells(Lig + 2, 1) = "Date du menu"
            .Cells(Lig + 3, 1) = "Référence légume"
            .Cells(Lig + 4, 1) = "Légume"
            .Cells(Lig + 5, 1) = "Quantité légume"
            .Cells(Lig + 6, 1) = "Référence viande"
            .Cells(Lig + 7, 1) = "Viande"
            .Cells(Lig + 8, 1) = "Quantité viande"
            .Cells(Lig + 9, 1) = "Référence dessert"
            .Cells(Lig + 10, 1) = "Dessert"
            .Cells(Lig + 11, 1) = "Quantité dessert"
            .Cells(Lig + 12, 1) = "Référence jour férié"
            .Cells(Lig + 13, 1) = "Jour férié"
        'For Col = 2 to 8 : pour les colonnes 2 à 8 (la colonne 1, soit la colonne A n'est pas prise en compte, le décompte commence donc à la colonne 2, soit la colonne B, jusqu'à
        ' la colonne H incluses).
                For Col = 2 To 8
        'À la ligne 1 (nom comprise la ligne titre), à partir de la colonne 2, soit la colonne B, va écrire le texte contenu dans les guillemets et formater le numéro du menu. À la ligne
        'immédiatement en dessous dela précédente, toujours même colonne, va formater la date du menu.
                    .Cells(Lig + 1, Col) = "MMR" & Format(NM, "00")
                    .Cells(Lig + 2, Col) = DatJ
                    
                Next Col
            Next Lig
        End With
End Sub
Merci de m'aider à résoudre ce problème qui n'intervient pas dans votre fichier.

0
Dimitri > BUDGETS Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour,

Le pus simple : Sélectionnez votre feuille et faites Défusionner

Le plus logique : Partez d'une nouvelle feuille vierge

Le moins nécessaire : Rajoutez une instruction avant l'erreur :  .Range("B:H").unmerge

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

Merci.

Dans Menus journaliers, tous les jours de la semaine doivent apparaître, sans aucune restriction. Merci de me donner les instructions nécessaires pour aboutir à ce résultat.


0