Créer des feuilles de jour d’un mois sans week-end et les jours fériés à l’aide de VBA
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.
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.
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]