Menu

Supprimer les doublons entre 2 fichiers EXCEL [Résolu/Fermé]

Messages postés
28
Date d'inscription
vendredi 23 septembre 2011
Statut
Membre
Dernière intervention
13 août 2015
- - Dernière réponse :  Mitch - 28 févr. 2012 à 16:48
Bonjour à tous,

J'ai une colle: comment supprimer d'un fichier EXCEL des lignes complètes en doublon avec un AUTRE fichier EXCEL?
Je vous explique: j'ai acheté un fichier de prospects qui comporte une colonne de n° de SIRET, mais je veux enlever de ce fichier les codes SIRET qui sont déjà clients chez nous... Comment je fais SVP ??? Help !!! J'ai essayé de copier les SIRET du fichier client dans le fichier prospect puis supprimé les doublons avec la fonction EXCEL 2007 mais il ne me vire pas les bonnes infos (impossible de voir quelles lignes ont été supprimées par ailleurs).
Y'a pas moyen de faire un tableau croisé dynamique entre 2 fichiers (ou 2 onglets)?

Merci pour votre aide!


Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
24069
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
15 juin 2019
4623
6
Merci
Bonjour
puisque vous avez copié vos N° dans un seule fichier:
dans le fichier à nettoyé, créer une colonne avec la formule:
=SI(NB.SI(champ N° autre feuille; cellule N° de la feuille)>0;1;0)
à tirer sur la hauteur du champ
qui vous renverra 1 à chaque fois qu'il y aura un doublon

Il suffira après de trier tout le champ selon cette colonne pour retrouver en fin de tableau toutes les lignes avec la valeur 1 et donc de les supprimer d'un coup.

Note:
1°)vous pouvez aussi utiliser cette formule en MFC pour formater les lignes détectées et les retirer une part une
2°) placer cette formule, en supposant que vous commencez sur ligne 2 et que la détection est en colonne Z:
=SI(NB.SI(champ N° autre feuille; cellule N° de la feuille)>0;0;MAX($Z$1:Z1)+1)
dans ce cas, ce sont les lignes avec 0 en début de tableau qui sont à supprimeret l'ordre est conservé en tri croissant sur la colonne Z

crdlmnt
Demandons nous si nous ne sommes pas seuls à comprendre ce que l'on explique?

Dire « Merci » 6

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42157 internautes nous ont dit merci ce mois-ci

Merci beaucoup ca fonctionne super bien et très rapidement
Messages postés
28
Date d'inscription
vendredi 23 septembre 2011
Statut
Membre
Dernière intervention
13 août 2015
0
Merci
Merci Vaucluse mais j'ai un message bâtard qui me dit que ma formule contient trop d'arguments pour cette fonction.
Voilà ce que j'ai tapé dans mon fichier comprenant TOUS les SIRETs (clients comme prospects):
=SI(NB.SI('[Fichier clients avec code siren.xlsx]Feuil1'!B2:B17591;C2>0;1;0)

Est-ce parce qu'il y a trop de ligne (17591)?
Je me suis planté dans ma formule ou j'ai bon?
Messages postés
15865
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
14 juin 2019
2743
0
Merci
Bonjour,

18000 lignes, diable!

cette macro compare 2 listes (colonnes A feuil1, feuil2) du m^me classeur
et restitue en feuil3 les éléments uniques sans doublon liste1, liste2, et les communs liste1-liste 2
Sub comparer() 
Dim derlig1 As Long, derlig2 As Long 
Dim tablo1, tablo2, tablo3 
Dim dico1 As Object, dico2 As Object, ref 
Dim nbre1 As Long, nbre2 As Long, liste1, liste2 
Dim cptr As Long, cptr1 As Long, cptr2 As Long, cptr3 As Long 

ReDim tablo1(0) 
ReDim tablo2(0) 
ReDim tablo3(0) 

'mémorise les reférences uniques dans feuilles 1 et 2 
With Sheets(1) 
    derlig1 = .Range("A65536").End(xlUp).Row 
    Set dico1 = CreateObject("Scripting.Dictionary") 
    For cptr = 2 To derlig1 
        ref = .Cells(cptr, 1) 
        If Not dico1.exists(ref) Then 
            dico1.Add ref, ref 
       End If 
    Next 
    nbre1 = dico1.Count - 1 
    liste1 = dico1.items 
End With 

With Sheets(2) 
    derlig2 = .Range("A65536").End(xlUp).Row 
     Set dico2 = CreateObject("Scripting.Dictionary") 
    For cptr = 2 To derlig1 
        ref = .Cells(cptr, 1) 
        If Not dico2.exists(ref) Then 
            dico2.Add ref, ref 
       End If 
    Next 
    nbre2 = dico2.Count - 1 
    liste2 = dico2.items 
End With 

'----- mémorise en variables-tableaux les éléments uniques de la feuille1 (tablo1) _ 
        et communs feuill1-feuill2 (tablo3) 
For cptr = 0 To nbre1 
    If Not dico2.exists(liste1(cptr)) Then 
            tablo1(cptr1) = liste1(cptr) 
            cptr1 = cptr1 + 1 
            ReDim Preserve tablo1(cptr1) 
    Else 
            tablo3(cptr3) = liste1(cptr) 
            cptr3 = cptr3 + 1 
            ReDim Preserve tablo3(cptr3) 
    End If 
Next 

'----- mémorise en variables-tableau les éléments uniques de la feuille2 (tablo2) 
For cptr = 0 To nbre2 
    If Not dico1.exists(liste2(cptr)) Then 
            tablo2(cptr2) = liste2(cptr) 
            cptr2 = cptr2 + 1 
            ReDim Preserve tablo2(cptr2) 
    End If 
Next 

'-----restitution en feuille 3 
Application.ScreenUpdating = False 
With Sheets(3) 
    .Range("A2:C65536").Clear 
    .Range("A2").Resize(UBound(tablo1) + 1, 1) = Application.Transpose(tablo1) 
    .Range("B2").Resize(UBound(tablo2) + 1, 1) = Application.Transpose(tablo2) 
    .Range("C2").Resize(UBound(tablo3) + 1, 1) = Application.Transpose(tablo3) 
    .Activate 
End With 
         
     

End Sub 


temps d'exécution pour 2 listes de 5000 éléments : >=0,5 sec (512 Mo RAM et proc mono 3Ghz)


Michel
Messages postés
24069
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
15 juin 2019
4623
0
Merci
La solution de Michel sera surement plus efficace et surtout plus rapide (bonsoir Michel) toutefois pour la forme, la formule est:
=SI(NB.SI('[Fichier clients avec code siren.xlsx]Feuil1'!B2:B17591;C2)>0;1;0)
avec une parenthèse derrière le C2 qui n'existe pas dans votre solution.
de plus il faut bloquer le champ de recherche avec des $pour qu'il n'évolue pas avec la copie de la formule:
=SI(NB.SI('[Fichier clients avec code siren.xlsx]Feuil1'!$B$2:$B$17591;C2>0);1;0)
si malgré la propostion de michel vous voulez tenter:
sélectionnez le champ complet de la colonne ou vous placez la formule en l'affichant dans la case à droite de la barre de formule:
par exemple, entrez dans cette case:
Z7:Z20000
tapez la formule correspondant à Z7 et entre là en maintenant la touche ctrl enfoncée, elle va se placer sur toute la colonne et s'ajuster en conséquence
crdlmn t
Ps utiliser plutôt ensuite un tri décroissant pour avoir les doublons en tête de liste

Demandons nous si nous ne sommes pas seuls à comprendre ce que l'on explique?
Messages postés
15865
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
14 juin 2019
2743
0
Merci
Bonjour Vaucluse

juste avant la soupe
tapez la formule correspondant à Z7 et entre là en maintenant la touche ctrl enfoncée, elle va se placer sur toute la colonne et s'ajuster en conséquence

une fois la formule tapée, on peut aussi double- cliquer sur le carré noir en bas et à droite de la cellule et ca descend toute seul

Bonne soirée

PS:ce n'est pas dit que ma macro soit plus rapide mais j'avais cette bidouille qui trainait dans mon grenier!...
Vaucluse
Messages postés
24069
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
15 juin 2019
4623 -
Exact michel pour ce qui concerne le remplissage automatique, mais j'hésite à le recommander car il ne fonctionne que s'il n'y a pas de cellule vide à coté de la colonne à remplir, sinon il s'arrête, ce qui peut prêter à confusion sur un grand nombre de ligne où ne voir pas forcément tout.
Quant à ton grenier, il doit être bien fourni vu tout ce que tu sors comme vieilleries sur le forum!
bon dimanche
0
Merci
Merci à tous, je teste et je vous dis quoi (hein Biloute).

Michel merci pour la macro mais comment ça se rentre dans Excel?? Je suis pas une star mais j'apprends vite ;)
Merci pour le retour!