Détecter 2 lignes identiques

  • Initiateur de la discussion chris
  • Date de début
C

chris

Guest
Salut à tous,

J'ai un tableau de 5 colonnes et 600 lignes.

Il arrive que deux lignes (pas forcement l'une sous l'autre) contiennent les memes valeurs :

exemple :

A B C D E
1 xxx0 YYY0 blablabla0 tructructruc0 chosechose0
2 xxx1 YYY1 blablabla1 tructructruc1 chosechose1
3 xxx2 YYY2 blablabla2 tructructruc2 chosechose2
4 xxx0 YYY0 blablabla0 tructructruc0 chosechose0
5 xxx4 YYY4 blablabla4 tructructruc4 chosechose4

Dans ce cas les lignes 1 et 4 contiennent la même chose.

Comment faire uen macro capable de détecter ces 2 lignes identiques et de les mettres par exemple en couleur ?
 
A

andré

Guest
Salut chris,

En F1 : =A1&B1&C1&D1&E1
formule à copier jusqu'en F5

Puis sélectionner F1:F5 et Menu Format / Mise en forme conditionnelle / la formule est : =NB.SI(F$1:F$5);A1)>1 / Format / Motif / la couleur que tu veux / OK / OK.

Il y a peut-être moyen de trouver une formule n'obligeant pas de créer une colonne supplémentaire, mais jusqu'à présent je ne l'ai pas encore trouvée.

Ândré.
 
A

andré

Guest
Petite erreur que tu aurais certainement corrigée de par toi-même :

Puis sélectionner A1:E5 et Menu Format / Mise en forme conditionnelle / la formule est : =NB.SI($F$1:$F$5);$F1)>1 / Format / Motif / la couleur que tu veux / OK / OK.

Ândré.
 
M

Monique

Guest
Bonjour,

Avec une mise en forme conditionnelle directe, sans colonne supplémentaire.
Sélectionner les cellules à partir de A2 jusqu'à E10 ou E600 ou E autre chose
Barre de menu - Format - Mise en forme conditionnelle
Choisir "La formule est" et taper :
=SOMMEPROD(($A2&$B2&$C2&$D2&$E2=A$1:$A1&B$1:$B1&C$1:$C1&D$1:$D1&E$1:$E1)*1)>0
puis choisir couleur, etc.
 
M

Monique

Guest
Re,

On peut remplacer SommeProd(()) par Somme(())
=SOMME(($A2&$B2&$C2&$D2&$E2=A$1:$A1&B$1:$B1&C$1:$C1&D$1:$D1&E$1:$E1)*1)>0
La mise en forme conditionnelle accepte des formules qui seraient à valider de façon matricielle dans une cellule.
 
M

michel

Guest
Bonsoir André, Chris, Monique et @+Thierry

ci joint une autre version ...mais pas plus simple ...;o(


bonne soiree
michel
 

Pièces jointes

  • DoublonsLignesCompletes.zip
    10.4 KB · Affichages: 713
  • DoublonsLignesCompletes.zip
    10.4 KB · Affichages: 585
  • DoublonsLignesCompletes.zip
    10.4 KB · Affichages: 658
C

chris

Guest
Celle de Thierry fonctionnait très bien mais mon niveau actuel ne me permettait pas de l'adapter à mon fichier déjà bourré de macros.

Cette dernière maquette de Michel est plus "conventionnelle" pour moi...

Merci encore à tous et bravo à ce forum !!!
 
@

@+Thierry

Guest
Bonjour Chris, Michel, Ândré, Monique, le Forum

Sorry Chris de ma réactivité à contre-coup, je n'avais pas vu ta demande, mais "Le_Lapin_ Bleu_Qui_Saute_Partout" a déjà frappé !! lol

Bon Aprèm
@+Thierry
 
C

chris

Guest
Bon j'ai réussi à l'intégrer à mon classeur, mais il y a unepartie que je n'arrive pas à comprendre :

' remplissage tableau valeurs uniques si pas de doublon détecté
If Tableau(M - 1) = "" And U = False Then
Tableau(M - 1) = Cible
M = M + 1
ReDim Preserve Tableau(M)
End If
Next Cell

je vois pas à quoi ça sert ça ....

Pour le reste, ça marche impec !!!!
 
M

michel

Guest
bonsoir Chris

Dans la boucle For Each Cell... ,
la comparaison entre la ligne concaténée (Cible ) et les données contenues dans Tableau() permet de verifier si la ligne est un doublon ou pas :
If Cible = Tableau(i - 1) Then...

Si la valeur "Cible" est trouvée dans Tableau() , il s'agit d'un doublon
dans ce cas le numero de la ligne alimente Tableau2() :
Tableau2(N - 1) = Cell.Row

dans le cas contraire , si la valeur "Cible" n'est pas été trouvée , cette donnée va alimenter le Tableau() :
If Tableau(M - 1) = "" And U = False Then
Tableau(M - 1) = Cible
M = M + 1
ReDim Preserve Tableau(M)
End If


En fin de procedure , toutes les lignes (doublons ) dont le numero est contenu dans Tableau2() sont supprimees
For i = N - 1 To 1 Step -1
Rows(Tableau2(i - 1)).Delete
Next i


bonne soiree
michel
 
T

Tinet

Guest
Pour Michel
Salut
J'ai récuperé ta macro "DoublonsLignesCompletes.zip" qui fonctionne sur un petit tableau.
Je récupère une table qui possède que 10 colonnes mais 40 000 lignes !
Lorsque je lance, la macro s'arrète en erreur "dépassement de capacité" sur la ligne M=M+1 en "remplissage tableau valeur unique.....".
Comment corriger ce problème ?
Ci-joint un des fichiers que j'ai a traiter (moins de colonnes et moins de lignes), mais plantage.
Merci
 

Pièces jointes

  • Fichier_Doublons.zip
    0 bytes · Affichages: 228
M

michel

Guest
bonjour Tinet

pour un tableau de 40000 lignes tu dois adapter les variables
( avec une variable "Integer" tu es limité à 32767 lignes )

tu peux essayer :

Dim Cell As Range
Dim Ligne As Double, i As Double, M As Double, N As Double
Dim j As Byte
Dim Tableau(), Tableau2()
Dim Cible As String, Resultat As String
Dim U As Boolean

je n'ai pas mesuré le temps de traitement pour 40000 lignes mais il est possible que ce soit un peu long et cette macro ne sera peut etre pas adaptée à ton projet...à tester


bonne journee
MichelXld
 

Discussions similaires

Statistiques des forums

Discussions
312 395
Messages
2 088 031
Membres
103 705
dernier inscrit
mytek