Supprimer les doublons

Bonjour,

La petite histoire..

Sur un chantier j’ai des camions qui passe sur une bascule afin de peser la quantité de matériaux qui nous livre. J’exporte ensuite les données (en simplifié le fichier joint)

5fichier1.xlsx (9.57 Ko)

Mais je remarque que certain camion passe 2 fois. Je voudrais que Excel me détecte les doublons et me les supprime.

Pour une même immatriculation (« Immat ») comparer les deux heures de pesées (« Date »), si la différence est inférieure à 20min je garde les pesées du même camions. Sinon je supprime.

Comparer les heures avec la formule « =(A2-A1)*1440 », est-ce un bon début ?

Est-ce que je dois le faire en VBA ?

Merci d’avance

Florian

Bonjour,

Je pense qu'il est tout à fait possible de se passer de VBA, à partir du moment où l'ajout de colonne ne te pose pas de problème.

Pour être au clair :

  • Intervalle de - de 20 minutes entre 2 pesées, tu gardes toutes les pesées, ou tu ne conserves qu'une valeur ?
  • Quelle valeur comptes tu conserver ? La première, la dernière, la moyenne, la médiane... ?

Ce que tu as écrit ne me semble pas très logique, dans la mesure où des pesées espacées de moins de 20 minutes représentent pour moi un même chargement (donc des doublons à supprimer). Si j'ai bien compris, voilà un fichier permettant d'identifier les doublons (et de les supprimer en filtrant les lignes selon cette nouvelle colonne) :

4fichier1.xlsx (9.43 Ko)

Si j'ai mal compris et que ce que tu as écrit est correcte, où s'arrête la suppression des doublons d'une même immatriculation ? Au même jour ?

Bonjour Pedro,

Déjà merci pour ta réponse.

Ce que tu as écrit ne me semble pas très logique, dans la mesure où des pesées espacées de moins de 20 minutes représentent pour moi un même chargement (donc des doublons à supprimer).

Bien vu ! Effectivement je voulais dire la différence supérieur à 20 minutes.

- Intervalle de - de 20 minutes entre 2 pesées, tu gardes toutes les pesées, ou tu ne conserves qu'une valeur ?

Intervalle de - de 20 minutes entre 2 pesées, je supprime les pesées dont l'immatriculation est la même.

- Quelle valeur comptes tu conserver ? La première, la dernière, la moyenne, la médiane... ?

Je garde la première pesée.

Merci pour la formule

Faut-il ensuite supprimer la ligne manuellement ? Ou peut-on automatiser tout ça ?

Il est possible de tout automatiser, mais personnellement je ne m'embêterai pas avec des macros pour une opération faisable en 2 clics...

Si c'est vraiment ce que tu souhaites, redis moi et je te proposerais un code.

Je vais essayer de mettre sous forme de macro, si quelqu'un d'autre doit faire mon travail, il n'aura plus qu'a cliquer sur un bouton !

J'ai trouver un code super "doublons_et_lignes_vides" sur le site. Ça marche super bien. Sauf que pour moi il faudrait l'adapter pour ma colonne A (date et heure).

2fichier1.xlsm (20.98 Ko)

Si je ne me trompe pas, il faut cette formule en VBA pour que la macro me compare chaque ligne de mon fichier.

SI (Ai-An)<20/1440;Bi=Bn ALORS détecte comme doublon dans le programme. (Celle que tu m'as donné hier)

Et sur quelle ligne du code ajouter la condition ?

Merci

Voilà une proposition à tester :

Sub SupprDoublons()

Dim Lig As Long, LigMax As Long, Tps As Single, Seuil As Single

With Sheets("Feuil1")
    LigMax = .Range("A" & Rows.Count).End(xlUp).Row 'Identifie la dernière ligne non vide
    Tps = 20 / 1440 'Intervalle de temps : 20 minutes
    Seuil = 600 'Différence de poids net tolérée (en kg) pour considérer que c'est le même chargement
    'Tri par immatriculation et par date
    .AutoFilter.Sort.SortFields.Clear
    .AutoFilter.Sort.SortFields.Add Key:=Range("B1"), Order:=xlAscending
    .AutoFilter.Sort.SortFields.Add Key:=Range("A1"), Order:=xlAscending
    With .AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    For Lig = 2 To LigMax 'Boucle sur les lignes
        If .Range("B" & Lig) = .Range("B" & Lig - 1) Then
            If Abs(.Range("A" & Lig) - .Range("A" & Lig - 1)) < Tps And Abs(.Range("E" & Lig) - .Range("E" & Lig - 1)) < Seuil Then .Range("F" & Lig) = "Doublon"
        End If
    Next Lig
    .Range("A1").AutoFilter Field:=6, Criteria1:="<>" 'Tri les "doublons"
    .Range("A2:F" & LigMax).SpecialCells(xlCellTypeVisible).Delete 'Supprime les doublons
    .Range("A1").AutoFilter Field:=6 'Retire le tri pour afficher toutes les données
End With

End Sub

PS : J'ai ajouté une condition de poids pour considérer 2 chargements consécutifs comme étant des doublons

Merci pour le code, j'ai eu une première erreur sur la ligne

  For Lig = 2 To LigMax 'Boucle sur les lignes
        If .Range("B" & Lig) = .Range("B" & Lig - 1) Then
            If Abs(.Range("A" & Lig) - .Range("A" & Lig - 1)) < Tps And Abs(.Range("E" & Lig) - .Range("E" & Lig - 1)) < Seuil Then .Range("F" & Lig) = "Doublon"

J'ai changé en :

 For Lig = 3 To LigMax 'Boucle sur les lignes 

Ça marche nickel ! Merci beaucoup

Content de t'avoir aidé !

Rechercher des sujets similaires à "supprimer doublons"