calcul de délais

hebus30

XLDnaute Nouveau
bonjour,

je cherche un moyen de calculer des échéances de délai:

Soit, je connais la date de début d'un chantier, ainsi que le délai en jours ouvrables qui lui ai attribué, je voudrais connaître la date de fin théorique du chantier.
Si possible, pouvoir faire évoluer cette date en ajoutant les jours d'intempéries/congés d'entreprise au fur et à mesure de l'avancement du chantier.

Je précise que je travaille en Belgique, les jours ouvrables sont du lundi au samedi et les jours fériés doivent être pris en compte.

Existe t il une page de calcul qui fait ça?

Merci.
 

job75

XLDnaute Barbatruc
Re : calcul de délais

Bonsoir hebus30, le forum,

Voyez le fichier joint avec le tableau des jours fériés en Belgique jusqu'en 2050.

Les jours fériés variables, liés à Pâques, sont déterminés par formules.

La macro dans le code de la feuille (clic droit sur l'onglet et visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B2:D65536")) Is Nothing Then Exit Sub
Dim debut As Date, delai As Integer, fin As Date, col As Byte
On Error Resume Next
debut = Int(Cells(Target.Row, 2))
delai = Int(Cells(Target.Row, 3)) + Int(Cells(Target.Row, 4))
fin = debut - 1
If debut = 0 Or Target.Count > 1 Or Err Then Intersect(Target.EntireRow, Columns(5)) = "": Exit Sub
While fin < debut + delai
  fin = fin + 1
  col = Application.Match(Year(fin), Rows(1), 0) 'n° de colonne des jours fériés de l'année
  If Err Then MsgBox "Date non valide ou tableau des jours fériés incomplet": Exit Sub
  delai = delai - (Weekday(fin) = 1 Or Application.CountIf(Columns(col), Format(fin, "d mmmm")) = 1)
Wend
Cells(Target.Row, 5) = fin
End Sub

La date de fin de chantier est calculée chaque fois que l'on entre une valeur dans les colonnes B, C ou D.

Edit : validation de données colonnes B, C et D et mise en forme conditionnelle sur les jours fériés fixes.

A+
 

Pièces jointes

  • Fin de chantier(1).zip
    13.3 KB · Affichages: 180
Dernière édition:

job75

XLDnaute Barbatruc
Re : calcul de délais

Rebonsoir,

Une autre manière de faire, avec cette fonction macro (dans un module) :

Code:
Function FIN(debut As Date, duree As Integer, intemperies As Integer, feries As Range) As Date
Dim delai As Integer, col As Byte
debut = Int(debut)
delai = duree + intemperies
FIN = debut - 1
While FIN < debut + delai
  FIN = FIN + 1
  col = Application.Match(Year(FIN), Rows(1), 0) 'n° de colonne des jours fériés de l'année
  delai = delai - (Weekday(FIN) = 1 Or Application.CountIf(Columns(col), Format(FIN, "d mmmm")) = 1)
Wend
End Function

Entrer en E2 la formule : =FIN(B2;C2;D2;G:IV)

Bonne nuit.
 

Pièces jointes

  • Fin de chantier(2).zip
    13.3 KB · Affichages: 93
Dernière édition:

hoerwind

XLDnaute Barbatruc
Re : calcul de délais

Bonjour,

En Belgique les jours ouvrés dans le secteur du bâtiment sont du lundi au vendredi, bornes comprises (cinq jours ouvrés par semaine).

Si c'est ainsi qu'il faut interpréter la question, la fonction SERIE.JOURS.OUVRES() répond à ta question.

Il faut néanmoins établir préalablement une liste des jours fériés, cela peut se faire automatiquement sur base de l'année (fais une recherche sous les anciens messages, tu y trouveras de nombreux exemples), liste à laquelle il faut ajouter les jours de congés (trois semaines au mois de juillet), les jours de récupération (Noël - Nouvel-An), ainsi qu'au fur à mesure les jours d'intempéries.

Si tu es sur une version Excel 2003 (ou antérieure) cette fonction doit être activée en cochant l'Utilitaire d'Analyse sous les Macros complémentaires du menu Outils.

Si toutefois l'entreprise devait quand même travailler le samedi (ce qui m'étonnerait), il y a possibilité d'adapter cette fonction en y ajoutant les samedis.
 

hebus30

XLDnaute Nouveau
Re : calcul de délais

les deux solutions me conviennent très bien, que dois je modifier pour que le Samedi soit considéré comme jours non ouvré?

est il possible de mettre la liste des jours fériés sur une autre feuille du classeur?
Si oui, que dois je modifier?

un tout grand merci.
 

job75

XLDnaute Barbatruc
Re : calcul de délais

Bonjour hebus30,

(...) que dois je modifier pour que le Samedi soit considéré comme jours non ouvré?

est il possible de mettre la liste des jours fériés sur une autre feuille du classeur?

Supposons la liste des jours fériés en Feuil2 (à partir de la colonne A par exemple).

1ère macro :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B2:D65536")) Is Nothing Then Exit Sub
Dim debut As Date, delai As Integer, fin As Date, col As Byte
On Error Resume Next
debut = Int(Cells(Target.Row, 2))
delai = Int(Cells(Target.Row, 3)) + Int(Cells(Target.Row, 4))
fin = debut - 1
If debut = 0 Or Target.Count > 1 Or Err Then Intersect(Target.EntireRow, Columns(5)) = "": Exit Sub
While fin < debut + delai
  fin = fin + 1
  col = Application.Match(Year(fin), [COLOR="red"]Sheets("Feuil2").[/COLOR]Rows(1), 0) 'n° de colonne des jours fériés de l'année
  If Err Then MsgBox "Date non valide ou tableau des jours fériés incomplet": Exit Sub
  delai = delai - (Weekday(fin) = 1 [COLOR="Red"]Or Weekday(fin) = 7[/COLOR] Or Application.CountIf([COLOR="red"]Sheets("Feuil2").[/COLOR]Columns(col), Format(fin, "d mmmm")) = 1)
Wend
Cells(Target.Row, 5) = fin
End Sub

2ème macro :

Code:
Function FIN(debut As Date, duree As Integer, intemperies As Integer, feries As Range) As Date
Dim delai As Integer, col As Byte
debut = Int(debut)
delai = duree + intemperies
FIN = debut - 1
While FIN < debut + delai
  FIN = FIN + 1
  col = Application.Match(Year(FIN), [COLOR="Red"]Sheets("Feuil2").[/COLOR]Rows(1), 0) 'n° de colonne des jours fériés de l'année
  delai = delai - (Weekday(FIN) = 1 [COLOR="red"]Or Weekday(FIN) = 7[/COLOR] Or Application.CountIf([COLOR="red"]Sheets("Feuil2").[/COLOR]Columns(col), Format(FIN, "d mmmm")) = 1)
Wend
End Function

Avec la formule en E2 : =FIN(B2;C2;D2;Feuil2!A:IV)

A+
 

hebus30

XLDnaute Nouveau
Re : calcul de délais

une dernière question, comment intégrer le premier jour du chantier dans le calcul du délai?
actuellement, si je commence un chantier le lundi et que je mes 5 jours ouvrable de délai, il me donne le lundi suivant comme date de fin de chantier or le chantier devrait être fini pour le vendredi.
 

hebus30

XLDnaute Nouveau
Re : calcul de délais

une dernière question, comment intégrer le premier jour du chantier dans le calcul du délai?
actuellement, si je commence un chantier le lundi et que je mes 5 jours ouvrable de délai, il me donne le lundi suivant comme date de fin de chantier or le chantier devrait être fini pour le vendredi.

j'ai trouvé, je pense la solution, j'ai modifié la ligne de code suivante comme ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B2:d65536")) Is Nothing Then Exit Sub
Dim debut As Date, delai As Integer, fin As Date, col As Byte
On Error Resume Next
debut = Int(Cells(Target.Row, 2))
delai = Int(Cells(Target.Row, 3)) + Int(Cells(Target.Row, 4))
fin = debut - 1
If debut = 0 Or Target.Count > 1 Or Err Then Intersect(Target.EntireRow, Columns(5)) = "": Exit Sub
While fin < debut + delai - 1
fin = fin + 1
col = Application.Match(Year(fin), Sheets("Feuil2").Rows(1), 0) 'n° de colonne des jours fériés de l'année
If Err Then MsgBox "Date non valide ou tableau des jours fériés incomplet": Exit Sub
delai = delai - (Weekday(fin) = 1 Or Weekday(fin) = 7 Or Application.CountIf(Sheets("Feuil2").Columns(col), Format(fin, "d mmmm")) = 1)
Wend
Cells(Target.Row, 5) = fin
End Sub

je suppose que ca ne posera pas de problèmes avec le reste du code.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : calcul de délais

Re,

Non ça ne va pas, vous allez ainsi trouver des fins de chantier le week-end ou un jour férié.

C'est plus compliqué, mais je n'ai pas le temps de m'en occuper avant ce soir, patientez un peu, je vous referai les 2 fichiers.

A+
 

job75

XLDnaute Barbatruc
Re : calcul de délais

Bonsoir hebus30,

Voici les 2 fichiers modifiés comme vous le souhaitez.

Edit : la plage 'Jours fériés'!3:9 doit être au format Texte

A+
 

Pièces jointes

  • Fin de chantier Evènement(1).zip
    13.5 KB · Affichages: 79
  • Fin de chantier Fonction(1).zip
    13.4 KB · Affichages: 75
Dernière édition:

job75

XLDnaute Barbatruc
Re : calcul de délais

Re,

Je suis parti au début sur une solution VBA car les samedis n'étaient pas chômés.

S'ils sont chômés comme les dimanches, il est certain, comme le signale hoerwind (que je salue) que la solution la plus simple est d'utiliser la fonction de l'Utilitaire d'analyse SERIE.JOUR.OUVRE.

Voyez le fichier ci-joint avec en E2 la formule :

Code:
=SI(OU(B2="";C2<1);"";SERIE.JOUR.OUVRE(B2;C2+D2[COLOR="Red"]-1[/COLOR];'Jours fériés'!$2:$11))

La plage des jours fériés ne doit comporter que des dates (nombres).

A+
 

Pièces jointes

  • Fin de chantier Fonction(2).xls
    42 KB · Affichages: 137
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 421
Messages
2 088 269
Membres
103 800
dernier inscrit
mat37974