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
Dimitri - 9 avril 2025 à 13:42
A voir également:
- Fichier MENUS.xlsm : procédure Sub GénPropMMR
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
- Comment réduire la taille d'un fichier - Guide
2 réponses
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
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 ?
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
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.
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.
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