Problème calcule d'intervalles avec des interruptions irrégulières

Bonjour,

Je travaille sur un fichier qui doit me calculer des intervalles de temps.
En gros, dans mon fichier je note sur une ligne à quelle heure des prestations sont effectuées et dans un tableau à côté je soustrais simplement la différence de temps entre les prestations.

Le problème, c’est que sur certaines de mes lignes, je dois « soustraire » un laps de temps qui varie selon les cas.

Vous avez un exemple dans le fichier joint. La ligne bleue représente le temps qu’on doit prendre en compte et les croix rouge à quelle heure sont effectuées les prestations.

Exemple problème intervalle.xlsx (25,4 Ko)

Le problème provient dans mon exemple entre la prestation 2 et 3. Il y a une heure que je devrais soustraire. Mais mon problème est qu’il y a pas dans chaque ligne du temps à soustraire et il n’est pas toujours au même moment. Il pourrait être entre la prestation 3 et 4 par exemple ou n’importe.

J’ai besoin d’une formule qui me calcule cela automatiquement car le tableau contient beaucoup de ligne et de données à ajouter manuellement et s’il faut encore changer de formule à chaque fois et avoir milles cases ça devient vraiment compliqué :frowning:

J’ai pensé mettre par exemple en couleur la prestation qui est concernée par l’interruption et ensuite avoir une formule du genre SI la case est en couleur, alors on soustrait l’heure d’interruption, sinon on calcule normalement. J’ai essayer plusieurs choses avec des VBA par exemple mais je ne trouve pas de solution …

Pourriez-vous m’aider svp ? :slight_smile: :slight_smile: :slight_smile:

P.s le tableau joint est juste un exemple simplifié car mon fichier d’origine est beaucoup plus complexe et contient beaucoup de données.

Bonjour,
Comment fonctionne la ligne bleu? Y a-t-il une seule ligne de temps par jour, ou par prestation?
tu peux utiliser les formats conditionnels avec 0 ou 1 pour colorer tes cellules, puis faire une somme de ces cellules.
Pour faire les sommes, tu peux utiliser la formule suivante:
=SOMME(DECALER(INDIRECT(ADRESSE(3;EQUIV(B7;$A$4:$I$4;0)+1));0;0;;EQUIV(C7;$A$4:$I$4;0)-EQUIV(B7;$A$4:$I$4;0)))
Est-ce que cela peut répondre à ton problème?

Bonjour,
Merci pour ta réponse, mais je ne suis pas sûre de comprendre ta formule … Désolé mais je suis loin d’être experte en Excel et j’apprend un peu tout en autodidacte. Peux-tu m’expliquer plus en détail stp ?

En fait, la ligne bleu n’est pas dans Excel mais dans un autre programme où on ne peut pas prendre de données. La ligne représente le temps de circulation d’un train sur une journée dans une tranche de 24h. Il y a plusieurs tableaux avec plusieurs jours, donc plusieurs lignes et aucune n’est pareille. Ensuite, sur ces lignes, il y a diverses prestations à diverses heures. Parfois, le train arrête de circuler pour des raisons de maintenance et je dois prendre en compte uniquement le temps de circulation (la ligne bleu donc). Sauf que cet arrêt de circulation n’est pas toujours à la même heure ou il n’y en a pas toujours. Du coup, je ne sais pas comment soustraire ce temps d’arrêt quand il y en a…

J’espère que mon explication est claire et que tu peux me donner plus de détail sur ta formule et je te remercie pour ton aide ! :slight_smile:

Bonjour,
Je pars du principe que ta ligne bleu représente 1 si elle est bleu, si non, on considère 0.
Dans ma formule, je regarde où sont situé les prestations (sur la ligne 4 dans ton exemple), puis je fais la somme de la ligne bleu (ligne 3 dans l’exemple).

EQUIV(B7;$A$4:$I$4;0)+1 => récupère la position de B7 (prestation 2) sur la ligne 4, auquel je rajoute 1 pour être sur l’intervalle suivant.
EQUIV(C7;$A$4:$I$4;0) => récupère la position de C7 (prestation 3) sur la ligne 4,
EQUIV(C7;$A$4:$I$4;0)-EQUIV(B7;$A$4:$I$4;0) => donne combien de cellule il y a dans cet intervalle
ADRESSE(3;EQUIV(B7;$A$4:$I$4;0)+1) => renvois l’adresse (au format texte) du début de la plage : $d$3
INDIRECT(ADRESSE(3;EQUIV(B7;$A$4:$I$4;0)+1)) => la formule indirect permet de transformer l’adresse de la cellule de texte en référence.
DECALER(INDIRECT(ADRESSE(3;EQUIV(B7;$A$4:$I$4;0)+1));0;0;;EQUIV(C7;$A$4:$I$4;0)-EQUIV(B7;$A$4:$I$4;0)) => nous donne DECALER($D$3;0;0;7-3) => permet d’obtenir une plage en fonction de la cellule de départ ($D$3) et le nombre de cellule dans l’intervalle (7-3=4)
ce qui nous donne : SOMME($D$3:$G$3) (la ligne 3 étant ta ligne bleu, avec des 1 les train roule, et 0 quand ils sont en maintenance).
Il est important d’avoir les mêmes noms dans ta ligne 4 et 7 (le nom de tes prestations)
Avec ça, tu peux l’adapter et la dupliquer.
J’espère que c’est plus claire pour toi…

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.