VBA Excel suppression des doublons
Fermé
tito23
Messages postés
305
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
16 janvier 2013
-
Modifié par tito23 le 17/02/2011 à 17:20
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 - 19 févr. 2011 à 15:33
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 - 19 févr. 2011 à 15:33
A voir également:
- Supprimer les doublons vba
- Supprimer les doublons excel - Guide
- Supprimer une page word - Guide
- Supprimer compte instagram - Guide
- Supprimer les doublons photos gratuit - Télécharger - Nettoyage
- Doublons photos - Guide
5 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
17 févr. 2011 à 17:12
17 févr. 2011 à 17:12
Bonjour
idéalement supprimer toutes les cellules de la même ligne du doublon se trouvant sur la colonne 'E' jusqu'à la colonne 'E'.
Oui ????
idéalement supprimer toutes les cellules de la même ligne du doublon se trouvant sur la colonne 'E' jusqu'à la colonne 'E'.
Oui ????
tito23
Messages postés
305
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
16 janvier 2013
4
17 févr. 2011 à 18:03
17 févr. 2011 à 18:03
up :)
tito23
Messages postés
305
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
16 janvier 2013
4
18 févr. 2011 à 11:14
18 févr. 2011 à 11:14
Bonjour,
J'ai trouvé une solution.Mais très lourde vu que j'ai 600000 enregistrement dans mon fichier excel.
S'il y a une amélioration, je suis preneur (effectuer la suppression dans la première boucle)
Voici le code
J'ai trouvé une solution.Mais très lourde vu que j'ai 600000 enregistrement dans mon fichier excel.
S'il y a une amélioration, je suis preneur (effectuer la suppression dans la première boucle)
Voici le code
Sub Doublon() Dim Plage_E As Range Dim Plage_F As Range Dim PlageTempo As Range Dim Cel_E As Range Dim Cel_F As Range Dim I As Integer 'défini les plages Set Plage_E = Range([E1], [E65536].End(xlUp)) Set Plage_F = Range([F1], [F65536].End(xlUp)) For Each Cel_E In Plage_E 'recherche la valeur de chaque cellule de la colonne E dans 'la colonne F Set Cel_F = Plage_F.Find(Cel_E, , xlValues) 'si une occurence est trouvé dans la colonne F 'inscrit "Doublon" dans la cellule concernée de la colonne E If Not Cel_F Is Nothing Then Cel_E = "Doublon" End If Next Cel_E 'pour la suppression de cellules, il est préférable 'de parcourir la plage en partant de la fin For I = Plage_E.Count To 1 Step -1 'si la cellule Ex contient le mot "Doublon" 'les cellules de Ax à Ex sont supprimées If Plage_E(I) = "Doublon" Then Range(Plage_E(I).Offset(0, -4), Plage_E(I)).Delete xlUp End If Next I End Sub
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 18/02/2011 à 11:39
Modifié par michel_m le 18/02/2011 à 11:39
Ok je regarde en fin d'aprem
pour la suppression; un "clearcontents" ne suffirait il pas ?
Michel
pour la suppression; un "clearcontents" ne suffirait il pas ?
Michel
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 18/02/2011 à 12:49
Modifié par michel_m le 18/02/2011 à 12:49
Tout compte fait en guise d"apéro
temps pour 1000 lignes 0,12 sec
nota: je ne sais pas si la fonction de tri "sort" fonctionne pour 600000 lignes !!!!
sinon, essaies avec cette instruction
Michel
Sub supp_doublons() Dim Lig_E As Long, Lig_F As Long Dim Dico_F As Object, Cptr As Long Dim Ref 'a compléter Dim T_out, Cptr_t As Long Dim start As Single 'pour essai rapidité start = Timer 'essai 'mémorise colonne F Lig_F = Cells(Cells.Rows.Count, 6).End(xlUp).Row Set Dico_F = CreateObject("scripting.dictionary") For Cptr = 2 To Lig_F Ref = Cells(Cptr, 6) If Not Dico_F.exists(Ref) Then Dico_F.Add Ref, Ref End If Next 'mémorise lignes en doublon dans E Lig_E = Cells(Cells.Rows.Count, 5).End(xlUp).Row ReDim T_out(0) For Cptr = 2 To Lig_E ReDim Preserve T_out(Cptr_t) Ref = Cells(Cptr, 5) If Dico_F.exists(Ref) Then T_out(Cptr_t) = Cells(Cptr, 5).Row Cptr_t = Cptr_t + 1 End If Next 'supprime les valeurs en doublons colonne A à E Application.ScreenUpdating = False For Cptr = 0 To UBound(T_out) - 1 Range(Cells(T_out(Cptr), 1), Cells(T_out(Cptr), 5)).Clear Next ' supprime les cellules vides dans la colonne E et trie Range("E2:E" & Lig_E).Sort Range("E2") MsgBox Timer - start & " secondes" End Sub
temps pour 1000 lignes 0,12 sec
nota: je ne sais pas si la fonction de tri "sort" fonctionne pour 600000 lignes !!!!
sinon, essaies avec cette instruction
Range("E2:E" & Lig_E).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp au lieu de Range("E2:E" & Lig_E).Sort Range("E2")
Michel
tito23
Messages postés
305
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
16 janvier 2013
4
18 févr. 2011 à 18:59
18 févr. 2011 à 18:59
Merci pour le code, mon code tourne depuis 4 heures et je sais pas quand est ce que ça va s'arrêter, l'excel ne répond plus, est ce que à cause de mon code ou bien excel s'est bloqué?
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
18 févr. 2011 à 20:20
18 févr. 2011 à 20:20
Bonsoir tout le monde,
Tu peux arreter la macro par ctrl+pause pour voir si elle tourne, et la faire continuer ou l'arreter définitivement
eric
Tu peux arreter la macro par ctrl+pause pour voir si elle tourne, et la faire continuer ou l'arreter définitivement
eric
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
19 févr. 2011 à 09:04
19 févr. 2011 à 09:04
Bonjour à tous,
Ton code ou le mien?
Je viens de ré-essayer: pas de problème avec 1000 lignes
petite remarque: Avec Excel, Microsoft déconseille des listes de données de plus de 15000 lignes et préconise dans ce cas l'emploi d'Access...
Ton code ou le mien?
Je viens de ré-essayer: pas de problème avec 1000 lignes
petite remarque: Avec Excel, Microsoft déconseille des listes de données de plus de 15000 lignes et préconise dans ce cas l'emploi d'Access...
tito23
Messages postés
305
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
16 janvier 2013
4
19 févr. 2011 à 13:52
19 févr. 2011 à 13:52
Bonjour,
Mon code, je l'ai laissé en exécution depuis hier dans le travail.
Y' a t'il une méthode d'exporter mes données vers Access?
Mon code, je l'ai laissé en exécution depuis hier dans le travail.
Y' a t'il une méthode d'exporter mes données vers Access?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
19 févr. 2011 à 13:55
19 févr. 2011 à 13:55
Peut ^tre pourrais tu essayer le mien? j'ai l'impression que tu te fous complètement du temps que j'ai passé à essayer de t'aider...
17 févr. 2011 à 17:18