Fichier MENUS.xlsm : Propositions menus journaliers
- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
Bonjour à toutes et à tous,
Module MGénérer_GenPropoMJ, procédure Sub GénPropMJ, je souhaiterais que tous les jours de la semaine apparaissent, saus aucune restriction, du 01 janvier au 31 décembre inclus. Merci de m'aider à trouver la solution adéquate pour qu'i en soit ainsi. Merci également de m'expliquer la modification que vous allez proposercar cela pourrait m'aider pour les propositions menus viandes weekend.
Bonjour,
Dans la macro et dans les boucles, remplacement de la colonne 8 par 10, c'est tout.
Cdlt
- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
Bonjour Arturo,
Merci pour votre réponse. J'ai testé mais je n'ai pas dû comprendre votre réponse car cela ne donne pas le résultat escompté. Voir fichier joint.
si c'est pour le quadrillage, je l'ai fait manuellement donc, voici le code qui intègre le quadrillage, sinon pour ce que vous aviez demandé, c'était bien cela , non!
Sub GénPropMJ()
'Déclaration des variables. nm = numéro menu. J représente le nombre de lignes, excepté la ligne titre;le décompte commence donc à 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 de jours ouvrés indiqué avant ou après une date (date de début).
'Les jours ouvrés excluent les week-ends et les jours de congés. Utilisez la fonction WORKDAY pour exclure les week-ends 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 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 journaliers")
'B:H : représente les colonnes de la feuille Propositions menus midi journaliers qui seront à remplir. ClearContents : Masquer toutMéthode ClearContents telle qu'elle s'ap-
'plique à l'objet.
'Range. Efface les formules de la plage.
.Range("B2:J901").ClearContents
.Range("A1").Resize(901, 10).Borders.Weight = xlThick 'Bordure épaisse plage complète
'For Lig = 1 to 901 Step 17 : 1 to 901 : reprense le nombre de lignes à remplir (y compris la ligne titre). Step : Le mot clé Step est employé dans les contextes suivants :
'For...Next, instruction.
For Lig = 1 To 901 Step 17
.Cells(Lig + 0, 1) = "Propositions menus journaliers"
'C'est le centrage sur plusieurs colonnes qui inhibe l'affichage des bordures intérieures. Centrer sur toutes les colonnes.
.Cells(Lig + 0, 1).Resize(1, 8).HorizontalAlignment = xlCenterAcrossSelection
.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 légume 2)"
.Cells(Lig + 7, 1) = "Légume 2"
.Cells(Lig + 8, 1) = "Quantité légume 2"
.Cells(Lig + 9, 1) = "Référence viande"
.Cells(Lig + 10, 1) = "Viande"
.Cells(Lig + 11, 1) = "Quantité viande"
.Cells(Lig + 12, 1) = "Référence dessert"
.Cells(Lig + 13, 1) = "Dessert"
.Cells(Lig + 14, 1) = "Quantité dessert"
.Cells(Lig + 15, 1) = "Référence jour férié"
.Cells(Lig + 16, 1) = "Jour férié"
'For Col = 2 to 10 : Pour les colonnes 2 à 8 (la colonne A n'est pas prise en compte, le décompte commence donc à la colonne B jusqu'à la colonne J incluses.
For Col = 2 To 10
'En tête. À la ligne 1 (nom compris la ligne titre), va écrire MJ et formater le numéro menu (nm);À la ligne 2, (immédiatement après la précédente), va écrire la date
'du jour.
.Cells(Lig + 1, Col) = "MJ" & Format(nm, "00")
.Cells(Lig + 2, Col) = Format(Datj, "dddd dd mm yyyy")
'Légume. Dans les colonnes B à J incluses, sur chaque ligne Référence légume, il va taper LMJ. Mêmes colonnes, les deux lignes suivantes (Légume et Quantité lé-
'gume) vont rester vides.
.Cells(Lig + 3, Col) = "LMJ"
.Cells(Lig + 4, Col) = ""
.Cells(Lig + 5, Col) = ""
'Viande. Dans les colonnes B à J incluses, sur chaque ligne Référence viande, il va taper VMJ. Mêmes colonnes, les deux lignes suivantes (Viande et Quantité
'viande) vont rester vides.
.Cells(Lig + 6, Col) = "VMJ"
.Cells(Lig + 7, Col) = ""
.Cells(Lig + 8, Col) = "100,00"
'Dessert. Dans les colonnes B à J incluses, sur chaque ligne, il va les remplir selon les instructions données..
.Cells(Lig + 9, Col) = "DMR01"
.Cells(Lig + 10, Col) = "Pomme"
.Cells(Lig + 11, Col) = "1,00"
'Fériés. Dans les colonnes B à J incluses, sur chaque ligne Jour férié, il va taper le nom du jour férié selon la Datj, si ce jour correspond à un jour férié.
For J = 1 To 13
'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 une table. Type de données en
'lecture seule.
If Datj = Range("TabJoursFériés").ListObject.ListColumns("Date jour férié").DataBodyRange(J) Then
.Cells(Lig + 12, Col) = "JF" & Format(J, "00")
.Cells(Lig + 13, Col) = Range("TabJoursFériés").ListObject.ListColumns("Nom jour férié").DataBodyRange(J)
End If
Next J
'Incrémentations pour menu suivant.
nm = nm + 1
Datj = WorksheetFunction.WorkDay(Datj, 1)
If Year(Datj) > Range("Année_en_Cours").Value Then Exit For
Next Col
Next Lig
End With
End Sub- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
C'est mieux mais les samedis et dimanches n'apparaissent toujours pas et la date semble erronée (ligne3, colonnes B à H incluses)
Ok, remplacement de la ligne (en fond de macro)
Datj = WorksheetFunction.WorkDay(Datj, 1)par
Datj = Datj + 1- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
Merci.
1) Serait-il possible de faire cela sur huit colonnes (A à H incluses) au lieu de 10 ? Oui, j'ai modifié en conséquence et cela fonctionne.
2) La date de chaque colonne est bizarre. Elle devra apparaître sous la forme mardi 1 janvier 2026 et ainsi de suite.
3) Pour propositions menus VMWE, seuls les samedis et les dimanches devront apparaître et toujours sur huit colonnes maximum avec la date sous la même forme que le 2). Quelle formule doit être écrite pour qu'il en soit ainsi ?
D'avance merci pour votre réponse.
1) Serait-il possible de faire cela sur huit colonnes (A à H incluses) au lieu de 10 ? ok
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 de jours ouvrés indiqué avant ou après une date (date de début).
'Les jours ouvrés excluent les week-ends et les jours de congés. Utilisez la fonction WORKDAY pour exclure les week-ends 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 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 journaliers")
'B:H : représente les colonnes de la feuille Propositions menus midi journaliers qui seront à remplir. ClearContents : Masquer toutMéthode ClearContents telle qu'elle s'ap-
'plique à l'objet.
'Range. Efface les formules de la plage.
.Range("B2:J901").ClearContents
.Range("A1").Resize(901, 8).Borders.Weight = xlThick 'Bordure épaisse plage complète
'For Lig = 1 to 901 Step 17 : 1 to 901 : reprense le nombre de lignes à remplir (y compris la ligne titre). Step : Le mot clé Step est employé dans les contextes suivants :
'For...Next, instruction.
For Lig = 1 To 901 Step 17
.Cells(Lig + 0, 1) = "Propositions menus journaliers"
'C'est le centrage sur plusieurs colonnes qui inhibe l'affichage des bordures intérieures. Centrer sur toutes les colonnes.
.Cells(Lig + 0, 1).Resize(1, 8).HorizontalAlignment = xlCenterAcrossSelection
.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 légume 2)"
.Cells(Lig + 7, 1) = "Légume 2"
.Cells(Lig + 8, 1) = "Quantité légume 2"
.Cells(Lig + 9, 1) = "Référence viande"
.Cells(Lig + 10, 1) = "Viande"
.Cells(Lig + 11, 1) = "Quantité viande"
.Cells(Lig + 12, 1) = "Référence dessert"
.Cells(Lig + 13, 1) = "Dessert"
.Cells(Lig + 14, 1) = "Quantité dessert"
.Cells(Lig + 15, 1) = "Référence jour férié"
.Cells(Lig + 16, 1) = "Jour férié"
'For Col = 2 to 8 : Pour les colonnes 2 à 8 (la colonne A n'est pas prise en compte, le décompte commence donc à la colonne B jusqu'à la colonne H incluses.
For Col = 2 To 8
'En tête. À la ligne 1 (nom compris la ligne titre), va écrire MJ et formater le numéro menu (nm);À la ligne 2, (immédiatement après la précédente), va écrire la date
'du jour.
.Cells(Lig + 1, Col) = "MJ" & Format(nm, "00")
.Cells(Lig + 2, Col) = Format(Datj, "dddd dd mm yyyy")
'Légume. Dans les colonnes B à H incluses, sur chaque ligne Référence légume, il va taper LMJ. Mêmes colonnes, les deux lignes suivantes (Légume et Quantité lé-
'gume) vont rester vides.
.Cells(Lig + 3, Col) = "LMJ"
.Cells(Lig + 4, Col) = ""
.Cells(Lig + 5, Col) = ""
'Viande. Dans les colonnes B à H incluses, sur chaque ligne Référence viande, il va taper VMJ. Mêmes colonnes, les deux lignes suivantes (Viande et Quantité
'viande) vont rester vides.
.Cells(Lig + 6, Col) = "VMJ"
.Cells(Lig + 7, Col) = ""
.Cells(Lig + 8, Col) = "100,00"
'Dessert. Dans les colonnes B à H incluses, sur chaque ligne, il va les remplir selon les instructions données..
.Cells(Lig + 9, Col) = "DMR01"
.Cells(Lig + 10, Col) = "Pomme"
.Cells(Lig + 11, Col) = "1,00"
'Fériés. Dans les colonnes B à H incluses, sur chaque ligne Jour férié, il va taper le nom du jour férié selon la Datj, si ce jour correspond à un jour férié.
For J = 1 To 13
'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 une table. Type de données en
'lecture seule.
If Datj = Range("TabJoursFériés").ListObject.ListColumns("Date jour férié").DataBodyRange(J) Then
.Cells(Lig + 12, Col) = "JF" & Format(J, "00")
.Cells(Lig + 13, Col) = Range("TabJoursFériés").ListObject.ListColumns("Nom jour férié").DataBodyRange(J)
End If
Next J
'Incrémentations pour menu suivant.
nm = nm + 1
Datj = Datj + 1
If Year(Datj) > Range("Année_en_Cours").Value Then Exit For
Next Col
Next Lig
End With
End Sub2) La date de chaque colonne est bizarre. Qu'est-ce qui est bizarre?
3) Pour propositions menus VMWE, seuls les samedis et les dimanches doivent apparaître et toujours sur huit colonnes maximum. Quelle formule doit être écrite pour qu'il en soit ainsi ? Je regarderai plus tard
- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
2) Elle se présente ainsi :
| jeudi 01 01 2026 |
| C'est le mois qui apparaît sous une forme chiffrée au lieu d'un texte (01 au lieu de janvier) : j'ai trouvé pourquoi : mm au lieu de mmmm |
Ça n'a rien de bizarre, c'est le format que j'ai choisi, si vous voulez le mois en entier remplacez la ligne
.Cells(Lig + 2, Col) = Format(Datj, "dddd dd mm yyyy")par
.Cells(Lig + 2, Col) = Format(Datj, "dddd dd mmmm yyyy")ou si vous ne voulez que les 3 premières lettres du mois
.Cells(Lig + 2, Col) = Format(Datj, "dddd dd mmm yyyy")- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
C'est bien ce que j'avais dit dans mon précédent message. C'est parfait et c'est bien ce que je voulais. Merci Arturo83. Quand j'aurai la réponse pour propositions menus VMWE, je reviendrai sur la feuille Menus journaliers pour étudier le prochain problème qui concerne Référence légume. Bonnes soirée et continuation. Prenez bien soin de vous. Encore un cordial et chaleureux merci
Bonjour,
Code pour le module "MGénérer_GenPropMVMWE"
Option Explicit
Sub GénPropMVMWE()
'Déclaration des variables. nm = numéro menu. J représente le nombre de lignes, excepté la ligne titre;le décompte commence donc à 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 de jours ouvrés indiqué avant ou après une date (date de début).
'Les jours ouvrés excluent les week-ends et les jours de congés. Utilisez la fonction WORKDAY pour exclure les week-ends 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 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 menus VMWE") : il s'agit de la feuille dont le nom est indiqué à l'intérieur de la parenthèse.
With Worksheets("Propositions menus VMWE")
'B:H : représente les colonnes de la feuille Propositions menus midi journaliers qui seront à remplir. ClearContents : Masquer toutMéthode ClearContents telle qu'elle s'ap-
'plique à l'objet.
'Range. Efface les formules de la plage.
.Range("B2:J901").ClearContents
.Range("A1").Resize(901, 8).Borders.Weight = xlThick 'Bordure épaisse plage complète
'For Lig = 1 to 901 Step 17 : 1 to 901 : reprense le nombre de lignes à remplir (y compris la ligne titre). Step : Le mot clé Step est employé dans les contextes suivants :
'For...Next, instruction.
For Lig = 1 To 901 Step 17
.Cells(Lig + 0, 1) = "Propositions menus journaliers"
'C'est le centrage sur plusieurs colonnes qui inhibe l'affichage des bordures intérieures. Centrer sur toutes les colonnes.
.Cells(Lig + 0, 1).Resize(1, 8).HorizontalAlignment = xlCenterAcrossSelection
.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 légume 2)"
.Cells(Lig + 7, 1) = "Légume 2"
.Cells(Lig + 8, 1) = "Quantité légume 2"
.Cells(Lig + 9, 1) = "Référence viande"
.Cells(Lig + 10, 1) = "Viande"
.Cells(Lig + 11, 1) = "Quantité viande"
.Cells(Lig + 12, 1) = "Référence dessert"
.Cells(Lig + 13, 1) = "Dessert"
.Cells(Lig + 14, 1) = "Quantité dessert"
.Cells(Lig + 15, 1) = "Référence jour férié"
.Cells(Lig + 16, 1) = "Jour férié"
'For Col = 2 to 8 : Pour les colonnes 2 à 8 (la colonne A n'est pas prise en compte, le décompte commence donc à la colonne B jusqu'à la colonne H incluses.
For Col = 2 To 8
If WorksheetFunction.Weekday(Datj, 2) > 5 Then
'En tête. À la ligne 1 (nom compris la ligne titre), va écrire MJ et formater le numéro menu (nm);À la ligne 2, (immédiatement après la précédente), va écrire la date
'du jour.
.Cells(Lig + 1, Col) = "MJ" & Format(nm, "00")
.Cells(Lig + 2, Col) = Format(Datj, "dddd dd mmmm yyyy")
'Légume. Dans les colonnes B à H incluses, sur chaque ligne Référence légume, il va taper LMJ. Mêmes colonnes, les deux lignes suivantes (Légume et Quantité lé-
'gume) vont rester vides.
.Cells(Lig + 3, Col) = "LMJ"
.Cells(Lig + 4, Col) = ""
.Cells(Lig + 5, Col) = ""
'Viande. Dans les colonnes B à H incluses, sur chaque ligne Référence viande, il va taper VMJ. Mêmes colonnes, les deux lignes suivantes (Viande et Quantité
'viande) vont rester vides.
.Cells(Lig + 6, Col) = "VMJ"
.Cells(Lig + 7, Col) = ""
.Cells(Lig + 8, Col) = "100,00"
'Dessert. Dans les colonnes B à H incluses, sur chaque ligne, il va les remplir selon les instructions données..
.Cells(Lig + 9, Col) = "DMR01"
.Cells(Lig + 10, Col) = "Pomme"
.Cells(Lig + 11, Col) = "1,00"
'Fériés. Dans les colonnes B à H incluses, sur chaque ligne Jour férié, il va taper le nom du jour férié selon la Datj, si ce jour correspond à un jour férié.
For J = 1 To 13
'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 une table. Type de données en
'lecture seule.
If Datj = Range("TabJoursFériés").ListObject.ListColumns("Date jour férié").DataBodyRange(J) Then
.Cells(Lig + 12, Col) = "JF" & Format(J, "00")
.Cells(Lig + 13, Col) = Range("TabJoursFériés").ListObject.ListColumns("Nom jour férié").DataBodyRange(J)
End If
Next J
End If
'Incrémentations pour menu suivant.
nm = nm + 1
Datj = Datj + 1
If Year(Datj) > Range("Année_en_Cours").Value Then Exit For
Next Col
Next Lig
End With
End SubCdlt
- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
Bonjour Arturo83,
Merci Sur le fonds, c'est bien ce que je voulais. Par contre, pourquoi commencer à la colonne D au lieu de la colonne B ? Pourquoi ne pas remplir les colonnes F à H incluses ? Je n'ai pas lu le code, j'ai juste fait un copier-coller.
Par contre, pourquoi commencer à la colonne D au lieu de la colonne B ? Pourquoi ne pas remplir les colonnes F à H incluses
Je ne fais que répondre à votre demande:
3) Pour propositions menus VMWE, seuls les samedis et les dimanches devront apparaître et toujours sur huit colonnes maximum avec la date sous la même forme que le 2). Quelle formule doit être écrite pour qu'il en soit ainsi ?
- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
Désolé, mais j'ai bien précisé sur huit colonnes avec la date formatée en dddd d mmmm yyyy. Comme je pensais que cela allait de soi, je n'ai pas cru nécessaire de préciser que cela devait commencer à la colonne B et finir à la colonne H.
Eh oui, parfois les explications ne sont pas perçues de la même façon.
Il suffit de déplacer la ligne suivante:
If WorksheetFunction.Weekday(Datj, 2) > 5 Thenle code en entier
Sub GénPropMVMWE()
'Déclaration des variables. nm = numéro menu. J représente le nombre de lignes, excepté la ligne titre;le décompte commence donc à 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 de jours ouvrés indiqué avant ou après une date (date de début).
'Les jours ouvrés excluent les week-ends et les jours de congés. Utilisez la fonction WORKDAY pour exclure les week-ends 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 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 menus VMWE") : il s'agit de la feuille dont le nom est indiqué à l'intérieur de la parenthèse.
With Worksheets("Propositions menus VMWE")
'B:H : représente les colonnes de la feuille Propositions menus midi journaliers qui seront à remplir. ClearContents : Masquer toutMéthode ClearContents telle qu'elle s'ap-
'plique à l'objet.
'Range. Efface les formules de la plage.
.Range("B2:J901").ClearContents
.Range("A1").Resize(901, 8).Borders.Weight = xlThick 'Bordure épaisse plage complète
'For Lig = 1 to 901 Step 17 : 1 to 901 : reprense le nombre de lignes à remplir (y compris la ligne titre). Step : Le mot clé Step est employé dans les contextes suivants :
'For...Next, instruction.
For Lig = 1 To 901 Step 17
.Cells(Lig + 0, 1) = "Propositions menus journaliers"
'C'est le centrage sur plusieurs colonnes qui inhibe l'affichage des bordures intérieures. Centrer sur toutes les colonnes.
.Cells(Lig + 0, 1).Resize(1, 8).HorizontalAlignment = xlCenterAcrossSelection
.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 légume 2)"
.Cells(Lig + 7, 1) = "Légume 2"
.Cells(Lig + 8, 1) = "Quantité légume 2"
.Cells(Lig + 9, 1) = "Référence viande"
.Cells(Lig + 10, 1) = "Viande"
.Cells(Lig + 11, 1) = "Quantité viande"
.Cells(Lig + 12, 1) = "Référence dessert"
.Cells(Lig + 13, 1) = "Dessert"
.Cells(Lig + 14, 1) = "Quantité dessert"
.Cells(Lig + 15, 1) = "Référence jour férié"
.Cells(Lig + 16, 1) = "Jour férié"
'For Col = 2 to 8 : Pour les colonnes 2 à 8 (la colonne A n'est pas prise en compte, le décompte commence donc à la colonne B jusqu'à la colonne H incluses.
For Col = 2 To 8
'En tête. À la ligne 1 (nom compris la ligne titre), va écrire MJ et formater le numéro menu (nm);À la ligne 2, (immédiatement après la précédente), va écrire la date
'du jour.
.Cells(Lig + 1, Col) = "MJ" & Format(nm, "00")
.Cells(Lig + 2, Col) = Format(Datj, "dddd dd mmmm yyyy")
If WorksheetFunction.Weekday(Datj, 2) > 5 Then
'Légume. Dans les colonnes B à H incluses, sur chaque ligne Référence légume, il va taper LMJ. Mêmes colonnes, les deux lignes suivantes (Légume et Quantité lé-
'gume) vont rester vides.
.Cells(Lig + 3, Col) = "LMJ"
.Cells(Lig + 4, Col) = ""
.Cells(Lig + 5, Col) = ""
'Viande. Dans les colonnes B à H incluses, sur chaque ligne Référence viande, il va taper VMJ. Mêmes colonnes, les deux lignes suivantes (Viande et Quantité
'viande) vont rester vides.
.Cells(Lig + 6, Col) = "VMJ"
.Cells(Lig + 7, Col) = ""
.Cells(Lig + 8, Col) = "100,00"
'Dessert. Dans les colonnes B à H incluses, sur chaque ligne, il va les remplir selon les instructions données..
.Cells(Lig + 9, Col) = "DMR01"
.Cells(Lig + 10, Col) = "Pomme"
.Cells(Lig + 11, Col) = "1,00"
'Fériés. Dans les colonnes B à H incluses, sur chaque ligne Jour férié, il va taper le nom du jour férié selon la Datj, si ce jour correspond à un jour férié.
For J = 1 To 13
'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 une table. Type de données en
'lecture seule.
If Datj = Range("TabJoursFériés").ListObject.ListColumns("Date jour férié").DataBodyRange(J) Then
.Cells(Lig + 12, Col) = "JF" & Format(J, "00")
.Cells(Lig + 13, Col) = Range("TabJoursFériés").ListObject.ListColumns("Nom jour férié").DataBodyRange(J)
End If
Next J
End If
'Incrémentations pour menu suivant.
nm = nm + 1
Datj = Datj + 1
If Year(Datj) > Range("Année_en_Cours").Value Then Exit For
Next Col
Next Lig
End With
End Sub- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
Cela ne donne pas le résultat souhaité : pour MVWE, il ne me faut que les samedis et les dimanches sur huit colonnes avec une date sous la forme dddd d mmmm yyyy.
Cela ne donne pas le résultat souhaité : pour MVWE, il ne me faut que les samedis et les dimanches sur huit colonnes avec une date sous la forme dddd d mmmm yyyy.
Cela ne donne pas le résultat souhaité car les explications ne sont pas toujours très évidentes pour moi.
Alors voici la modification, tous les samedis et dimanches sur 8 colonnes.
Sub GénPropMVMWE()
'Déclaration des variables. nm = numéro menu. J représente le nombre de lignes, excepté la ligne titre;le décompte commence donc à 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 de jours ouvrés indiqué avant ou après une date (date de début).
'Les jours ouvrés excluent les week-ends et les jours de congés. Utilisez la fonction WORKDAY pour exclure les week-ends 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 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 menus VMWE") : il s'agit de la feuille dont le nom est indiqué à l'intérieur de la parenthèse.
With Worksheets("Propositions menus VMWE")
'B:H : représente les colonnes de la feuille Propositions menus midi journaliers qui seront à remplir. ClearContents : Masquer toutMéthode ClearContents telle qu'elle s'ap-
'plique à l'objet.
'Range. Efface les formules de la plage.
.Range("B2:J901").ClearContents
.Range("A1").Resize(901, 8).Borders.Weight = xlThick 'Bordure épaisse plage complète
'For Lig = 1 to 901 Step 17 : 1 to 901 : reprense le nombre de lignes à remplir (y compris la ligne titre). Step : Le mot clé Step est employé dans les contextes suivants :
'For...Next, instruction.
For Lig = 1 To 901 Step 17
.Cells(Lig + 0, 1) = "Propositions menus journaliers"
'C'est le centrage sur plusieurs colonnes qui inhibe l'affichage des bordures intérieures. Centrer sur toutes les colonnes.
.Cells(Lig + 0, 1).Resize(1, 8).HorizontalAlignment = xlCenterAcrossSelection
.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 légume 2)"
.Cells(Lig + 7, 1) = "Légume 2"
.Cells(Lig + 8, 1) = "Quantité légume 2"
.Cells(Lig + 9, 1) = "Référence viande"
.Cells(Lig + 10, 1) = "Viande"
.Cells(Lig + 11, 1) = "Quantité viande"
.Cells(Lig + 12, 1) = "Référence dessert"
.Cells(Lig + 13, 1) = "Dessert"
.Cells(Lig + 14, 1) = "Quantité dessert"
.Cells(Lig + 15, 1) = "Référence jour férié"
.Cells(Lig + 16, 1) = "Jour férié"
'For Col = 2 to 8 : Pour les colonnes 2 à 8 (la colonne A n'est pas prise en compte, le décompte commence donc à la colonne B jusqu'à la colonne H incluses.
For Col = 2 To 8
'En tête. À la ligne 1 (nom compris la ligne titre), va écrire MJ et formater le numéro menu (nm);À la ligne 2, (immédiatement après la précédente), va écrire la date
'du jour.
If WorksheetFunction.Weekday(Datj, 2) > 5 Then
.Cells(Lig + 1, Col) = "MJ" & Format(nm, "00")
.Cells(Lig + 2, Col) = Format(Datj, "dddd dd mmmm yyyy")
'Légume. Dans les colonnes B à H incluses, sur chaque ligne Référence légume, il va taper LMJ. Mêmes colonnes, les deux lignes suivantes (Légume et Quantité lé-
'gume) vont rester vides.
.Cells(Lig + 3, Col) = "LMJ"
.Cells(Lig + 4, Col) = ""
.Cells(Lig + 5, Col) = ""
'Viande. Dans les colonnes B à H incluses, sur chaque ligne Référence viande, il va taper VMJ. Mêmes colonnes, les deux lignes suivantes (Viande et Quantité
'viande) vont rester vides.
.Cells(Lig + 6, Col) = "VMJ"
.Cells(Lig + 7, Col) = ""
.Cells(Lig + 8, Col) = "100,00"
'Dessert. Dans les colonnes B à H incluses, sur chaque ligne, il va les remplir selon les instructions données..
.Cells(Lig + 9, Col) = "DMR01"
.Cells(Lig + 10, Col) = "Pomme"
.Cells(Lig + 11, Col) = "1,00"
'Fériés. Dans les colonnes B à H incluses, sur chaque ligne Jour férié, il va taper le nom du jour férié selon la Datj, si ce jour correspond à un jour férié.
For J = 1 To 13
'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 une table. Type de données en
'lecture seule.
If Datj = Range("TabJoursFériés").ListObject.ListColumns("Date jour férié").DataBodyRange(J) Then
.Cells(Lig + 12, Col) = "JF" & Format(J, "00")
.Cells(Lig + 13, Col) = Range("TabJoursFériés").ListObject.ListColumns("Nom jour férié").DataBodyRange(J)
End If
Next J
Else
Col = Col - 1
End If
'Incrémentations pour menu suivant.
nm = nm + 1
Datj = Datj + 1
If Year(Datj) > Range("Année_en_Cours").Value Then Exit For
Next Col
Next Lig
End With
End Sub- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
Merci Arturo, c'est presque bon. Le numéro du menu du premier jour ne débute pas à 01.
Ok, je pensais que cela devait correspondre au numéro de la feuille "Propositions menus journaliers", alors dans ce cas, il suffit de déplacer le la ligne suivante:
nm = nm + 1et la mettre avant le "Else"
le code en entier:
Sub GénPropMVMWE() 'Selon Arturo83.
'Déclaration des variables. nm = numéro menu. J représente le nombre de lignes, excepté la ligne titre;le décompte commence donc à 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 de jours ouvrés indiqué avant ou après une date (date de début).
'Les jours ouvrés excluent les week-ends et les jours de congés. Utilisez la fonction WORKDAY pour exclure les week-ends 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 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 menus VMWE") : il s'agit de la feuille dont le nom est indiqué à l'intérieur de la parenthèse.
With Worksheets("Propositions menus VMWE")
'B:H : représente les colonnes de la feuille Propositions menus midi journaliers qui seront à remplir. ClearContents : Masquer toutMéthode ClearContents telle qu'elle s'ap-
'plique à l'objet.
'Range. Efface les formules de la plage.
.Range("B2:J901").ClearContents
.Range("A1").Resize(901, 8).Borders.Weight = xlThick 'Bordure épaisse plage complète
'For Lig = 1 to 901 Step 17 : 1 to 901 : reprense le nombre de lignes à remplir (y compris la ligne titre). Step : Le mot clé Step est employé dans les contextes suivants :
'For...Next, instruction.
For Lig = 1 To 901 Step 17
.Cells(Lig + 0, 1) = "Propositions menus journaliers"
'C'est le centrage sur plusieurs colonnes qui inhibe l'affichage des bordures intérieures. Centrer sur toutes les colonnes.
.Cells(Lig + 0, 1).Resize(1, 8).HorizontalAlignment = xlCenterAcrossSelection
.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 légume 2)"
.Cells(Lig + 7, 1) = "Légume 2"
.Cells(Lig + 8, 1) = "Quantité légume 2"
.Cells(Lig + 9, 1) = "Référence viande"
.Cells(Lig + 10, 1) = "Viande"
.Cells(Lig + 11, 1) = "Quantité viande"
.Cells(Lig + 12, 1) = "Référence dessert"
.Cells(Lig + 13, 1) = "Dessert"
.Cells(Lig + 14, 1) = "Quantité dessert"
.Cells(Lig + 15, 1) = "Référence jour férié"
.Cells(Lig + 16, 1) = "Jour férié"
'For Col = 2 to 8 : Pour les colonnes 2 à 8 (la colonne A n'est pas prise en compte, le décompte commence donc à la colonne B jusqu'à la colonne H incluses.
For Col = 2 To 8
'En tête. À la ligne 1 (nom compris la ligne titre), va écrire MJ et formater le numéro menu (nm);À la ligne 2, (immédiatement après la précédente), va écrire la date
'du jour.
If WorksheetFunction.Weekday(Datj, 2) > 5 Then
.Cells(Lig + 1, Col) = "MJ" & Format(nm, "00")
.Cells(Lig + 2, Col) = Format(Datj, "dddd dd mmmm yyyy")
'Légume. Dans les colonnes B à H incluses, sur chaque ligne Référence légume, il va taper LMJ. Mêmes colonnes, les deux lignes suivantes (Légume et Quantité lé-
'gume) vont rester vides.
.Cells(Lig + 3, Col) = "LMJ"
.Cells(Lig + 4, Col) = ""
.Cells(Lig + 5, Col) = ""
'Viande. Dans les colonnes B à H incluses, sur chaque ligne Référence viande, il va taper VMJ. Mêmes colonnes, les deux lignes suivantes (Viande et Quantité
'viande) vont rester vides.
.Cells(Lig + 6, Col) = "VMJ"
.Cells(Lig + 7, Col) = ""
.Cells(Lig + 8, Col) = "100,00"
'Dessert. Dans les colonnes B à H incluses, sur chaque ligne, il va les remplir selon les instructions données..
.Cells(Lig + 9, Col) = "DMR01"
.Cells(Lig + 10, Col) = "Pomme"
.Cells(Lig + 11, Col) = "1,00"
'Fériés. Dans les colonnes B à H incluses, sur chaque ligne Jour férié, il va taper le nom du jour férié selon la Datj, si ce jour correspond à un jour férié.
For J = 1 To 13
'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 une table. Type de données en
'lecture seule.
If Datj = Range("TabJoursFériés").ListObject.ListColumns("Date jour férié").DataBodyRange(J) Then
.Cells(Lig + 12, Col) = "JF" & Format(J, "00")
.Cells(Lig + 13, Col) = Range("TabJoursFériés").ListObject.ListColumns("Nom jour férié").DataBodyRange(J)
End If
Next J
nm = nm + 1
Else
Col = Col - 1
End If
'Incrémentations pour menu suivant.
Datj = Datj + 1
If Year(Datj) > Range("Année_en_Cours").Value Then Exit For
Next Col
Next Lig
End With
End Sub