Calculer le nombre de jours de travail entre deux dates à l’aide VBA dans Microsoft Excel
Dans cet article, nous allons créer une fonction définie par l’utilisateur (UDF) pour compter le nombre de jours ouvrables entre les dates spécifiées, y compris ou à l’exclusion des samedis et dimanches en semaine.
Les données brutes pour cet exemple se composent d’une date de début et d’une date de fin. Nous voulons compter le nombre de jours ouvrables entre ces dates.
Nous avons spécifié les dates de vacances dans la colonne A de la feuille «Vacances».
Excel a une fonction intégrée, NETWORKDAYS pour compter le nombre de jours ouvrables entre l’intervalle.
Syntaxe de la fonction NETWORKDAYS NETWORKDAYS (StartDate, EndDate, [Holidays])
Cette fonction exclura la date spécifiée dans la liste des jours fériés, tout en comptant le nombre de jours ouvrables.
Cette fonction considère par défaut les samedis et dimanches comme des congés de semaine, nous ne pouvons donc pas compter le nombre de jours ouvrables, au cas où nous n’aurions qu’une semaine de congé.
Nous avons créé la fonction personnalisée «CountWorkingDays» pour compter le nombre de jours ouvrables entre les intervalles. Cette fonction personnalisée gère le problème de la fonction NETWORKDAYS. Dans cette fonction, nous pouvons compter le nombre de jours ouvrables même s’il n’y a qu’une seule semaine de congé le samedi ou le dimanche.
Syntaxe de la fonction personnalisée
CountWorkingDays (StartDate, EndDate, y compris les samedis, y compris les dimanches)
InclSaturdays et InclSundays sont des paramètres optionnels. Par défaut, les deux ont des valeurs TRUE. Pour changer les samedis et dimanches en jours ouvrables, modifiez la valeur du paramètre respectif sur FALSE.
Microsoft a introduit la fonction NETWORKDAYS.INTL avec Excel 2010. Cette fonction gère le problème de la fonction NETWORKDAYS. Dans cette fonction, nous pouvons spécifier les jours de congé de la semaine. Nous pouvons spécifier un ou deux jours comme semaine de congé.
Syntaxe de la fonction NETWORKDAYS.INTL
NETWORKDAYS.INTL (StartDate, EndDate, [Weekend], [Holidays])
Dans le paramètre week-end, nous pouvons spécifier des jours de congé de la semaine.
Dans cet exemple, nous utiliserons les trois fonctions ci-dessus pour compter le nombre de jours ouvrables.
Explication logique
Dans la fonction «CountWorkingDays», nous vérifions d’abord si une date donnée dans le paramètre existe dans la liste de vacances spécifiée. Si la date existe dans la liste des jours fériés, ce jour n’est pas compté dans le nombre de jours ouvrables. Si la date n’existe pas dans la liste des jours fériés, vérifiez si la date indiquée est le samedi ou le dimanche. En fonction du paramètre d’entrée fourni, vérifiez s’il faut inclure ou exclure les samedis ou dimanches comme jours fériés.
Explication du code
Set RngFind = Worksheets (« Holidays »). Columns (1) .Find (i)
Le code ci-dessus est utilisé pour trouver l’emplacement où la date spécifiée existe dans la liste des jours fériés.
If Not RngFind Is Nothing Then GoTo ForLast End If Above code est utilisé pour vérifier si la date spécifiée existe dans la liste des jours fériés. Si la condition renvoie TRUE, ce jour n’est pas compté dans le nombre de jours ouvrables.
Veuillez suivre ci-dessous pour le code
Option Explicit Function CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _ Optional InclSundays As Boolean = True) 'Declaring variables Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Resume Next 'Finding the location where the specified date exist in the Holidays sheet Set RngFind = Worksheets("Holidays").Columns(1).Find(i) On Error GoTo 0 'Checking whether it is holiday on the given date If Not RngFind Is Nothing Then GoTo ForLast End If 'Checking whether it is Saturday on given date If InclSaturdays Then If Weekday(i, 2) = 6 Then GoTo ForLast End If End If 'Checking whether it is Sunday on given date If InclSundays Then If Weekday(i, 2) = 7 Then GoTo ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Function
Si vous avez aimé ce blog, partagez-le avec vos amis sur Facebook et Facebook.
Nous aimerions avoir de vos nouvelles, faites-nous savoir comment nous pouvons améliorer notre travail et le rendre meilleur pour vous. Écrivez-nous à [email protected]