Excel 2021 : Supprimer les triplons

Badoda

XLDnaute Nouveau
Bonjour à tous les membres d'excel-download,

Je suis passionné d'excel et je voudrais avois plus de connaissance dans l'accomplissement de mon travail. Cependant, je n'arrive pas à résoudre mon problème concernant les triplons. Dans mon fichier joint, j'ai exporté à partir d'une pointeuse biométrique les présences des employés. Je voudrais avoir par exemple pour l'employé ID 110, la date 05/04/2023 (2 fois mais pas 3) et la date 06/04/2023 (idem), c'est-à-dire la première date corresponde à l'heure d'entrée et la seconde date pour l'heure de sortie.

Est-ce que vous pouvez m'aider s'il vous plait?

Merci
Badoda
 

Pièces jointes

  • Badoda - Supprimer les triplons.xlsx
    77.2 KB · Affichages: 11

Cousinhub

XLDnaute Barbatruc
Bonjour,
Et bienvenue sur xld...
Même si tu n'as pas posé la question dans le bon forum, (ici, c'est juste pour les présentations, pour poser les questions, c'est sous ce lien)
Voici une solution passant par Power Query, qui est en natif dans ta version.
J'ai pris comme options :
- Horaire le plus matinal pour l'entrée
- Dernier horaire pour le départ (s'il a pointé à cette heure-là, c'est qu'il est encore là...)
- Je ne mets que les jours "complets" (1 entrée et 1 sortie)
Pour mettre à jour, clic droit dans la requête, "Actualiser", ou ruban "Données", "Actualiser tout"
Bonne journée
 

Pièces jointes

  • Badoda - Compter heures.xlsx
    125.1 KB · Affichages: 5

Badoda

XLDnaute Nouveau
Bonjour Cousinhub, le forum,

Désolé pour l'incompréhension sur le forum de présentation et le forum de discussion. je ne sais pas comment transférer cette dans le bon forum.

Je te remercie pour ton retour. comment faire s'il n'y a qu'une seule entrée à une date donnée mais pas de sortie dont j'aimerai garder cette ligne tout en affichant dans la colonne Durée comme "null".

Merci
Badoda
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Un modo a bien déplacé ta question, no soucy.
Pour conserver la ligne "Entrée" uniquement, tu fais comme ceci :
- Clic droit dans la requête/Table/Modifier la requête
- A droite, tu as les étapes, dont l’antépénultième, qui s'appelle "Lignes filtrées"
- Soit tu cliques sur la petite croix en début de ligne lorsque tu passes ta souris dessus, soit clic droit sur cette ligne, "Supprimer"
- Puis tu fermes (Bouton "Fermer et Charger" du ruban "Accueil")
Et c'est tout
Bonne journée
 

Badoda

XLDnaute Nouveau
Bonjour Cousinhub, le forum

Merci pour cette explication. je joint le fichier avec une modification que j'ai bidouiller mais je ne sais comment rendre 00:00:00 la colonne E que j'ai coloriée en bleu comme celle de la colonne Durée?

Merci
Badoda
 

Pièces jointes

  • Badoda - Présence ketrika.xlsx
    135 KB · Affichages: 6

Cousinhub

XLDnaute Barbatruc
Re-,
Je crois qu'il subsiste une petite erreur...
Si le jour où il n'y a que l'entrée (mais avec 2 ou plusieurs pointages matinaux), ça va décompter 2 ou quelques secondes...
Ne vaudrait-il pas mieux vérifier un temps minimal de présence?
(en gros, si la durée est < à 10 secondes, peut-être?)(ça dépend de l'écart max observé lors des "doublons/triplons"...)
@ te relire
 

Cousinhub

XLDnaute Barbatruc
Re-,
Dans la V3, s'il n'y a pas de pointage "Sortie", mais qu'il y a plusieurs pointages "Entrée", on ne compte que la 1ère entrée, et plus de calcul (comme ligne 31 de la V2)
Par contre, je conserve toujours le dernier pointage du soir (c'est pas de leur faute si la pointeuse "merde"...) 🤪
Et le traitement ne serait plus de même ampleur s'il fallait prendre le 1er pointage du soir...
 

Pièces jointes

  • Badoda - Compter heures_V3.xlsx
    132.7 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour Badoda, Cousinhub, le forum,

Une solution VBA très classique avec ce fichier et cette macro dans le code de la feuille 'Résultat" :
VB:
Private Sub Worksheet_Activate()
Dim d As Object, tablo, resu(), i&, x$, nn&, n&, j%, total#
Set d = CreateObject("Scripting.Dictionary")
tablo = Sheets("Présence").[A1].CurrentRegion.Resize(, 4) 'matrice, plus rapide
ReDim resu(1 To UBound(tablo), 1 To 6)
For i = 2 To UBound(tablo)
    x = tablo(i, 1) & tablo(i, 3)
    If d.exists(x) Then
        nn = d(x) 'récupère la ligne
        If tablo(i, 4) < resu(nn, 4) Then resu(nn, 4) = tablo(i, 4) 'minimum
        If tablo(i, 4) > resu(nn, 5) Then resu(nn, 5) = tablo(i, 4) 'maximum
    Else
        n = n + 1
        d(x) = n 'mémorise la ligne
        For j = 1 To 4: resu(n, j) = tablo(i, j): Next j
        resu(n, 5) = tablo(i, 4)
    End If
Next
'---dernière colonne---
For i = 1 To n
    total = resu(i, 5) - resu(i, 4)
    If Application.Round(total, 6) Then resu(i, 6) = total Else resu(i, 5) = Empty
Next
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] '1ère cellule de destination
    If n Then .Resize(n, 6) = resu
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 6).ClearContents 'RAZ en dessous
End With
Columns.AutoFit 'ajustement largeurs
End Sub
Elle se déclenche quand on active la feuille.

Elle est très rapide car elle utilise des tableaux VBA et le Dictionary.

A+
 

Pièces jointes

  • Badoda VBA(1).xlsm
    88 KB · Affichages: 10

Badoda

XLDnaute Nouveau
J'ai testé la durée d'exécution de la macro et celle de l'actualisation de PQ.

Elles sont équivalentes, un peu moins de 0,03 seconde chez moi.
Bonsoir job75, Cousinhub, le forum

Merci pour votre intervention et votre solution. En principe, il faut qu'il y ait une entrée et une sortie mais pas l'une sans l'autre. on a trouvé que la personne ID 106 est entrée le 12/04/2023 à 06:57:08 et a oublié d'effectuer le pointage biométrique pour la sortie d'où la durée est 00:00:00. mais y a-t-il un autre moyen si la personne a oublié d'effectuer la présence biométrique pour l'entrée mais a effectué une sortie. le résultat de la durée doit être idem à 00:00:00.

Merci
Badoda
 

job75

XLDnaute Barbatruc
mais y a-t-il un autre moyen si la personne a oublié d'effectuer la présence biométrique pour l'entrée mais a effectué une sortie. le résultat de la durée doit être idem à 00:00:00.
A priori quand il y a une seule heure c'est toujours une entrée et pas une sortie.

Ou alors il faudrait établir la règle qu'une heure le matin est toujours une entrée et une heure le soir est toujours une sortie.

Je ne vois pas l'intérêt d'une telle règle.
 

Statistiques des forums

Discussions
312 215
Messages
2 086 333
Membres
103 188
dernier inscrit
evebar