De manière générale, si vous avez besoin de déterminer le dernier jour d'un mois particulier, la méthode la plus simple est la suivante:
"On prend le premier jour du mois suivant et on enlève un jour."
Cela nous donne le dernier jour du mois en question et il suffit alors d'extraire le nombre de jours de cette date (via la fonction VBA Day).
Prenons un exemple: on veut déterminer le nombre de jours du mois de juin 2022. Selon la méthode plus haut, il suffit d'utiliser la "formule" suivante: 1/7/2022 - 1 jour
Fonction VBA pour déterminer le dernier jour du mois / le nombre de jours dans un mois
Si on transforme la principe cité plus haut en code VBA, cela donne ceci (une fonction qui utilise comme argument une date):
1 2 3 4 5 6 7 8 9 10 |
Public Function NombreDeJoursDansMois(MaDate As Date) 'par Excel-Malin.com ( https://excel-malin.com ) '1) créer la date pour le 1er jour du mois suivant DateTemporaire = DateAdd("m", 1, MaDate) '2) on soustrait un jour et on détermine le nombre de jours grâce à la fonction "Day" NombreDeJoursDansMois = Day(DateSerial(Year(DateTemporaire), Month(DateTemporaire), 1) - 1) End Function |
Comme vous voyez, cela n'est pas bien compliqué. Grâce à la fonction VBA DateAdd, il est très simple de de travailler avec "le mois suivant".
Si vous êtes, comme moi 🙂 , un adepte de la manière concise d'écrire le code, il est possible de l'exprimer en une seule ligne:
1 2 3 |
Public Function NombreDeJoursDansMois(MaDate As Date) NombreDeJoursDansMois = Day(DateSerial(Year(DateAdd("m", 1, MaDate)), Month(DateAdd("m", 1, MaDate)), 1) - 1) End Function |
Utilisation de la fonction Excel FIN.MOIS en VBA pour déterminer le dernier jour du mois
Il existe une autre possibilité – utiliser une fonction d'Excel (FIN.MOIS) à la place d'une combinaison des fonctions VBA de base. Le code VBA serait alors le suivant:
1 2 3 4 |
Public Function NombreDeJoursDansMois(MaDate As Date) 'par Excel-Malin.com ( https://excel-malin.com ) NombreDeJoursDansMois = Day(Application.WorksheetFunction.EoMonth(MaDate, 0)) End Function |
(!) Notez que dans le code VBA, il faut utiliser le nom anglais de la fonction FIN.MOIS (c'est-à-dire EOMONTH). Mais je dois avouer que j'évite d'utiliser les WorksheetFunction
pour différentes raisons (notamment l'utilisation des Variant
et la gestion des erreurs)…
N'empêche que parfois, les "WorksheetFunctions" peuvent se révéler bien pratiques. Si vous voulez en savoir davantage sur leur utilisation, voici un tutoriel sur WorksheetFunction en VBA.
Pour en savoir plus sur les dates en VBA
La manipulation des dates est très fréquente en VBA et en Excel en général. C'est pourquoi je vous propose les articles suivants traitant ce sujet:
- Gestion des dates et heures en VBA
- VBA: trouver le jour ouvrable suivant / précédent
- Calculer la date de Pâques en VBA
- Jours fériés au Canada (fonctions VBA)
- Liste de toutes les fonctions disponibles en VBA!
Si vous rencontrez les problèmes avec le VBA bloqué dans les fichiers XLSM en provenance d'internet – voici la solution!