Une petite abération de calcul

bonjour

je suis en présence d'un casse tete pas evident à resoudre , dans une cellule de ma feuille de calcul j'ai une somme de durées collectées à partir de feuilles d'un autre classeur , jusque là pas de soucis , ensuite je dois effectuer un calcul simple de moyenne en prenant la cellule recevant le total des durées et en divisant celle ci par un effectif coresspondant , je precise que ma cellule recevant le total des durées et celle devant contenir la moyenne sont les memes ( mon code additionne le total des durées dans cette meme cellule et acheve le calcul par une moyenne qui remplace la valeur initiale ) . ma cellule recevant une valeur horaire est au format

hh:mm:ss .

en effectant le calcul de cette moyenne par mon bout de code j'ai une valeur fausse de temps moyen , par contre en "réecrivant manuellement le total des heures dans cette meme cellule en conservant le meme format hh:mm:ss et en effectuant ensuite un calcul

de moyenne le resultat est correct !! c'est à n'y rien comprendre

voici pour exemple , mon code calcul en cellule O148 un effectif de 7 , en cellule P148 un temps total de 12:59:36 et lorsqu'il fait lui meme le calcul il remplace 12:59:36 par 12:08:31 qui est censé etre un calcul de moyenne en divisant le temps total par 7 et qui est bien sur faux , par contre si j'ecris manuellement 12:59:36 le calcul devient bon et donne 01:51:22 qui est correct

Auriez vous une idée sur je ne sais pas comment on peut appler ca ... peut etre un coté rebelle du vba

En vous remerciant

Bonjour,

ayant refait ton exemple chez moi, je ne constate pas d'erreur. peux-tu joindre ton fichier dans lequel on peut reproduire l'erreur ?

Effectivement, pouvons-nous avoir le code voire le fichier ?

Oui , je le joins en vous remerciant de le consulter , merci par avance pour toute idée qui pourrait m'aider à progresser

Salut le Forum

Cellule C13 contient 1900-01-01 00:14:21 soit 24:14:21

Cellule C16 contient 1900-01-01 03:14:21 soit 27:14:21

Cellule C21 contient 1900-01-02 23:43:03 soit 71:43:03

La moyenne est bonne 23:54;21 ( 71:43:03 / 3 )

Mytå

Merci pour cette réponse mais je ne comprend pas ce que vous voulez dire ...

Re le Forum

Ta cellule C13 affiche 00:14 mais contient 1900-01-01 00:14:21 soit une valeur de 24:14:21

Donc un jour (24 hres) + 00:14:21 ---> 24:14:21

au départ mes champs de réponses (total, effectif,moyenne) sont vides et en cliquant sur le gros bouton gris du fichier joins j'ai les résultats suivant total : 23:43 effectif : 3 et moyenne :23:54 ( c'est cette moyenne qui est pas correcte)


pourtant toutes mes cellules sont mises au format 13:30 comment puis je remedier au fait que C13 affiche 00:14 mais contient 1900-01-01 00:14:21 ? merci

Re le Forum

Change le format de tes cellules en [hh]:mm:ss tu vas comprendre

oui je viens de proceder comme vous me l'avez indiqué j'obtiens une moyenne qui a l'air de coller avec les "nouvelles" valeurs mais

je perd le format 13:30 et la lecture des données n'est plus la meme

Bonjour , je me permet de relancer mon post si toutefois une personne souhaite s'y pencher , pour eviter d'avoir à me soucier du format des cellules recevant les heures j'ai eu l'idée de convertir chaque cellule en nombre decimal et d'en faire le total à la fin dans la cellule moyenne au format nombre en ecrivant la modif suivantes :

Dim cell As Range
For Each cell In Range("c7:c18")

If cell.Interior.ColorIndex = 3 Then
Range("c21").Value = (CDbl(Range("c21").Value - Int(Range("c21").Value)) * 24) + (CDbl(cell.Value - Int(cell.Value)) * 24)
Range("c23").Value = Range("c23").Value + 1  '<---- nombre des cellules reperées en rouge
End If

Next
'calcul de la moyenne des durées :
Range("c25") = Range("c21") / Range("c23")

(voir mon fichier deja joint)

pensant avoir une issue , je me retrouve avec un cumul en nombre decimal faux pour la moyenne alors que j'ai testé toute mes cellules à sommer avec les'instructions :

MsgBox CDbl(Range("c21") - Int(Range("c21"))) * 24  'donne 0 lorsqu'elle est vide 
 MsgBox CDbl(Range("c9") - Int(Range("c9"))) * 24  'donne 3,64
    MsgBox CDbl(Range("c13") - Int(Range("c13"))) * 24  'donne 8,48 
      MsgBox CDbl(Range("c16") - Int(Range("c16"))) * 24  ' donne  12,13 

la case moyenne recois un total de 33,67 alors que 3,64 + 8,48 + 12,13 = 24,27

Si toutefois vous pouviez juste m'expliquer cette difference , ce serait vraiment sympa , vous remerciant infiniment par avance

Bonjour,

le fichier a beau être déjà joint, je ne retrouve pas les cases adhoc !

le code que tu proposes est incohérent :

  • d'abord as-tu bien mis Range("c21").Value à 0 avant de commencer
  • si tu multiplies par 24, divise aussi le résultat par 24 si le format de la cellule est hh:mm

en effet ....toutes mes excuses , je joins le bon fichier dans le présent post .

Merci à vous

correction ...

je ne vois pas pourquoi appliquer la multiplication par 24 sur la cellule C21 qui est le résultat déjà multiplié par 24 !

au passage, initialise à 0 les 2 zones

Sub Bouton1_QuandClic()
Dim cell As Range
For Each cell In Range("c7:c18")

Range("c21").Value = 0
Range("c23").Value = 0

If cell.Interior.ColorIndex = 3 Then
Range("c21").Value = CDbl(Range("c21").Value) + (CDbl(cell.Value - Int(cell.Value)) * 24)
Range("c23").Value = Range("c23").Value + 1  '<---- nombre des cellules reperées en rouge
End If

Next
'calcul de la moyenne des durées :
Range("c25") = Range("c21") / Range("c23")

End Sub

Un grand merci Steelson !! en effet j'avais pas detecté cela , je peux cloturer mon post ...un grand merci

Rechercher des sujets similaires à "petite aberation calcul"