Calcul différence d'heure entre 2 cellules non contigues

Signaler
Messages postés
9
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
30 mars 2010
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour,

Je vais tenté de vous expliquer simplement mon problème (ayez de l'indulgeance lol)

J'ai du code VBA qui me permet de créer un fichier contenant une liste de défauts techniques apparus au cours de la journée(voir exemple dans fichier joint)...il contient pour chaque défaut apparu :

date - heure - type - ligne - intitulé - adresse - n°

Chaque item correspondant au titre d'une colonne

Ce qui fait (entre parenthèse le n° de ligne excel)

date - heure - type - ligne - intitulé - adresse - n°
01/03/10 - 00:45 - + - SAV - Défaut air - DB10.DBX3.0 - 10 (1)
01/03/10 - 11:46 - + - SAR - Défaut cpl - DB10.DBX3.1 - 14 (2)
01/03/10 - 11:45 - - - SAR - Défaut cpl - DB10.DBX3.1 - 14 (3)
01/03/10 - 13:48 - + - SAV - Défaut aze - DB10.DBX3.7 - 19 (4)
01/03/10 - 15:20 - + - SAV - Défaut cpl - DB10.DBX3.3 - 17 (5)
01/03/10 - 15:36 - - - SAV - Défaut cpl - DB10.DBX3.0 - 10 (6)
01/03/10 - 23:59 - - - SAV - Défaut aze - DB10.DBX3.7 - 19 (7)

+ correspondant à l'apparition du défaut
- correspondant à la disparition du défaut

J'aimerais calculer le temps total du défaut air (B6-B1), cpl(B3-B2+B6-B5), aze(B7-B4) sachant que :
- les apparitions et disparitions des défauts ne se suivrent pas,
- un défauts peut se reproduire dans la journée
- un défaut peut etre apparu au jour J-1 et disparaitre au jour J (dans ce cas on ne peut pas mesurer le temps)
- un défaut peut apparaitre au jour J et disparaitre au jour J-1 (dans ce cas on ne peut pas mesurer le temps)
- le nombre de défaut varie d'un jour à l'autre (et donc le nombre de lignes excel)

Pourriez vous me donner une méthode pour calculer les différences d'heure entre chaque défaut (je vous promet que j'ai tout essayer sans y arriver avec les filtres auto et tout mais j'ai peut etre pas connaissance des outils necessaires)

Merci

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Salut
Ca fait plaisir de voir des questions correctement posées, merci.

Hélas, je ne pense pas que tu puisses faire ça dans la feuille (dans les cellules).
Il va falloir que tu aies recours à la fonction du VB nommée DateDiff qui peut te fournir, par exemple, le nombre de minutes entre deux dates (Voir aussi DateAdd).

Pour la globalité de ton problème, ce ne sera pas simple :
Calcul de temps pour un seul Item :
- Rechercher une disparition du bas vers le haut
- Rechercher parmi les précédents item la première apparition portant le même intitulé
- Une fois que tu auras ces deux items en ligne de mire, tu pourras calculer le nombre de minutes entre eux --> Stocker cette valeur dans une nouvelle colonne, à droite des autres, de la ligne disparition.
- Recommencer cette phase pour la disparition de l'item suivant (*) pour lequel on n'a pas encore calculé de durée
(*) comme on fait des recherches du bas vers le haut, 'suivant' veut en fait dire 'précédent'

Sommation :
Une fois ce calcul fait pour chaque défaut, il faut recommencer la même approche :
Rechercher (du bas vers le haut) chaque disparition d'un défaut nommé (une recherche par intitulé de défaut) et additionner les minutes précédemment calculées.

Tu as du boulot !

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Pour info :
Syntaxe de base d'une énumération de cellules dans un Range :
    Dim maCellule As Object
    For Each maCellule In Range("A1:A33")
        Debug.Print maCellule.Value                ' Contenu de la cellule pointée
        Debug.Print maCellule.Offset(0, 2).Value   ' Contenu de la cellule 2 colonnes à droite
    Next

+
Exit For
si tu as besoin de ressortir de ta boucle avant la fin