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 nico3869, AtTheOne,

Autre solution par formules, assez simple car il n'y a pas de doublons dans les colonnes des heures :

- matricielle en Résultats!A2 :
Code:
=INDEX(BDD!C:C;PETITE.VALEUR(SI(ESTNUM(EQUIV(BDD!C$9:C$512;BDD!E$9:E$512;0))*ESTNUM(EQUIV(BDD!C$9:C$512;BDD!G$9:G$512;0))*ESTNUM(EQUIV(BDD!C$9:C$512;BDD!I$9:I$512;0))*ESTNUM(EQUIV(BDD!C$9:C$512;BDD!K$9:K$512;0))*ESTNUM(EQUIV(BDD!C$9:C$512;BDD!M$9:M$512;0))*ESTNUM(EQUIV(BDD!C$9:C$512;BDD!O$9:O$512;0))*ESTNUM(EQUIV(BDD!C$9:C$512;BDD!Q$9:Q$512;0));LIGNE(BDD!C$9:C$512));LIGNE(A1)))
EQUIV est plus rapide que NB.SI

- en Résultats!B2 :
Code:
=SOMME.SI(BDD!C$9:Q$512;A2;BDD!D$9:R$512)
Chez moi les 268 lignes se recalculent en 0,68 seconde.

Notez que je ne me préoccupe pas des fractions de seconde parasites.

A+
 

Pièces jointes

Bonjour le forum,

Comme déjà dit il n'y a pas de doublons dans une colonne d'heures.

Mais s'il peut y en avoir il faut modifier la formule matricielle en Résultats!A2 :
Code:
=INDEX(BDD!T:T;PETITE.VALEUR(SI(NON(NB.SI(A$1:A1;BDD!T$9:T$512))*ESTNUM(EQUIV(BDD!T$9:T$512;BDD!V$9:V$512;0))*ESTNUM(EQUIV(BDD!T$9:T$512;BDD!X$9:X$512;0))*ESTNUM(EQUIV(BDD!T$9:T$512;BDD!Z$9:Z$512;0))*ESTNUM(EQUIV(BDD!T$9:T$512;BDD!AB$9:AB$512;0))*ESTNUM(EQUIV(BDD!T$9:T$512;BDD!AD$9:AD$512;0))*ESTNUM(EQUIV(BDD!T$9:T$512;BDD!AF$9:AF$512;0))*ESTNUM(EQUIV(BDD!T$9:T$512;BDD!AH$9:AH$512;0));LIGNE(BDD!T$9:T$512));1))
Le recalcul des formules se fait alors en 3,3 secondes chez moi.

A+
 

Pièces jointes

Bonjour à toutes & à tous, bonjour @nico3869, @job75
En utilisant la piste donnée au post #46 et avec la précaution sur les fractions de seconde, voilà des formules valides pour EXCEL2024 & 365 qui s'exécutent en une fraction de seconde. Merci @job75 !

Horaires triés sans doublon :
VB:
=LET(ColA;TEMPSVAL(TEXTE(TS_HV[V1H];"hh:mm:ss"));
     Cols;TEMPSVAL(TEXTE(CHOISIRCOLS(TS_HV;SEQUENCE(1;ENT(COLONNES(TS_HV)/2)-1;3;2));"hh:mm:ss"));
     N;COLONNES(Cols);
     Lbd;LAMBDA(me;i;T;SI(i>N;T;me(me;i+1;T*ESTNUM(EQUIV(ColA;CHOISIRCOLS(Cols;i))))));
TRIER(FILTRE(ColA;Lbd(Lbd;1;1))))

Somme des valeurs associées :
Code:
=LET(nCol;COLONNES(TS_HV)-1;
 SOMME.SI(DECALER(TS_HV;0;0;;nCol);ListeH#;DECALER(TS_HV;0;1;;nCol)))

Somme des valeurs associées à l'horaire choisi :
Code:
=SOMMEPROD(N(CHOISIRCOLS(TS_HV;SEQUENCE(1;COLONNES(TS_HV)/2;1;2))=Horaire_choisi);
           CHOISIRCOLS(TS_HV;SEQUENCE(1;COLONNES(TS_HV)/2;2;2)))

Liste des valeurs associées à l'horaire choisi (Suppose qu'il n'y ait pas de doublon dans les colonnes d'heures) :
Code:
=LET(t;TS_HV;
     H;TEMPSVAL(TEXTE(CHOISIRCOLS(t;SEQUENCE(1;ENT(COLONNES(t)/2);1;2));"hh:mm:ss"))=Horaire_choisi;
     V;CHOISIRCOLS(t;SEQUENCE(1;ENT(COLONNES(t)/2);2;2))*H;
TRANSPOSE(BYCOL(V;LAMBDA(l;MAX(l)))))

Ces formules fonctionnent quelque soit le nombre pair de colonnes du tableau "TS_HV"

À bientôt
EDIT : post complété (envoyé accidentellement dans un premier temps)
 

Pièces jointes

Dernière édition:
- 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
Retour