Bonjour.
Alors que je pensais mon fichier terminé, j'ai trouvé une erreur dans le code VB pour les heures de nuit. En fait, totalement par hasard.
Erreur, pas vraiment... On pourrait dire que le code "coince" dans un cas de figure. En partant sur l'idée où les heures de nuit doivent s'afficher dans la colonne Q voici le code actuel (extrait du fichier joint, je vous ai mis le nécessaire, mot de passe pour déverrouiller si nécessaire mais normalement vous n'en aurez pas besoin étant donné que ce n'est que du VB ; IMPOSSIBLE) :
-------------------------------
Faille trouvée : Les heures de nuit sont spécifiées de 21h à 6h du mat dans la feuille paramètres. Quand une vacation passe sur cette plage horraire, ça marche. Par exemple : 15h à 09h du mat. Il trouve bien les 9h de nuit (21 à 6)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 Sub HeureNuitProg() hd = Range("nuithdeb") hf = Range("nuithfin") Dim reponse ActiveSheet.Range("Q4:Q10,Q12:Q18,Q20:Q26,Q28:Q34,Q36:Q42").ClearContents For ligne = 0 To 39 'pour les ligne de 1 à 40 tothnuit = 0: vacation = 0 If ActiveSheet.Range("A4").Offset(ligne, 0) <> "" Then 'si c'est une date et non une ligne vide For vacation = 0 To 8 Step 4 'de 0 à 8 avec saut de 4 pour le decalage de 4 cols entre 2 vacations deb = ActiveSheet.Range("c4").Offset(ligne, vacation) fin = ActiveSheet.Range("d4").Offset(ligne, vacation) If (deb <> "" And fin <> "") Then 's'il y a quelque chose dans deb et dans fin If (fin > deb) And (fin > hf And fin <= hd) And (deb >= hf And deb < hd) Then 'Si la periode est autre que la periode nuit reponse = 0 Else If fin > deb Then 'que avant ou apres minuit mais pas à cheval If fin > hd Then 'que avant minuit If deb >= hd Then reponse = fin - deb Else reponse = fin - hd Else 'que apres minuit If fin <= hf Then reponse = fin - deb Else reponse = hf - deb End If Else 'à cheval sur minuit mais pas que avant ou que apres If deb >= hd Then 'à cheval sur minuit et sup à plage deb If fin <= hf Then reponse = 1 - deb + fin Else reponse = 1 - deb + hf Else 'à cheval sur minuit et inf à plage deb If fin <= hf Then reponse = 1 - hd + fin Else reponse = 1 - hd + hf End If End If End If tothnuit = tothnuit + reponse reponse = 0 End If Next vacation ActiveSheet.Range("q4").Offset(ligne, 0).Formula = tothnuit End If Next ligne End Sub
Mais quand une vacation commence à partir de minuit, ça coince. Déjà, on ne peut pas marquer 0:00... Car ça disparait. On est obligé de marquer 0:01 ... et donc on doit rajouter une minute à l'heure de Fin. Ainsi, si on prévoit une fin à 7h, il faut marquer 7:01... Pas top. Mais là où ça coince essentiellement c'est quand on a besoin d'entrer des vacations de 24h ce qui est courant pour les gars qui sont en astreinte.
==> Comme on ne peut pas marquer 00:00 à 24:00, on marque donc 0:01 à 24:01 ... Hors de 0 à 6h du mat il y a bien 6h de nuit et il les trouve. Mais de 21h à 24, il y en a 3 aussi et là il ne les trouve pas. Donc de 0h à 24h il devrait indiquer 9h de nuit et pas 3 comme actuellement.
Sauriez-vous ce qu'il faut ajouter pour remédier à ça ? D'avance merci.
Partager