XL 2010 compter uniquement les cellules avec le format 00:00:00

chac10

XLDnaute Junior
Bonjour,

Je rencontre un problème insoluble :) en tous cas pour le moment !!
En effet, je souhaiterais compter le nombre de cellule avec le format heure et surtout avec la valeur 00:00:00
sur une plage de donnée.
Aujourd'hui , excel confonds le format heure et le format nombre 0
Donc lorsque je fais la formule qui suit nb.si(plage de donnée; "00:00:00"), il me donne le même résultat que si je faisais nb.si(plage de donnée; 0)
Je vous remercie pour votre aide.

Cordialement,
Chac10
 

Pièces jointes

  • compter selon le format et sa valeur.xlsx
    9.1 KB · Affichages: 24

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Chac,
Je ne connais aucune fonction XL qui différencie les formats. Mais peut être existe t-elle. :)
Solution : passer par une fonction perso :
VB:
Function CompterHeureNulle(Plage)
    Dim c, N%: N = 0
    For Each c In Plage
        If c = 0 And c.NumberFormat = "h:mm:ss" Then N = N + 1
    Next c
    CompterHeureNulle = N
End Function
Syntaxe : =CompterHeureNulle(D10:H10)
voir PJ.
 

Pièces jointes

  • compter selon le format et sa valeur.xlsm
    14.4 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour chac10,

Voyez le fichier .xlsm joint et cette fonction VBA :
VB:
Function S(r As Range)
For Each r In r
    If r = 0 And r.Text Like "*:*" Then S = S + 1
Next
End Function
Fonctionne avec les formats heures 00:00:00 ou 00:00 ou 0:0.

A+
 

Pièces jointes

  • compter selon le format et sa valeur(1).xlsm
    15.5 KB · Affichages: 7

chac10

XLDnaute Junior
Bonjour Chac,
Je ne connais aucune fonction XL qui différencie les formats. Mais peut être existe t-elle. :)
Solution : passer par une fonction perso :
VB:
Function CompterHeureNulle(Plage)
    Dim c, N%: N = 0
    For Each c In Plage
        If c = 0 And c.NumberFormat = "h:mm:ss" Then N = N + 1
    Next c
    CompterHeureNulle = N
End Function
Syntaxe : =CompterHeureNulle(D10:H10)
voir PJ.
Bonjour Sylvanu,

idem au top, c'est vrai que j'ai cherché un petit moment.
J'ai même tenté une approche par la couleur de la mise en forme conditionnelle.
Mais cela ne fonctionnait pas, il faudrait ajouter une colonne supplémentaire, chose que je ne peux pas faire.
Merci beaucoup encore , vous m'avez facilité la tâche car vos fonctions sont efficaces !!

Chac10
 

chac10

XLDnaute Junior
Sylvanu, Job 75,

j'ai un problème lorsque je fais la moyenne d'une série d'heure.
En effet, je souhaiterai ne pas tenir compte des heures qui sont à zéro, car les personnes sont tous simplement absente. C'est un indicateur pour moi, car il me permet d'avoir une idée du temps passée sur une tâche.
Le fait qu'une personne soit la ou non à une implication sur mon analyse.
un temps de zéro n' a pas de sens en soi, or dans la moyenne classique , ce temps nul est pris en compte ce qui par logique réduit le temps moyen. car le nombre de personne ne change pas.

Est ce qu'il existe une fonction permettant de faire cette moyenne sans prendre en compte les valeurs à zero (format heure) . D'où d'ailleurs ma demande ci dessus, je préférais faire une formule unique plutôt que d'imbriquer que celle que vous m'avez transmise avec brio d'ailleurs :)

en vous remerciant,

Chac10
 

Pièces jointes

  • moyenne sans prise en compte des valeurs nulles.xlsx
    8.7 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ou encore mieux avec une fonction perso qui tient compte du format :
VB:
Function MoyenneSiNonNulle(Plage)
    Dim c, N%, S: N = 0: S = 0
    For Each c In Plage
        If c <> 0 And c.NumberFormat = "h:mm:ss" Then
            N = N + 1
            S = S + c
        End If
    Next c
    If N > 0 Then
        MoyenneSiNonNulle = S / N
    Else
        MoyenneSiNonNulle = ""
    End If
End Function
Syntaxe : =MoyenneSiNonNulle(D10:H10)
 

Pièces jointes

  • compter selon le format et sa valeur (2).xlsm
    15.4 KB · Affichages: 3

chac10

XLDnaute Junior
Ou encore mieux avec une fonction perso qui tient compte du format :
VB:
Function MoyenneSiNonNulle(Plage)
    Dim c, N%, S: N = 0: S = 0
    For Each c In Plage
        If c <> 0 And c.NumberFormat = "h:mm:ss" Then
            N = N + 1
            S = S + c
        End If
    Next c
    If N > 0 Then
        MoyenneSiNonNulle = S / N
    Else
        MoyenneSiNonNulle = ""
    End If
End Function
Syntaxe : =MoyenneSiNonNulle(D10:H10)
Pas mal du tout merci Sylvanu !!
J'ai une dernière requête , j'ai un fichier de suivi journalier construit jour par jour de manière horizontale
En fin de semaine, je fais une synthèse , c'est pourquoi j 'ai besoin de faire des moyennes de deux temps principaux. Avec la fonction moyenne si, je constate qu'elle fonctionne par plage ce qui pose problème car elle prends donc des éléments dont je ne veux pas.
Y aurait il un moyen de contourner le problème, pour avoir la moyenne de la semaine et qu'elle ne compte que les heures <> de zéro. ( avec le fichier joint tu comprendras mieux je pense :)

En utilisant ta formule , je parviens à obtenir un résultat.
Mais il y a peut- être un moyen plus simple dont je n'ai pas la connaissance?
Chac 10
 

Pièces jointes

  • moyenne si sur une plage avec plusieurs criteres.xlsx
    11.6 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
J'ai l'impression que tout ce qu'on a fait ce matin n'a servi à rien.
Une nouvelle fonction :
VB:
Function MoyParSemaine(J1 As Range, J2 As Range, Optional J3 = 0, Optional J4 = 0, Optional J5 = 0, Optional J6 = 0, Optional J7 = 0)
    Dim c, N%, S: N = 0: S = 0
    On Error Resume Next
    If J1 <> 0 Then N = N + 1: S = S + J1
    If J2 <> 0 Then N = N + 1: S = S + J2
    If J3 <> 0 Then N = N + 1: S = S + J3
    If J4 <> 0 Then N = N + 1: S = S + J4
    If J5 <> 0 Then N = N + 1: S = S + J5
    If J6 <> 0 Then N = N + 1: S = S + J6
    If J7 <> 0 Then N = N + 1: S = S + J7
    If N > 0 Then
        MoyParSemaine = S / N
    Else
        MoyParSemaine = ""
    End If
End Function
Syntaxe : =MoyParSemaine(J7;Y7;AL7) avec nombre de paramètres compris entre 2 et 7, pour faire une semaine.
 

Pièces jointes

  • moyenne si sur une plage avec plusieurs criteres 3.xlsm
    17.4 KB · Affichages: 5

chac10

XLDnaute Junior
Sylvanu ,
Tout ce que l'on a fait a servi !!!
La moyenne si est déjà en place pour exemple.
La première me sera utile peut être dès à présent ou un jour ou l'autre , elle est top et la je vais découvrir celle que tu as composé. Je choisirai entre les deux.

Et crois moi, ca m'instruit beaucoup !!!

Je te remercie énormément pour ton soutien.
Chac10
 

chac10

XLDnaute Junior
Re,
J'ai l'impression que tout ce qu'on a fait ce matin n'a servi à rien.
Une nouvelle fonction :
VB:
Function MoyParSemaine(J1 As Range, J2 As Range, Optional J3 = 0, Optional J4 = 0, Optional J5 = 0, Optional J6 = 0, Optional J7 = 0)
    Dim c, N%, S: N = 0: S = 0
    On Error Resume Next
    If J1 <> 0 Then N = N + 1: S = S + J1
    If J2 <> 0 Then N = N + 1: S = S + J2
    If J3 <> 0 Then N = N + 1: S = S + J3
    If J4 <> 0 Then N = N + 1: S = S + J4
    If J5 <> 0 Then N = N + 1: S = S + J5
    If J6 <> 0 Then N = N + 1: S = S + J6
    If J7 <> 0 Then N = N + 1: S = S + J7
    If N > 0 Then
        MoyParSemaine = S / N
    Else
        MoyParSemaine = ""
    End If
End Function
Syntaxe : =MoyParSemaine(J7;Y7;AL7) avec nombre de paramètres compris entre 2 et 7, pour faire une semaine.
Bravo, c'est magnifique, tu m'as simplifié la tâche grave.
Merci beaucoup, ta fonction marche parfaitement.
Il y a possibilité sur le site de parler en privé ?
 

job75

XLDnaute Barbatruc
Pour la dernière requête on peut utiliser la fonction MOYENNE.SI.ENS, fichier joint :

- en AQ7 =MOYENNE.SI.ENS(D7:AO7;D7:AO7;">0";D5:AO5;"Temps 1")

- en AR7 =MOYENNE.SI.ENS(D7:AO7;D7:AO7;">0";D5:AO5;"Temps 2")
 

Pièces jointes

  • moyenne si sur une plage avec plusieurs criteres(1).xlsx
    11.9 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 216
Membres
103 158
dernier inscrit
laufin