Si vous cherchez la manière de calculer, en VBA, le jour ouvrable précédent ou jour ouvrable suivant à une date spécifique, vous trouverez ci-bas la solution.
Il s'agit de deux fonctions qui utilisent comme argument la date par rapport à laquelle on doit chercher le jour ouvrable précédent et suivant.
Les fonctions sont assez simples et il vous suffira de les copier/coller dans votre Projet VBA…
Attention: ces fonctions ne tiennent compte uniquement des week-ends (les jours fériés ne sont pas pris en compte).
Le jour ouvrable précédent en VBA
Voici donc le code VBA de la première fonction…
1 2 3 4 5 6 7 8 9 10 |
Public Function JourOuvrablePrecedent(Jour As Date) 'par Excel-Malin ( https://excel-malin.com ) Select Case Weekday(Jour, vbMonday) Case 7: JourOuvrablePrecedent = Jour - 2 'si dimanche --> vendredi Case 1: JourOuvrablePrecedent = Jour - 3 'si lundi --> vendredi Case Else: JourOuvrablePrecedent = Jour - 1 End Select End Function |
Le jour ouvrable suivant en VBA
Et pour le jour ouvrable suivant, utilisez cette fonction:
1 2 3 4 5 6 7 8 9 |
Public Function JourOuvrableSuivant(Jour As Date) 'par Excel-Malin ( https://excel-malin.com ) Select Case Weekday(Jour, vbMonday) Case 5: JourOuvrableSuivant = Jour + 3 'si vendredi --> lundi Case 6: JourOuvrableSuivant = Jour + 2 'si samedi --> lundi Case Else: JourOuvrableSuivant = Jour + 1 End Select End Function |
Attention au format Date!
Comme vous pouvez le voir, les deux fonctions travaillent avec les arguments de type Date
. C'est à dire que quand vous voulez faire "passer" une date dans cette fonction, il doit vraiment s'agir d'une "Date" dans le sens du VBA.
-
- Une date comme
"10/12/2021"
ne va pas fonctionner car il s'agit d'une valeur de typeString
(chaîne de caractères). - Si vous omettez les guillemets pour éviter que la date soit considéré comme un
String
, cela ne résoudra pas le problème car10/12/2021
sera interprété par VBA comme10 divisé par 12 divisé par 2021
et vous obtiendrez une valeur de 4,12 à la place d'une date… - Une date en VBA, pour être considérée comme telle, doit être entouré de croisillons
#
– donc ici#10/12/2021#
. Mais là aussi, vous devez vous méfier à la confusion entre les jours et les mois…
- Une date comme
La manière la plus simple et la plus fiable d'obtenir une valeur au format date est l'utilisation de la fonction VBA DateSerial(). De cette manière, vous évitez les mauvaises surprises comme par exemple la confusion entre le format européen (jj/mm/aaaa
) et le format américain (mm/jj/aaaa
).
Vous pouvez voir comment faire dans la section qui suit.
Exemples d'utilisation de ces deux fonctions de recherche de jours ouvrables
Voici donc un exemple qui montre comment trouver les deux jours ouvrable par rapport à une date déterminée (ici le 23/11/2021).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub ExempleJoursOuvrables() 'par Excel-Malin ( https://excel-malin.com ) Dim MaDate As Date Dim JOprecedent As Date Dim JOsuivant As Date MaDate = DateSerial(2021, 11, 23) '=> AAAA, MM, DD JOprecedent = JourOuvrablePrecedent(MaDate) JOsuivant = JourOuvrableSuivant(MaDate) MsgBox "Ma date: " & MaDate & Chr(13) & Chr(10) & _ "Jour ouvrable précédent: " & JOprecedent & Chr(13) & Chr(10) & _ "Jour ouvrable suivant: " & JOsuivant End Sub |
N'oubliez pas: pour que cet exemple fonctionne, vous devez avoir copié dans votre Projet VBA tous les trois codes sources se trouvant sur cette page (les 2 fonctions + la procédure (Sub
) de test).
Pour en savoir plus sur VBA (et les dates)
D'autres articles intéressants au sujet des dates en VBA…
- Gestion des dates et heures en VBA
- Calcul de la date de Pâques en VBA et en Excel
- Référentiel VBA en PDF: fonctions, instructions, événements & opérateurs – un livre PDF avec toutes les fonctions VBA et bien plus
- Cours VBA en ligne: "VBA: droit au but"
- Comment utiliser RECHERCHEV directement en VBA
- VBA: MsgBox qui se ferme automatiquement
Commentaire sur “Jour ouvrable précédent & jour ouvrable suivant en VBA”
Bonjour,
Super code.
Cependant j'ai besoin d'y intégrer des variable et cela ne fonctionne avec ou sans les guillemets :
Pourriez vous me guider ?
Merci