Dans cet article, nous allons créer une macro pour créer une feuille pour chaque jour de la semaine pour le mois spécifié de l’année spécifiée à l’exclusion de toutes les dates spécifiées dans la liste des jours fériés.

Avant d’exécuter la macro, trois entrées sont nécessaires. Nous devons spécifier le numéro du mois dans la cellule J10, l’année dans la cellule J11 et spécifier la liste des dates de vacances dans la plage B16: B26.

Après avoir spécifié les valeurs d’entrée, cliquez sur le bouton Soumettre pour exécuter la macro.

ArrowMain

Cette macro insérera une nouvelle feuille pour chaque jour de la semaine pour le mois spécifié à l’exclusion des dates spécifiées dans la liste des jours fériés.

ArrowAfterRunningMacro

Explication logique

Dans cette macro, nous avons utilisé la fonction DateSerial pour trouver la dernière date du mois spécifié. Nous avons utilisé FOR Loop pour effectuer une boucle de la date de début du mois à la dernière date du mois. Nous avons utilisé la fonction Rechercher pour déterminer si la date utilisée existe dans la liste de vacances spécifiée.

[_GoBack] # La fonction Weekday est utilisée avec l’instruction If pour vérifier si une date est un jour de semaine ou un week-end. L’instruction If insère une nouvelle feuille uniquement si la date est un jour de la semaine et qu’elle n’existe pas dans la liste des jours fériés. Comme on peut le voir dans la capture d’écran ci-dessus, la feuille du 6 ^ e ^ décembre n’est pas créée, car le 6 ^ e ^ décembre est présent dans la liste des jours fériés.

Veuillez suivre ci-dessous pour le code

Option Explicit

Sub MonthApply()

'Declaring variables

Dim DVariable As Date

Dim RngFind As Range

Dim MonthNo, YearNo As Integer

Dim StartDate, EndDate As Date

'Disabling the screen updates

Application.ScreenUpdating = False

With Worksheets("Main")



'Getting month and year from cell J10 and J11 from "Main" sheet

MonthNo = .Range("J10").Value

YearNo = .Range("J11").Value



'Deriving start and end date

StartDate = DateSerial(YearNo, MonthNo, 1)

EndDate = DateSerial(YearNo, MonthNo + 1, 0)



'Looping through all the dates in the specified month

For DVariable = StartDate To EndDate



'Finding if date is marked as holiday

Set RngFind = .Range("B16:B26").Find(DVariable)



'Checking whether date is holiday, weekend or weekday

If RngFind Is Nothing And Weekday(DVariable, 2) < 6 Then



'Inserting new sheet after the last worksheet in the workbook

Worksheets.Add after:=Worksheets(Worksheets.Count)



'Renaming the active sheet

ActiveSheet.Name = Format(DVariable, "dd.mm.yy")

End If



Next DVariable



.Select

End With

Application.ScreenUpdating = True

End Sub

Si vous avez aimé ce blog, partagez-le avec vos amis sur Facebook et Facebook.

Nous serions ravis de vous entendre, faites-nous savoir comment nous pouvons améliorer notre travail et l’améliorer pour vous. Écrivez-nous à [email protected]