Microsoft 365 TCD total distinct et somme d'heures

  • Initiateur de la discussion Initiateur de la discussion FranckyNC
  • 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 !

FranckyNC

XLDnaute Nouveau
Bonjour,

Est-il possible d'avoir dans un TCD une somme d'heures et un total distinct? Perso, je n'y arrive pas. Y aurait-il une solution et laquelle, svp?
Mon tableau se présente comme suit :
Service | Matricule | Semaine | Heures hebdo.

Matricule : format standard (numérique sous la forme 1234)
Service : format standard (caractères sous la forme SERV01)
N° semaine: format standard (numérique sous la forme 1234)
Hres hebdo. : format personnalisé ([h]:mm;@ sous la forme 39:00)

Pour un service SERV01 de 3 personnes dont 2 à 39:00 et 1 à 20:00 par semaine, je m'attends à avoir dans le TCD pour une semaine :
Lignes :
Service
Semaine
Valeurs :
Total distinct Matricule
Somme des heures hebdo

Résultat attendu :
Nom service | Semaine | Total distinct | Somme hrs hebdo

SERV01 | 1 | 3 | 98:00

Merci d'avance de toutes les réponses apportées.
 

Pièces jointes

Bonjour,
Pour obtenir un nombre distinct, il faut charger les données dans un "modèle de données" à la création du TCD :
1748849136420.png

Et on peut ainsi calculer le nombre distinct de matricules :
1748849249296.png

Mais on ne peut pas agréger le nombre total d'heures...

Un essai utilisant Power Query
 

Pièces jointes

Bonjour FranckyNC, Cousinhub, le forum,

Une solution VBA avec 2 Dictionary :
VB:
Sub Grouper()
Dim d As Object, dd As Object, tablo, resu(), i&, n&, x$, nn&, y$
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Set dd = CreateObject("Scripting.Dictionary")
dd.CompareMode = vbTextCompare 'la casse est ignorée
tablo = [Tableau1] 'tableau structuré
ReDim resu(1 To UBound(tablo), 1 To 4)
For i = 1 To UBound(tablo)
    x = tablo(i, 3) & Chr(1) & tablo(i, 4)
    If Not d.exists(x) Then
        n = n + 1
        d(x) = n 'mémorise la ligne
        resu(n, 1) = tablo(i, 3)
        resu(n, 2) = tablo(i, 4)
    End If
    nn = d(x) 'récupère la ligne
    If IsNumeric(tablo(i, 5)) Then resu(nn, 4) = resu(nn, 4) + CDbl(tablo(i, 5)) 'cumule les heures
    y = tablo(i, 1) & Chr(1) & x
    If Not dd.exists(y) Then dd(y) = "": resu(nn, 3) = resu(nn, 3) + 1 'compte les matricules
Next
'---restitution---
With [Tableau2] 'tableau structuré
    If n Then .Resize(n) = resu
    If n < .Rows.Count Then .Rows(n + 1).Resize(.Rows.Count - n).Delete xlUp
 End With
End Sub
A+
 

Pièces jointes

Bonjour,

Est-il possible d'avoir dans un TCD une somme d'heures et un total distinct? Perso, je n'y arrive pas. Y aurait-il une solution et laquelle, svp?
Mon tableau se présente comme suit :
Service | Matricule | Semaine | Heures hebdo.

Matricule : format standard (numérique sous la forme 1234)
Service : format standard (caractères sous la forme SERV01)
N° semaine: format standard (numérique sous la forme 1234)
Hres hebdo. : format personnalisé ([h]:mm;@ sous la forme 39:00)

Pour un service SERV01 de 3 personnes dont 2 à 39:00 et 1 à 20:00 par semaine, je m'attends à avoir dans le TCD pour une semaine :
Lignes :
Service
Semaine
Valeurs :
Total distinct Matricule
Somme des heures hebdo

Résultat attendu :
Nom service | Semaine | Total distinct | Somme hrs hebdo

SERV01 | 1 | 3 | 98:00

Merci d'avance de toutes les réponses apportées.
Bonjour,

Voici une réponse potentielle

Plus de formules qu'un Power Query...
 

Pièces jointes

Bonjour,

Voici une réponse potentielle

Plus de formules qu'un Power Query...
Bonjour,
Merci pour cette réponse mais le TCD est vraiment le résultat attendu car dans le fichier initiale, il y a une vingtaine de colonnes.
Je pense qu'il est certainement possible de passer par un Power Query avec une mesure contenant le total distinct. Ne maitrisant pas Power Query, je vais essayer de passer par 2 TCD.
 
Bonjour,
Le nombre de colonnes à agréger ne pose aucun problème pour Power Query.
Pratiquement toutes les agrégations sont pilotables à la souris (hormis le décompte de valeurs distinctes dans l'exemple fourni)
Il n'y a aucune crainte à utiliser PQ, et nombre de contributeurs pourront t'aider dans tes recherches.
Bon courage
 
Bonjour à tous
En repartant du fichier de @Dand87
Je n'ai certainement pas compris, mais il me semble qu'un simple TCD peux montrer tous les sous totaux demandés : Nom, semaine et service:
Regarde la pièce jointe 1218819

Cordialement
Hello,
Effectivement, un simple TCD peut effectuer les sommes des heures, mais ne peut pas donner le nombre distinct de matricules (uniquement le nombre, et non les matricules eux-mêmes)
Bonne journée
 
Bonjour

On
  • charge dans PowerQuery
  • type les durées en Décimal
  • ajoute la requête PowerQuery au modèle de données

Le TCD semble correspondre à la demande. Les durées y sont formatées en heures
1749029371691.png

1749029706428.png
 
Dernière édition:
Bonjour à tous,

Une solution par formules avec une colonne auxiliaire Compte Matricules (à masquer) dans le tableau source :
Code:
=N(EQUIV([@Matricule]&[@Service]&CAR(1)&[@[N° semaine]];[Matricule]&[Service]&CAR(1)&[N° semaine];0)=LIGNE()-LIGNE(Tableau1[#En-têtes]))
C'est une formule matricielle à valider par Ctrl+Maj+Entrée (non nécessaire sous MS 365).

A+
 

Pièces jointes


TCD demandé
 

TCD demandé
Certains peuvent ne pas aimer les TCD ou Power Query, les formules ou VBA sont de bonnes alternatives.
 
- 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

Retour