Calcul de plage horaire excluant dédoublement

Flicky

XLDnaute Nouveau
Bonjour,
Je vous lis depuis un moment afin de trouver des solutions au petites difficultés que je rencontre lors de l'utilisation d'excel. Le moins que l'on puisse dire c'est que cette communauté d'entraide est extra!

Après vous avoir lu, je ne peux me qualifier que de novice, mais je continue d'apprendre :)

J'ai une difficulté pour laquelle je ne trouve pas de solution. Je vais tenter d'être clair.

J'ai un fichier dans lequel je récolte les plages horaires exploitées par un établissement. à titre d'exemple, un établissement peut être accessible pour vente chocolat le lundi de 7h00 à 11h00, fermé pour le diner, pour être de nouveau accessible de 15h00 à 18h00.
Ca se complique du fait qu'un établissement peut offrir deux service différents.
on ajoute donc un acces le lundi pour caramel de 8h00 à 10h00 et de 13h00 à 14h00.
Ce que je dois arriver à faire c'est d'établir le nombre d'heure le lundi pendant lesquelles l'établissement est accessible (soit 8 heures en enlevant le dédoublement) et non le nombre total d'heure d'acces qui serait 10heures).
Je n'arrive pas à traduire ce calcul en excel avec un formule. Quelqu'un le peux ??
je joint le fichier, voir le petit segment mis en fond rouge.
Gros merci.
 

sousou

XLDnaute Barbatruc
Re : Calcul de plage horaire excluant dédoublement

Bonjour Flicky

OUF!!!!!

J'ai eu du mal, la question semble simple, mais l'exercice est autrement délicat
me semble-t'il.
Voir le fichier joint

Fonction: cal( zone des plages de dédut; zone des plages de fin)
Je suis curieux de voir si quelqu'un a une autre idée!!
Principe: dans un tableau de 24, je met 1 si une des heures est comprises entre les débuts et les fins. je compte ensuite le nombre de 1.

Merci de vos remarques
 

Pièces jointes

  • TEST.xls
    34.5 KB · Affichages: 67
  • TEST.xls
    34.5 KB · Affichages: 65
  • TEST.xls
    34.5 KB · Affichages: 63

Flicky

XLDnaute Nouveau
Re : Calcul de plage horaire excluant dédoublement

Sousou, la solution proposée convient presque, il ne semble manquer qu'un petit quelque chose, mais tu nous a mis sur une piste fort intéressante que l'on explore, sans succès à date. Ce qui semblait facile au départ apparait comme un beau petit défi. gros merci.
Ce qui manque :
Lorsqu'un établissement inscrit une heure suivi de minutes (ex. : 8h30 à 13h00), le calcul ne tient pas compte de ces minutes.
Les établissements ont la possibilité d'inscrire soit l'heure juste (8h00), soit des variantes aux 15 minutes (ex. : 8h15; 8h30 ou 8h45). Cela fait une différence significative au bout d'une semaine, de plus d'autres calculs de performance utilisent le total des heures hebdomadaires, ce qui fait qu'on doit absolument sommer toute les heures et minutes.

Je vais joindre une version actualisé du fichier au cas ou quelqu'un serait tenté de relever le petit défi.

Claude38 : merci de la proposition, pour diverses raisons ont explore l'avenue proposé par sousou.
 

Pièces jointes

  • V4.2 Proposition de formulaire.zip
    41.4 KB · Affichages: 26
Dernière édition:

Flicky

XLDnaute Nouveau
Re : Calcul de plage horaire excluant dédoublement

Afin de partager, je mets ici-bas la solution à laquelle nous sommes arrivé, merci de votre aide précieuse :


Option Explicit
'


Function CalculTemps(cel_Dep As Range, cel_Fin As Range) As Variant

Dim I As Range, nbl As Integer, ind As Integer, k1 As Integer
Dim Boucle As Integer, x As Single, y As Single
Dim T_Minute As String, Temps As Single

Dim Table() As Single, TableH() As Single
Dim TableR(96, 1) As Single

Application.Volatile
Erase TableR: Erase TableH: Erase Table
Temps = 0
For Boucle = 0 To 95
TableR(Boucle, 0) = Temps
Temps = Temps + 0.25
Next Boucle

ReDim Table(cel_Dep.Rows.Count - 1, 2)

For Each I In cel_Dep
Table(I.Row - cel_Dep.Row, 0) = Hour(I) + (Minute(I.Value) / 60)
Next

For Each I In cel_Fin
Table(I.Row - cel_Fin.Row, 1) = Hour(I.Value) + (Minute(I.Value) / 60)
Next

nbl = 0: ind = 0

For Boucle = 0 To UBound(Table, 1) - 1
y = 0: x = 0
While (TableR(x, 0) < Table(Boucle, 0))
x = x + 1
Wend

While (TableR(x, 0) < Table(Boucle, 1))
TableR(x, 1) = 1
x = x + 1
Wend
Next

For Boucle = 0 To UBound(TableR)
ind = (ind + TableR(Boucle, 1))
Next
Temps = (ind / 4)
Select Case (Temps - (Int(Temps)))
Case 0: T_Minute = "00"
Case 0.25: T_Minute = "15"
Case 0.5: T_Minute = "30"
Case 0.75: T_Minute = "45"
End Select

CalculTemps = Int(Temps) & " h " & T_Minute

End Function
'
 

Discussions similaires

Statistiques des forums

Discussions
312 204
Messages
2 086 198
Membres
103 155
dernier inscrit
lombrik