XL 2016 Addition d'heures sur plusieurs onglet en mode VBA

bigeart

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous,

Je viens vous solliciter pour un problème de calcul. J'avais commencé une approche Excel, mais elle
s'avère compliquée. j'ai été aidé sur le forum par MAPOMME, mais il a abandonné. Je le remercie encore pour son aide.

Je m'oriente sur du VBA et je ne suis pas très à l'aise.
J'ai commencé à suivre des formations sur vidéo qui m'ont permises d'avancer sur les couleurs.
je l'ai mis en pratique dans mon fichier en PJ.

Toutefois, pour la suite du calcul, je suis un peu perdu. je dois encore me former.
J'ai un fichier Excel avec des onglets qui représentent les semaines du mois d'avril et un onglet synthèse.
Mes cellules horaires sont au formats TEXTE et les couleurs en MFC.
J'en ai besoin pour mettre des couleurs sur des cellules qui sont sous conditions.
Exemple: Onglet S14 colonne AC et AF. Verte si heure comprise entre a 00:16 et 00:30 et orange si heure sup à 00:31
Cela me permet également de compter le nombre de cellules vertes et oranges par jour.

Additionner des cellules et le contenant des cellule sur une ligne en mode VBA ne pose pas de problème, enfin pas trop.
Je n'arrive pas à additionner les heures des cellules vertes et oranges par onglet en mode VBA.
Je souhaiterais que la cellule O26 de l'onglet synthèse me donne la somme en minutes des cellules vertes
de la ligne 26 des onglets S14 à S18, en commençant par le 01/04/20. Idem pour les autres lignes.
Exemple à la mano: Onglet synthèse cellule O26 et P26.

A priori ça à l'air un peu technique, merci d'avance pour votre aide.

Bigeart
 

Pièces jointes

  • Analyse temps_modif.xlsm
    352.3 KB · Affichages: 17

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Il y a une astuce pour obtenir des durées négatives.
Ce qui est important, c'est que ces durées soient des nombres et qu'ensuite on puisse faire des calculs dessus.
Faites un essai avec la PJ.
 

Pièces jointes

  • Gestion durée négatives.xlsm
    35.7 KB · Affichages: 5

bigeart

XLDnaute Occasionnel
Supporter XLD
Re,

Je viens de regarder, je n'avais pas mis en 1904. Bien vue.

J'ai modifier la formule pour ne plus être en texte. (En jaune)
Mais lorsque je descend la formule jusqu'à la ligne 29, le cellule AH29 disparait
 

Pièces jointes

  • Analyse temps_modif.xlsm
    352.5 KB · Affichages: 8

sylvanu

XLDnaute Barbatruc
Supporter XLD
Vous connaissez la loi de Murphy ?
En fait en faisant Droite(Heure;8) ça marche pour ceratins temps si le nombre décimal contient moins de 8 chiffres. Sinon c'est évidemment faux. Et évidemment 00:27:00 ça fait 0.01875 donc ça marche. en fait ça marche par pas de 5 minutes :

5.jpg
 

bigeart

XLDnaute Occasionnel
Supporter XLD
Oui, je connais. Je te joins un fichier calcul temps. tu verras que l'on peu faire de minute en minute.
En ce qui concerne mon fichier initial, je suis reparti de zéro, plus simple.
J'ai modifier les formules. exemple colonne AC, AF, AG, AH.
Mais mon problème de fond reste le même, additionner les cellules de la colonne AC comprise entre 16 et 30 minutes et les cellules de la colonne AF égal ou supérieur à 31 minutes
 

Pièces jointes

  • Cacul temps horaires V3.xls
    233.5 KB · Affichages: 4
  • Analyse temps_test.xlsm
    350.2 KB · Affichages: 4

job75

XLDnaute Barbatruc
Bonsoir bigeart, sylvanu,

Pour les temps le fait que ce soient des textes ne pose aucun problème en VBA, voyez ce fichier.

Avec cette macro les colonne O et P sont mises à jour quand on active la feuille "Synthèse Avril" :
VB:
Private Sub Worksheet_Activate()
Dim annee%, mois%, semaine, coul1%, coul2%, derlig&, tablo(), w As Worksheet, c As Range, c1 As Range, i&
annee = 2020 'à adapter
mois = 4 'avril,à adapter
semaine = Array("S14", "S15", "S16", "S17", "S18") 'à adapter
coul1 = 15 'gris 25%
coul2 = 40 'brun
If FilterMode Then ShowAllData 'si la feuille est filtrée
derlig = Range("A" & Rows.Count).End(xlUp).Row
ReDim tablo(1 To derlig - 7, 1 To 2) 'matrice, plus rapide
For Each w In Sheets(semaine)
    For Each c In w.Rows("8:" & derlig).SpecialCells(xlCellTypeFormulas)
        Set c1 = w.Cells(6, c.Column).MergeArea(1) 'date en ligne 6
        If Year(c1) = annee And Month(c1) = mois Then
            If c.DisplayFormat.Interior.ColorIndex = coul1 Then i = c.Row - 7: tablo(i, 1) = tablo(i, 1) + TimeValue(Mid(c, 3))
            If c.DisplayFormat.Interior.ColorIndex = coul2 Then i = c.Row - 7: tablo(i, 2) = tablo(i, 2) + TimeValue(Mid(c, 3))
        End If
    Next c
Next w
'---restitution---
[O8].Resize(UBound(tablo), 2) = tablo
End Sub
A+
 

Pièces jointes

  • Analyse temps_modif(1).xlsm
    362.4 KB · Affichages: 10

Discussions similaires

Réponses
13
Affichages
632

Statistiques des forums

Discussions
315 097
Messages
2 116 185
Membres
112 679
dernier inscrit
Yupanki