Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Supprimer si identique dans autre plage

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

KTM

XLDnaute Impliqué
Bonjour cher tous
J'ai deux plages p1 =.[B1:E1000000] et p2 =.[H1:L10000]
Je voudrais supprimer les enregistrements dans p1 pour lesquelles le code est identique dans p2.
Merci
 

Pièces jointes

Merci Daniel
ENORMEMENT!!!
 
Bonjour KTM, danielco, mapomme, le forum,
A part ajouter une colonne temporaire, je ne sais pas conserver l'ordre initial des lignes lors du tri, du-moins je n'ai pas trouvé.
Avec la macro précédente le tableau est trié sur la colonne B, ça ne me paraît pas gênant.

Maintenant si vous voulez conserver l'ordre initial prenez ce fichier (2) et la macro :
VB:
Sub Supprimer()
Dim t#, d As Object, tablo, i&, x$, P As Range, resu(), n&
t = Timer
Set d = CreateObject("Scripting.Dictionary")
With Feuil1 'CodeName à adapter
    '---liste sans doublon---
    tablo = .[H2:H10000] 'matrice, plus rapide
    For i = 1 To UBound(tablo)
        x = tablo(i, 1)
        If x <> "" Then d(x) = ""
    Next
    '---repérage des lignes à conserver---
    Set P = .[B2:E1000000] '999 999 lignes...
    tablo = P.Columns(1) 'matrice, plus rapide
    ReDim resu(1 To UBound(tablo), 1 To 1)
    For i = 1 To UBound(tablo)
        x = tablo(i, 1)
        If x <> "" Then If d.Exists(x) Then n = n + 1 Else resu(i, 1) = 1 'repère
    Next
    '---restitution, tri et suppression---
    Application.ScreenUpdating = False
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    P.Columns(2).EntireColumn.Insert 'colonne auxiliaire
    P.Columns(2) = resu
    P.Sort P(1, 2), Header:=xlNo 'tri pour regrouper les 1 et accélérer
    On Error Resume Next 'si aucune SpecialCell
    Intersect(P.Columns(2).SpecialCells(xlCellTypeBlanks).EntireRow, P).Delete xlUp 'supprime les cellules vides
    P.Columns(2).EntireColumn.Delete 'supprime la colonne auxiliire
    With .UsedRange: End With 'actualise les barres de défilement
End With
MsgBox n & " ligne" & IIf(n > 1, "s", "") & " supprimée" & IIf(n > 1, "s", "") & " en " & Format(Timer - t, "0.00 \sec")
End Sub
On utilise une colonne auxiliaire, ça prend un peu plus de temps : 2,9 secondes.

A+
 

Pièces jointes

Clap, clap. Je me coucherai moins bête ce soir (l'utilisation du dictionnaire).

Daniel
 
Merci Job 75
 
- 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

Discussions similaires

Réponses
17
Affichages
564
Réponses
2
Affichages
333
Réponses
2
Affichages
282
Réponses
1
Affichages
337
Réponses
10
Affichages
271
Réponses
8
Affichages
621
Réponses
3
Affichages
961
Réponses
30
Affichages
555
Réponses
7
Affichages
316
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…