Date&heures ouvrées - VBA correction en J+1 si jour férié

Bonjour,

n'étant pas un pro du VBA, je vous soumet ma problématique.

Je possède une base de données avec des dates et heures de création de commandes (format JJ/MM/AAAA hh:mm:ss)

Depuis ces dates, je calcule un temps de traitement que je souhaite en jours et heures ouvrés (entre 9h et 17h, hors W-E et jours fériés)

Pour ce faire, il faut que mes dates de création soient :

  • si date créa >17h, alors datecorrigée=J+1 à 9H,
  • si date créa avant 9H, alors datecorrigée= au jour à 9H
  • si date créa jour non ouvré, alors datecorrigée= premier prochain jour ouvré à 9h
  • si date créa jour ouvré entre 9h et 17h, alors datecorrigée=date créa (c'est OK)

Pour tester si ma date est un jour ouvré ou non, j'utilise la formule avec par exemple une date en A1: NB.JOURS.OUVRES(A1;A1;jours fériés).

  • Si NB.JOURS.OUVRES=0, alors c'est un jour férié
  • Si NB.JOURS.OUVRES=1, alors c'est un jour ouvré

J'avais réussi à sauter les week end grâce à des succession de colonnes mais ça ne fonctionnait que pour 2 jours non ouvrés, et il faut autant de colonnes que de jours fériés alors ce n'est pas pratique (onglet "données brutes")

Donc, Pour obtenir cette date corrigée, j'ai demandé à un ami un peu plus calé que moi en VBA. Il m'a fait une macro qui boucle pour chaque ligne en faisant J+1 tant que Nb.jours.ouvrés=0.

Cette macro fonctionne mais est très lourde et le temps de traitement est très long dès que je teste sur ne serait-ce qu'un quart de ma base (onglet"Feuil1" et la macro qui va avec)

Je pense qu'elle est optimisable, mais je ne sais pas comment...

Ci-joint le fichier avec la macro non activée. En onglet "Feuil1", les dates avant la mise en action de la macro. Un clic sur le bouton et les colonnes H,I,J se remplissent.

Je vous remercie pour votre aide !

La macro en question:

Sub calcul2()
    Range("H7:K200").Clear
    k = 7
Do While Cells(k, 7) <> ""

  Cells(k, 8) = WorksheetFunction.NetworkDays(Cells(k, 7), Cells(k, 7), Sheets("Jours fériés").Range("A4:A16"))
  Cells(k, 9) = Cells(k, 7)

    If Cells(k, 8) = 0 Then

        Cells(k, 10) = 0

    Do While Cells(k, 10) = 0

    Cells(k, 9) = Cells(k, 9) + 1
    Cells(k, 10) = WorksheetFunction.NetworkDays(Cells(k, 9), Cells(k, 9), Sheets("Jours fériés").Range("A4:A16"))

    Loop

    Else
    Cells(k, 9) = Cells(k, 7)
    End If
    k = k + 1

Loop
Dim Rng As Range
       Set Rng = Range("I7:I" & Range("G7").End(xlDown).Row)
        Rng.NumberFormat = "dd/mm/yyyy hh:mm:ss"

End Sub

Bonjour,

Pas besoin d'une macro mais plutôt d'une fonction personnalisée comme celle que j'ai créée = date_ouvrée.

Voir fichier ci-joint

thev a écrit :

Bonjour,

Pas besoin d'une macro mais plutôt d'une fonction personnalisée comme celle que j'ai créée = date_ouvrée.

Voir fichier ci-joint

Merci pour ta réponse !

J'ai eu un peu de mal à la trouver la fonction personnalisé mais maintenant je sais que c'est caché dans les modules

Ca à l'air top, je teste ça et je reviens vers toi.

Une petite question cependant,

Imaginons que je veuille ajouter d'autres dates dans les jours fériés comme des vacances par exemple, comment pourrais-je procéder?

Je te remercie


Après test, tout fonctionne parfaitement à un point près :

Lorsque la date de création tombe entre 9h et 17h un jour férié, ça me la remet bien au premier jour non férié sauf que ce n'est pas à 9h mais à l'heure de création.

Ex commande le 15 aout 2016 à 12:00, elle sera reporté le 16 aout (Ok) mais à 12h au lieu de 9h.

Si tu as une solution la dessus c'est génial

Merci

Bonjour,

Pour ce qui concerne les dates de vacances, le mieux est de créer un tableau de plage des vacances et de le référencer dans ton classeur. Au niveau du code, je l'utilise dans une fonction "jour de vacances".

ci-joint correction pour jour férié 9h avec fonction jour de vacances via un tableau des plages de vacances dans l'onglet "Jours fériés"

thev a écrit :

Bonjour,

Pour ce qui concerne les dates de vacances, le mieux est de créer un tableau de plage des vacances et de le référencer dans ton classeur. Au niveau du code, je l'utilise dans une fonction "jour de vacances".

ci-joint correction pour jour férié 9h avec fonction jour de vacances via un tableau des plages de vacances dans l'onglet "Jours fériés"

C'est niquel,

Merci beaucoup!

Rechercher des sujets similaires à "date heures ouvrees vba correction jour ferie"