[macros] suppression doublon et comparaison

yoann7

XLDnaute Nouveau
Bonjour à tous, je suis nouveau sur ce forum, je me présenterais un peu plus tard.

J'ai besoin d'aide pour deux macros, la première servirais a supprimer les doublons dans une feuille en testant sur trois critère la si par exemple C7=C6 F7=F6 et V6=3.00 alors supprimer la ligne 6. Pour le moment je leur affecte une valeur faux ou vrai et je filtre sur vrai pour avoir les bonnes lignes, mais j'ai besoin d'alleger mon classeur qui fait plus de 31000 lignes.

Ensuite il faut que je fasse une macro qui va comparer ce la feuille de ce classeur avec une archive, la macro doit comparer les lignes et quand la valeur en cellule E et en cellule F sont egales et que la cellule S à changé alors il faut recopié la ligne dans une feuille modif.
Voilà j'espère que c'est clair, sinon et bien je peux répondre aux questions !
J'espère que vous pouvez m'aider...

Merci et bonne journée
 

yoann7

XLDnaute Nouveau
Re : [macros] suppression doublon et comparaison

Je viens de trouver la solution pour supprimé les doublons et je viens de voir ton message, alors pour les doublons j'ai fait ça

Sub Suppr_doublon()
Dim i As Integer
Sheets("edition OA").Select
For i = 1 To Range("Y65536").End(xlUp).Row
If Cells(i, 26).Value = "Faux" Then
Cells(i, 6).EntireRow.Delete
i = i - 1
End If
Next i
End Sub

Apparement c'est ok.
Maintenant je vais chercher pour comparer les classeurs, je suis toujours ouvert à l'aide qui peut m'être apporté ;-)
 

Staple1600

XLDnaute Barbatruc
Re : [macros] suppression doublon et comparaison

Bonjour


L'enregistreur de macros à des idées lui
(On avance doucement)
Code:
Sub Macro3()
Range("C1:V33").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("A36:C37"), Unique:=True
Selection.Copy Sheets("Feuil3").[A1]
End Sub
En persévérant (et après lecture des différentes réponses de BOISGONTIER dans d'autres fils - )
Code:
Sub Macro5()
'copie les doublons dans une autre feuille  (ici la Feuil2)
Range(Cells(1, 3), Cells(65536, 22).End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy Sheets("Feuil2").[A1]
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [macros] suppression doublon et comparaison

Re


Une solution "trés pro" ( pas de moi !)
Code:
Sub Test()
Sheets("Feuil1").Activate ' mettre ici le nom de la feuille à traitée
MsgBox "Résultats: " & _
DeleteDuplicatesViaFilter(Intersect(Range("C:V"), Range("C1").CurrentRegion)) & "lignes ont été supprimées"
End Sub
DeleteDuplicatesViaFilter: se trouve ici: source

Donc tu copies ce code VBA (trés joli) dans un module:

Et tu testes la macro Test (en adaptant le nom des feuilles

(et en travaillant sur une copie de ton fichier, c'est plus prudent ;) )


A+
 
Dernière édition:

bellzigor

XLDnaute Nouveau
Re : [macros] suppression doublon et comparaison

Hello,

J'ai perso souvent du mal à avoir des résultats efficaces sous excel pour enlever les doublons, le mieux est d'exporter ta table sur access, mais après faut savoir comme ça fonctionne. Dsl c con comme réponse car nous sommes sur un forum excel, mais c efficace quand mm.
 

yoann7

XLDnaute Nouveau
Re : [macros] suppression doublon et comparaison

Merci beaucoup pour vos réponses ! Je testerais la macro pour comparer dans l'aprem si j'ai le temps, sinon pour les doublons ma macro marche nikel ;-)
Merci beaucoup et bonne journée !
 

Bisson

XLDnaute Nouveau
Re : [macros] suppression doublon et comparaison

Bonjour,

Suppression de doublons rapide (1sec pour 10.000 lignes et 80% suppression):

Sub SupRapide1CritereColonneA()
t = Timer()
Application.ScreenUpdating = False
[A1].Sort Key1:=Range("A2"), Order1:=xlAscending, _
Header:=xlGuess
Columns("b:b").Insert Shift:=xlToRight
[B1] = "ColB"
[B2].FormulaR1C1 = "=IF(RC[-1]=R[-1]C[-1],1,0)"
[B2].AutoFill Destination:=Range("B2:B" & [A65000].End(xlUp).Row)
[B:B].Value = [B:B].Value
[A2].CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess
[B:B].Replace What:="1", Replacement:="", LookAt:=xlPart
Range("B2:B65000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Columns("b:b").Delete Shift:=xlToLeft
MsgBox Timer() - t
End Sub

Sub SupRapide2CriteresColAetB()
t = Timer()
Application.ScreenUpdating = False
[A1].Sort Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("B2"), Order2:=xlAscending, _
Header:=xlGuess
Columns("b:b").Insert Shift:=xlToRight
[B1] = "ColB"
'[B2].FormulaR1C1 = "=IF(RC[-1]=R[-1]C[-1],1,0)"
[B2].FormulaR1C1 = "=IF(AND(RC[-1]=R[-1]C[-1],RC[+1]=R[-1]C[+1]),1,0)"
[B2].AutoFill Destination:=Range("B2:B" & [A65000].End(xlUp).Row)
[B:B].Value = [B:B].Value
[A2].CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess
[B:B].Replace What:="1", Replacement:="", LookAt:=xlPart
Range("B2:B65000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Columns("b:b").Delete Shift:=xlToLeft
MsgBox Timer() - t
End Sub

Bisson
 

yoann7

XLDnaute Nouveau
Re : [macros] suppression doublon et comparaison

Bon ben je vais avoir quand même besoin pour supprimer les doublons! Mon ancienne méthode enlève des trucs qu'il ne faut pas.
Bisson tu pourrais m'expliquer un peu plus tes macros pour que je les comprenne.
Merci
 

Bisson

XLDnaute Nouveau
Re : [macros] suppression doublon et comparaison

Bonjour,

-Une formule =SI(A2=A1;1;0) permet de marquer les doublons avec 1
-On tri (tous les 1 sont à la fin)
-On remplace les 1 par vide
-On sélectionne tous les vides
-On supprime la sélection

La suppression est très rapide parce que tous les enreg à supprimer sont groupés.

Bisson
 

Pièces jointes

  • SupDoublonsRapideR2.xls
    33.5 KB · Affichages: 84
  • SupDoublonsRapideR2.xls
    33.5 KB · Affichages: 87
  • SupDoublonsRapideR2.xls
    33.5 KB · Affichages: 87

Bisson

XLDnaute Nouveau
Re : [macros] suppression doublon et comparaison

Sub SupRapide3Criteres()
t = Timer()
Application.ScreenUpdating = False
[A1].Sort Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("B2"), Order2:=xlAscending, _
Key3:=Range("C2"), Order3:=xlAscending, _
Header:=xlGuess
Columns("b:b").Insert Shift:=xlToRight
[B1] = "ColB"
[B2].FormulaR1C1 = "=IF(AND(RC[-1]=R[-1]C[-1],RC[+1]=R[-1]C[+1],RC[+2]=R[-1]C[+2]),1,0)"
[B2].AutoFill Destination:=Range("B2:B" & [A65000].End(xlUp).Row)
[B:B].Value = [B:B].Value
[A2].CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess
[B:B].Replace What:="1", Replacement:="", LookAt:=xlPart
Range("B2:B65000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Columns("b:b").Delete Shift:=xlToLeft
MsgBox Timer() - t
End Sub

Bisson
 

Pièces jointes

  • SupDoublonsRapideR2.xls
    44 KB · Affichages: 73
  • SupDoublonsRapideR2.xls
    44 KB · Affichages: 81
  • SupDoublonsRapideR2.xls
    44 KB · Affichages: 80

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 861
Membres
103 979
dernier inscrit
imed