Supprimer des doublons selon une condition

Bonjour le forum,

Voilà mon problème :

J'ai une liste de machines avec leurs différents critères de dénomination et j'ai des doublons car pour la même machine je peux avoir plusieurs valeurs dans la colonne "cres_fonction".

Mon but est de supprimer les doublons pour n'avoir qu'une seule fois la même machine.

Cette suppression doit se faire suivant les critères suivant:

- Si pour le numéro de matériel "21579" (colonne "mmat_nummat") on a comme choix "DEAT" dans la colonne "cres_fonction", on garde cette ligne et on supprime toutes les autres lignes avec le même numéro de matériel.

- Si nous n'avons pas "DEAT" dans la liste des doublons, on garde la ligne qui contient "DECI" et on supprime les autres

Et ce pour tout les matériels de la feuille ( le fichier joint ne représente qu'une petite partie de mon fichier global)

Tout ça doit se faire dans du code pour effectuer le tri assez vite sur un nombre de lignes conséquent.

Je joint un fichier pour appuyer ma demande.

Je vous remercie d'avance pour votre aide.

Bonjour et bienvenue sur le forum

Un essai à tester. Te convient-il ?

Bye !

Bonjour Renaud09000, le forum,


Salut GMB,

Arggghhh !! ces "tablo".....et en plus tu y mets un dico....

Au top,


Une variante (à tester) à base de tris et filtres (code crée à l'aide de l'enregistreur de macro....)

Sub Suppression()

  Application.ScreenUpdating = False
  Application.DisplayAlerts = False

   With Sheets("Feuil1")
    .Range("A2:L" & .Range("A" & Rows.Count).End(xlUp).Row).Sort Key1:=Range("L2"), Order1:=xlAscending
    .Range("A2:L" & .Range("A" & Rows.Count).End(xlUp).Row).Sort Key1:=Range("B2"), Order1:=xlAscending
    .Range("A2:L" & .Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=12, Criteria1:=Array( _
        "COMPTA", "DEPR", "FACT", "PATR", "="), Operator:=xlFilterValues
    .Range("A2:L" & .Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlVisible).Delete
     If .FilterMode = True Then .ShowAllData
    .Range("A2:L" & .Range("A" & Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7 _
        , 8, 9, 10, 11, 12), Header:=xlYes
    .Range("A2:L" & .Range("A" & Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=2, Header:=xlYes
   End With

  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
End Sub

Cordialement,

Bonjour tout le monde,

Merci à GMB et Xorsankukai, les codes sont exactement ce qu'il me fallait.

Je vous remercie pour votre rapidité et efficacité.

Il ne me reste plus qu'à choisir lequel je vais utiliser

Bonne fin de semaine et encore merci.

Désolé le forum, j'ai parlé un peu vite,

En fait, le code de Xorsankukai, fonctionne mais pour les valeurs que j'ai d'unique, il les supprime aussi.

Le but est que dans tout les cas peut importe la valeur de "cres_fonction", j'ai toutes les machines de ma liste de base après exécution de la maccro.

C'est à dire qu'on va prioriser "DEAT", si cette valeur n'y est pas on priorise "DECI", puis "DEPR", puis "PATR", puis "COMPTA" puis "FACT" ,puis " ".

Cette formule me plait car elle filtre les valeurs sur le tableau existant.

Auriez-vous une idée de le façon de modifier le code pour faire ce que je veux?

Je vous remercie d'avance.

Re,

Merci pour ton retour,

Nouvel essai....

Sub suppression_doublons()
 Dim derlig&, plage As Range

 Application.ScreenUpdating = False

    With Sheets("Feuil1")
           derlig = .Range("L" & Rows.Count).End(xlUp).Row
        Set plage = .Range("A2:L" & derlig)
         .Sort.SortFields.Clear
         .Sort.SortFields.Add Key:=Range("L2:L" & derlig), SortOn:=xlSortOnValues, _
          Order:=xlAscending, CustomOrder:="DEAT,DECI,DEPR,PRAT,COMPTA,FACT,", DataOption:=xlSortNormal

        With .Sort
            .SetRange plage
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

         plage.Sort Key1:=Range("B2"), Order1:=xlAscending
        .Range("A1:L" & .Range("A" & Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=2, Header:=xlYes
    End With
End Sub

CTRL + e pour exécuter la macro "suppression_doublons"

Cordialement,

Cela m'a l'air de fonctionner impeccable.

Merci beaucoup pour l'aide je vais gagner pas mal de temps.

Bonne fin de journée,

Rechercher des sujets similaires à "supprimer doublons condition"