Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Somme suivant heures

  • Initiateur de la discussion Initiateur de la discussion nico3869
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Solution
Re,
@nico3869 si tu pouvais répondre dans un délai raisonnable, ce serait bien 😉
Ma proposition précédente : te faire une macro d'import tient toujours bien-sûr

Tant qu'à faire du VBA voici une version à l'opposé de la précédente qui était "tout par formules" cette fois c'est tout par VBA !


La lecture du Tableau Structuré :
VB:
Sub LireTS()
     Dim DC As New Scripting.Dictionary
   
     'Horaire sélectionné avant la modification
     H = Sh_Rapport.[Horaire_Choisi].Value
     'Contenu du TS "TS_HV"
     Ts = Sh_Rapport.[TS_HV]
   
     'le TS est supposé avoir un nombre de colonnes pair
     If UBound(Ts, 2) Mod 2 = 1 Then
          MsgBox "Nombre de colonnes impair !"
          Exit Sub
     End If
   
     Application.ScreenUpdating =...
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

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:
Bonsoir Nico, Piga, Djidji, JHA,
J'ai encore compris autre chose. 🙂
En PJ on construit la liste de tous les horaires figurant dans les 8 colonnes, on en donne les valeurs et la somme.
 
Je regarde. 🙄
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:
Bonjour,
Non, non, PQ traite bien en décimal :
Voici ce qu'il charge, à la première étape :

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

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

Dernière édition:
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. 😥
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
637
Réponses
8
Affichages
692
Réponses
0
Affichages
1 K
Réponses
11
Affichages
2 K
Réponses
2
Affichages
912
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…