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.

ArrowMain

Nous avons spécifié les dates de vacances dans la colonne A de la feuille «Vacances».

ArrowHolidayList

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.

ArrowOutput

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]