Probleme de doublons

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

M

maguetlolo

Guest
Bonjour

voici mon probleme: j'ai une liste:

date défaut article
1 08/01/08 145 031753625142698
2 09/01/08 235 031753625154876
3 08/01/08 265 031753625142698
4 12/01/08 658 031753625154486
5 08/01/08 215 031753625142698
6 10/01/08 145 031753625142698

à noter que cette liste peut atteindre 20 000 lignes, voir plus et a plus de colonnes que ca

je voudrais lorsqu'il y a doublon dans 2 colonnes en même temps (colonnes date et charge), supprimer ces doublons (la ligne entiere) en gardant la premiere.

Dans ce cas: les lignes 3 et 5 seraient supprimé. mais pas supprimer la 6 car pas la même date.

voila, j'ai chercher dans le forum, mais aucun sujet ne regle mon probleme.

merci à ceux qui m'aiderons.
 
Dernière modification par un modérateur:
Re : Probleme de doublons

Bonjour,

Il y a pas mal de fils sur ce forum qui traitent de la suppression de lignes. Voici une petite macro que j'ai proposée il y a peu de temps et que j'adapte à votre cas :

Sub SupprLignes()
For i = 1 To Application.CountA(Range("A:A"))
txt = Range("B"&i)&Range("D"&i)
For j = i + 1 To Application.CountA(Range("A:A"))
If Range("B"&j)&Range("D"&j) = txt Then Rows(j).Delete
Next
Next
End Sub

A+

Edit : il est certain qu'avec 20000 lignes, ça peut prendre un peu de temps. il y a environ 200 millions de tests à effectuer (si aucune ligne n'est supprimée).
 
Dernière édition:
Re : Probleme de doublons

bonjour et merci de me repondre

votre macro fonctionne bien, cependant elle ne me supprime que les lignes qui sont entierement en doublon, dans mon exemble, je veut supprimer les lignes qui qont en doublon sur les colonnes "date" et "charge" (a et c) par exemple:
08/01/08 265 031753625142698


08/01/08 215 031753625142698

dans ces deux lignes: colonnes 1 et 3 identique (colonne 2 différente), je supprime donc la deuxieme.
 
Re : Probleme de doublons

Regardez la macro, il y est écrit que si par exemple B5&D5 = B2&D2, la ligne 5 est supprimée. J'ai supposé bien sûr que colonne B => Dates et colonne D => Charges. Ce n'est pas ce que vous désirez ?
A+

Edit : dans votre exemple vous mettiez des chiffres en 1ère colonne (1 2 3 4 5...)
 
Dernière édition:
Re : Probleme de doublons

toute mes escuses a job75, c moi qui me trompe, ta macro fonctionne bien,me reste a la noyer dans le reste de mon dossier, en fait pour votre info, a partir d'un historique de defaut sur un parc de machine, je met en place toute une serie de macro fin que ressorte un classeur d'analyse avec graphiques, analyse des durée des defauts, nombre de défauts par machine, etc etc. le tout entierement automatisé. voila mais une question, etant en entreprise (donc sur reseau avec chacun sa session et les autorisations qui vont avec car je ne suis pas administrateur) croyez vous que je pourrais installer mdf doublon?
 
Re : Probleme de doublons

Bonsoir,

Voir PJ

Code:
Sub SupTrié()
    Application.ScreenUpdating = False
    [A1].Sort Key1:=Range("A2"), Key2:=Range("C2"), _
      Order1:=xlAscending, Order2:=xlAscending, Header:=xlGuess
    For i = [A65000].End(xlUp).Row To 2 Step -1
      If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 3) = Cells(i - 1, 3) Then
        Rows(i).Delete
      End If
    Next i
End Sub


Sub SupOrdreRespecté()
    Application.ScreenUpdating = False
    Columns("d:d").Insert Shift:=xlToRight
    [d1] = "ordre"
    [d2] = 1
    [d2].AutoFill Destination:=Range("d2:d" & [A65000].End(xlUp).Row), Type:=xlFillSeries
    [A1].Sort Key1:=Range("A2"), Key2:=Range("C2"), _
      Order1:=xlAscending, Order2:=xlAscending, Header:=xlGuess
    For i = [A65000].End(xlUp).Row To 2 Step -1
      If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 3) = Cells(i - 1, 3) Then
        Rows(i).Delete
      End If
    Next i
    [A1].Sort Key1:=Range("d2"), Order1:=xlAscending, Header:=xlGuess
    Columns("d:d").Delete Shift:=xlToLeft
End Sub

1,8sec pour 10.000 éléments et 99% suppression

Principe:
-Formule =SI(A2=A1;1;0) pour repérer les doublons avec la valeur 1
-Tri pour regrouper les lignes à supprimer à la fin
-Remplacer 1 par un vide
-Sélection des cellules vides et Suppression des lignes


Code:
Sub SupRapide2CriteresColAColC()
    Application.ScreenUpdating = False
    [A1].Sort Key1:=Range("A2"), Order1:=xlAscending, _
       Key2:=Range("C2"), Order2:=xlAscending, Header:=xlGuess
    Columns("d:d").Insert Shift:=xlToRight
    [d1] = "Cold"
    [d2].FormulaR1C1 = "=IF(AND(RC[-1]=R[-1]C[-1],RC[-3]=R[-1]C[-3]),1,0)"
    [d2].AutoFill Destination:=Range("d2:d" & [A65000].End(xlUp).Row)
    [d:d].Value = [d:d].Value
    [A2].CurrentRegion.Sort Key1:=Range("d2"), Order1:=xlAscending, Header:=xlGuess
    [d:d].Replace What:="1", Replacement:="", LookAt:=xlPart
    Range("d2:d65000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    Columns("d:d").Delete Shift:=xlToLeft
End Sub

Avec Filtre élaboré: 6 s pour 10.000 éléments:

Code:
Sub TriFiltre()
   [A1].Sort Key1:=[A2], Order1:=xlAscending, Key2:=[c2], Order2:=xlAscending, Header:=xlGuess
   [d:d].Insert Shift:=xlToRight
   [d2].Formula = "=AND(A1=A2,c1=c2)"
   [A1:C10000].AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=[d1:d2]
   If MsgBox("Etes vous sûr?", vbYesNo) = vbYes Then
       Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
       Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
   Else
      MsgBox "Annulé"
   End If
   ActiveSheet.ShowAllData
   [d:d].Delete Shift:=xlToLeft
End Sub


JB
 

Pièces jointes

Dernière édition:
Re : Probleme de doublons

Bonjour à tous,

job75 : si tu as encore le fichier qui t'a servi de test, peux-tu essayer en ajoutant Application.ScreenUpdating = False dans ton code

Code:
Sub SupprLignes()
Application.ScreenUpdating = False
For i = 1 To Application.CountA(Range("A:A"))
txt = Range("B"&i)&Range("D"&i)
For j = i + 1 To Application.CountA(Range("A:A"))
If Range("B"&j)&Range("D"&j) = txt Then Rows(j).Delete
Next
Next
End Sub

Merci de ton test
A++
A+ à tous
 
Re : Probleme de doublons

Bonjour,

Aussi bizarre que cela puisse paraître ma méthode (manuelle) ne demande que quelques minutes de fonctionnement. Je la pratique très souvent au travail et sur des fichiers qui avoisine le 50 000 lignes.

Mais, je sais, elle n'est pas automatique ... !
 
Re : Probleme de doublons

Pardon, jai multiplié la durée de mon test (2000 lignes) par 200, alors qu'il faut multiplier par 100 ! Le temps de calcul pour 20000 lignes est donc de 1h30. C'est un peu mieux, mais apparemment ici le traitement manuel ridiculise l'ordinateur.
A+
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
887
R
Réponses
12
Affichages
813
R
Réponses
4
Affichages
1 K
Réponses
2
Affichages
1 K
K
Réponses
0
Affichages
779
K
D
Réponses
5
Affichages
2 K
Dje_Ejd
D
G
Réponses
9
Affichages
1 K
G
Retour