Doublon condition date > à l'autre

Bonjour,

J'effectu un tri sur un onglet à l'activation de l'onglet pour mettre par ordre alphabétique puis je supprime les doublons. Tout ça en vba bien sûr =).

Mon soucis ici c'est que je ne sais pas comment adapter la formule pour lui dire cette condition pour la colonne 5.

petit exemple pour imager (uniquement la partie qui me manque):

colonne 5 ligne 1: 06/05/16

colonne 5 ligne 2: 06/05/17

Ici, on suppose que les colonnes qui ont été comparées das les lignes 1 et 2 sont égales et qui ne reste que cette condition.

Je voudrai qu'ici, on supprime la ligne comportant la date inférieur à l'autre. Donc la ligne 1 serait supprimée.

Voici le code que j'ai:

Private Sub Worksheet_Activate()
'
' trie Macro
'

'
    ActiveWorkbook.Worksheets("Import ICRH").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Import ICRH").AutoFilter.Sort.SortFields.Add Key:= _
        Range("A1:A10000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Import ICRH").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'
'Doublons
'
    Application.ScreenUpdating = False
    col1 = 1
    col2 = 2
    col3 = 3
    col4 = 5
    Application.Calculation = xlCalculationManual
    Cells(3, col1).Sort Key1:=Cells(2, col1), Order1:=xlAscending, _
      Key2:=Cells(2, col2), Order2:=xlAscending, _
        Key3:=Cells(2, col3), Order3:=xlAscending, Header:=xlGuess
    For i = Cells(65000, col1).End(xlUp).Row To 2 Step -1
      If Trim(Cells(i, col1)) = Trim(Cells(i - 1, col1)) _
        And Trim(Cells(i, col2)) = Trim(Cells(i - 1, col2)) _
         And Trim(Cells(i, col3)) = Trim(Cells(i - 1, col3)) _
          And Trim(Cells(i, col4)) = Trim(Cells(i - 1, col4)) Then Rows(i).Delete

    Next i
    Application.Calculation = xlCalculationAutomatic
 End Sub

Merci !!!!

Bonjour,

A défaut de mettre un fichier, il serait bon que tu précises le type de données des 3 premières colonnes : ton passage en calcul manuel m'interroge ?

A part ça je ne vois pas l'intérêt du premier tri, surtout avec la méthode Worksheet.Sort (alors qu'il est refait ensuite et sur 3 champs avec la méthode Range.Sort).

Le défiltrage après test que mode filtre et filtre actif suffisait.

Cordialement.

Ops oui désolé le fichier était tout près en plus ^^

L'onglet concerné est l'Import ICRH. Dans cet onglet j'importe des dates de stages par un UserForm. Le principe de mon tri est que je compare le nom et prénom, le code du stage (colonne 1, 2 et 3) puis la comparaison de cette fameuse date.

J'ai réussi cette fonction doublon en utilisant un code que j'ai trouvé après quelques recherches donc je suis d'accord il y a surrement des choses à enlever. Cependant je ne suis pas encore sûr de placer cette fonction ici (dans le Private Sub).

Re,

Proposition :

Private Sub Worksheet_Activate()
    Dim n%, i%
    With Worksheets("Import ICRH")
        If .AutoFilterMode Then
            If .FilterMode Then .ShowAllData
        End If
        n = .Range("A" & .Rows.Count).End(xlUp).Row
        Application.ScreenUpdating = False
        .Range("A2:J" & n).Sort Key1:=.Cells(2, 1), Order1:=xlAscending, _
         Key2:=.Cells(2, 2), Order2:=xlAscending, _
         Key3:=.Cells(2, 3), Order3:=xlAscending, Header:=xlNo
        For i = n - 1 To 2 Step -1
            If Trim(.Cells(i + 1, 1)) & Trim(.Cells(i + 1, 2)) & Trim(.Cells(i + 1, 3)) = _
             Trim(.Cells(i, 1)) & Trim(.Cells(i, 2)) & Trim(.Cells(i, 3)) Then
                If .Cells(i, 5) <= .Cells(i + 1, 5) Then
                    .Cells(i, 5).EntireRow.Delete
                Else
                    .Cells(i + 1, 5).EntireRow.Delete
                End If
            End If
        Next i
        Application.ScreenUpdating = True
    End With
 End Sub

A voir sur ton fichier la durée d'exécution, si elle apparaît trop importante, on utilisera une autre méthode (que la suppression ligne par ligne), mais dans la mesure où c'est fait à chaque activation de la feuille, il ne devrait y avoir que très peu de lignes à supprimer à chaque fois.

Cordialement.

Ouaaaaaaaaa la classe !!!!

ça marche super bien mais il est vrai que c'est un peu lent :/ Mais juste un peu pas trop dérangeant quand même (j'ai un tableau de 1500 et plus lignes) donc bon.

Si jamais tu as plus rapide faisant la même chose je prend quand même !!

Merci beaucoup en tout cas !!

EDIT:

Nan c'est quand même rapide ^^ même en ajoutant plusieurs lignes à comparer dans mon fichier d'origine ça ne prend que 2 sec environs donc nickel !!! =)

En l'ayant en procédure Activate, cela devrait rester très acceptable.

Si tu procèdes autrement un jour, reviens on fera autrement...

A+

Rechercher des sujets similaires à "doublon condition date"