Calculs sur dates, WE et jours fériés en VBA

Il est facile dans Excel ou Access de faire la différence entre deux dates pour savoir le nombre de jours qui les sépare. C’est souvent utile dans nos métiers de la logistique : date prévue de livraison en fonction de la date de commande et du délai (10 jours par exemple), calcul du nombre de jours de retard,…

Mais la semaine comprend les week-ends et vous ne voulez pas forcément en tenir compte dans vos calculs.

Week-ends

Pour ne pas tenir compte des week-ends, vous pouvez par exemple intégrer cette fonction en VBA dans Microsoft Excel (appuyez sur Alt-F11 pour accéder à l’éditeur VBA) :

fonction ecartjour excel

fonction ecartjour excel

Dans votre tableau Excel, vous vous en servez en tapant dans une cellule :

= ecartjour (cellule1 ; cellule2)

Etant entendu que chacune des cellules contient une date.

Vous modifierez les calculs effectués par la fonction selon que vous voulez tenir compte des jours inclus ou exclus.

Jours fériés

Pour exclure les jours fériés, il va bien falloir les indiquer quelque part pour que le programme les connaisse ! Je ne vais pas faire la démonstration pour Excel mais pour Access. On pourrait le faire sous Excel mais cela implique de faire référence par exemple à un autre classeur qui serait l’équivalent de la table ci-dessous.

Dans Access, j’ai créé une table CALENDAR_feries qui contient deux colonnes :

table_feries_access

table_jours_feries_access

Ensuite le code de la fonction qu’il faudra appeler à chaque fois que nécessaire :

jours_feries_access

jours_feries_access

Ce petit code devrait vous mettre sur la bonne voie, à vous de l’adapter. Si vous avez des remarques, des questions, ou si vous avez besoin d’aide, utilisez les commentaires ci-dessous.

Auteur : Laurent - 13 mai 2009 (vous pouvez consulter son CV)

2 commentaires pour Calculs sur dates, WE et jours fériés en VBA

  • LEONARD

    Bonjour,

    petite remarque sur le premier test
    if date1 >= date2
    il faut enlever le signe = car si les deux dates sont égales, on part dans une boucle infinie
    car for i = date1 + 1 to date2 donnera immédiatement date1 supérieur à date2

    • Bonjour et merci pour votre contribution !
      Je ne fais pas la même analyse que vous car dans votre exemple, la boucle ne sera finalement pas effectuée.
      Après un essai avec deux dates identiques, le code me semble fonctionner et donner le bon résultat.
      A essayer de votre côté.

Faire un commentaire

 

 

 

Vous pouvez utiliser ces balises HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>