Microsoft 365 Somme suivant heures

nico3869

XLDnaute Nouveau
Supporter XLD
Bonjour à tous,
Une fois encore je suis face un mur!
Je souhaiterai obtenir l'addition de 8 colonnes suivant des heures variables.
Plusieurs difficultés :
- Extraire les horaires si un même horaire identique dans les 8 colonnes
- Ensuite, avoir la somme des 8 valeurs à l'horaire identique...
J'espère que mes explications seront assez claires.
Merci d'avance pour votre aide
 

Pièces jointes

  • Tableau sommes suivant horaires.xlsx
    58.9 KB · Affichages: 16

piga25

XLDnaute Barbatruc
Bonjour,

Peut être comme cela :
1- trouver la valeur temps maxi sur la premiere ligne du tableau (cellule T9)
2- incrémenter d'une seconde cette valeur (cellule T10 et suivantes)
3- si nb valeur temps est égale à 8 alors on additionne les valeurs associées (cellule U9)

VB:
=SI(NB.SI(C:C;T9)+NB.SI(E:E;T9)+NB.SI(G:G;T9)+NB.SI(I:I;T9)+NB.SI(K:K;T9)+NB.SI(M:M;T9)+NB.SI(O:O;T9)+NB.SI(Q:Q;T9)=8;INDEX(C:D;EQUIV(T9;C:C;1);2)+INDEX(E:F;EQUIV(T9;E:E;1);2)+INDEX(G:H;EQUIV(T9;G:G;1);2)+INDEX(I:J;EQUIV(T9;I:I;1);2)+INDEX(K:L;EQUIV(T9;K:K;1);2)+INDEX(M:N;EQUIV(T9;M:M;1);2)+INDEX(O:P;EQUIV(T9;O:O;1);2)+INDEX(Q:R;EQUIV(T9;Q:Q;1);2);"")

Voir fichier joint

Une solution VBA devrait mieux fonctionner
 

Pièces jointes

  • Tableau sommes suivant horaires.xlsx
    80.6 KB · Affichages: 4

piga25

XLDnaute Barbatruc
Re
sans colonne supplémentaire à mettre en S9 puis à recopier vers le bas.
VB:
=SI(NB.SI(C:C;Q9)+NB.SI(E:E;Q9)+NB.SI(G:G;Q9)+NB.SI(I:I;Q9)+NB.SI(K:K;Q9)+NB.SI(M:M;Q9)+NB.SI(O:O;Q9)+NB.SI(Q:Q;Q9)=8;INDEX(C:D;EQUIV(Q9;C:C;1);2)+INDEX(E:F;EQUIV(Q9;E:E;1);2)+INDEX(G:H;EQUIV(Q9;G:G;1);2)+INDEX(I:J;EQUIV(Q9;I:I;1);2)+INDEX(K:L;EQUIV(Q9;K:K;1);2)+INDEX(M:N;EQUIV(Q9;M:M;1);2)+INDEX(O:P;EQUIV(Q9;O:O;1);2)+INDEX(Q:R;EQUIV(Q9;Q:Q;1);2);"")

Edit:
Formule un peu plus courte :
VB:
=SI(NB.SI($C$9:$R$512;Q9)=8;INDEX(C:D;EQUIV(Q9;C:C;1);2)+INDEX(E:F;EQUIV(Q9;E:E;1);2)+INDEX(G:H;EQUIV(Q9;G:G;1);2)+INDEX(I:J;EQUIV(Q9;I:I;1);2)+INDEX(K:L;EQUIV(Q9;K:K;1);2)+INDEX(M:N;EQUIV(Q9;M:M;1);2)+INDEX(O:P;EQUIV(Q9;O:O;1);2)+INDEX(Q:R;EQUIV(Q9;Q:Q;1);2);"")
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Bonsoir,
Une solution Power Query
Sylvanu, je ne trouve pas tout à fait les mêmes résultats (pour ma part, 268 lignes répondant au total de 8 occurrences, et quelques résultats finaux non équivalents - ex, 08:36:43, je trouve 489)
Bonne soirée
 

Pièces jointes

  • PQ_Somme selon horaire.xlsx
    74.6 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
Je regarde. :rolleyes:
Re,
J'ai compris. Dans les horaires les "secondes" ne sont jamais identiques.
Elles peuvent avoir plusieurs valeurs comme :
1.15740740741499E-05​
1.15740740740389E-05​
1.15740740740944E-05​
Donc les recherches d'horaires ne collent pas toujours.

Par contre je ne vois pas comme PowerQuerry peut s'en sortir.
Il doit vérifier par rapport aux chaines de caractères et non aux valeurs décimales.
Snif. 😥
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Je regarde. :rolleyes:
Re,
J'ai compris. Dans les horaires les "secondes" ne sont jamais identiques.
Elles peuvent avoir plusieurs valeurs comme :
1.15740740741499E-05​
1.15740740740389E-05​
1.15740740740944E-05​
Donc les recherches d'horaires ne collent pas toujours.

Par contre je ne vois pas comme PowerQuerry peut s'en sortir.
Il doit vérifier par rapport aux chaines de caractères et non aux valeurs décimales.
Snif. 😥
Bonjour,
Non, non, PQ traite bien en décimal :
Voici ce qu'il charge, à la première étape :
1709466605726.png

Et à la transformation en "Heure" :
(étape que j'effectue en toute fin de requête)
1709466705259.png

Peut-être, en VBA, soit utiliser Range("A1").Text, ou limiter le nombre de décimales (9 pour PQ)
Bon dimanche
 

alexga78

XLDnaute Occasionnel
Bon Dimanche à tous,
autre essai avec Power query.

Edit: Bonjour à tous,
Excellente remarque de Cousinhub, j'ai oublié cette demande importante.
La question sous-jacente, que fait-on si l'horaire apparait plusieurs fois dans la même colonne ? j'ai pris l'option de ne retenir que la première occurence.


PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Table.FromList(Table.ToColumns(Source), Splitter.SplitByNothing()), "Index", 1, 1, Int64.Type),
    #"Added Custom" = Table.AddColumn(#"Added Index", "Column N°", each  List.Repeat({"Col " & Text.From([Index])},List.Count(_[Column1]))),
    Combined = Table.TransformColumnTypes(Table.FromColumns({List.Combine(Table.SelectRows(#"Added Custom",each Number.IsOdd(_[Index]))[Column1]),List.Combine(Table.SelectRows(#"Added Custom",
    each Number.IsEven(_[Index]))[Column1]), List.Combine(Table.SelectRows(#"Added Custom",each Number.IsOdd(_[Index]))[#"Column N°"])},{"Horaire","Value","Column N°"}),{{"Horaire", type time}}),
    #"Expanded Group" = Table.SelectRows(Table.Group(Table.SelectColumns(Table.SelectRows(Table.ExpandTableColumn(Table.ExpandTableColumn(Table.Group(Combined, {"Horaire"}, {{"Value",
    each  Table.Group(_,{"Column N°"},{{"Group", each Table.AddIndexColumn(_,"Index",1)}})}}), "Value", {"Column N°", "Group"}, {"Column N°", "Group"}), "Group", {"Value", "Index"}, {"Value", "Index"}),
    each [Index] = 1), {"Horaire", "Value"}), {"Horaire"}, {{"Value", each if List.Count(_[Horaire]) = 8 then List.Sum(_[Value]) else null}}), each [Value] <> null),
    #"Sorted Rows" = Table.Sort(#"Expanded Group",{{"Horaire", Order.Ascending}})
in
    #"Sorted Rows"

bonne journée
 

Pièces jointes

  • PQ_Somme selon horaire.xlsx
    81 KB · Affichages: 4
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Cousinhub, Alexga,
J'avais bien vu dans le fil que je donne que votre solution par PowerQuerry donnait les bons résultats, ce qui d'ailleurs m'a amené à supprimé ma PJ boguée. :)
Mais on voit que :
1- PowerQuerry arrondit à 10 chiffres après la virgule, ce qui est la solution car les erreurs dans le fichier étaient de l'ordre de 1e-12.
2- Cela n'explique pas mon souci entre NB.SI et EQUIV. ( voir fil Lien )
J'admettrais volontiers que les deux formules se heurtent au même souci d'arrondi, mais là où je reste perplexe c'est que les deux formules n'ont pas le même comportement, comme si NB.SI arrondissait comme PowerQuerry alors qu' EQUIV travaille sans arrondi.
Ce qui est gênent c'est qu'on peut tomber dans le panneau et chercher longtemps. 😥
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 234
Membres
103 162
dernier inscrit
fcfg