comparaision entre les lignes

raniou010

XLDnaute Nouveau
Bonjour , avant de demander de l'aide, j'ai épluché tous les messages détaillant les comparaisons des feuilles excel. malheureusement, je n'ai pas trouvé ma solution .Svp quelqu’un peux m’aider ? J’ai un tableau excel de AM colonnes , je veux bien comparer les lignes avec la condition sile trio colonnes A , E et AM se répètent ensemble , alors la ligne entière sera copié dans une autre feuille ou bien coloré dans la même page

Exemple
(A) 12/01/2016 (B) ….. (c) ……(D) ……(E) azerty (F……AL) (AM) A

(A)13/01/2016 (B) ….. (c) ……(D) ……(E) azerty (F……AL) (AM) D

(A) 12/01/2016 (B) ….. (c) ……(D) ……(E) azerty (F……AL) (AM) A

A) 12/01/2016 (B) ….. (c) ……(D) ……(E) wxcvb (F……AL) (AM) A

Alors les lignes qui m’intéresse sont la première et la 3eme
merci
 

Jocelyn

XLDnaute Barbatruc
re,
Bonjour yeti_yeti,

Alors désolé je passe la main je suis une bille a ce jeu la

juste a titre d'info lorsque tu fais une demande songe a préciser si c'est du VBA et essai de joindre un fichier exemple anonymisé

Cordialement
 

yeti_yeti

XLDnaute Junior
Bonjour raniou010,

Avec une macro cela prendra beaucoup de temps car celle-ci devra contrôler chaque ligne une à une.
Mettons que vous avec un tableau de 10 lignes cela demande à la macro de faire 100 contrôles.
Vu le nombre de colonne que vous avez, je doute que votre fichier ne fasse que 10 lignes...

Cordialement
 

raniou010

XLDnaute Nouveau
Bonjour raniou010,

Avec une macro cela prendra beaucoup de temps car celle-ci devra contrôler chaque ligne une à une.
Mettons que vous avec un tableau de 10 lignes cela demande à la macro de faire 100 contrôles.
Vu le nombre de colonne que vous avez, je doute que votre fichier ne fasse que 10 lignes...

Cordialement
exactement mon fichier a 100 000 lignes :oops: et ca marche pas avec la mise en orme conditionnelle malheureusement
 

raniou010

XLDnaute Nouveau
re,
Bonjour yeti_yeti,

Alors désolé je passe la main je suis une bille a ce jeu la

juste a titre d'info lorsque tu fais une demande songe a préciser si c'est du VBA et essai de joindre un fichier exemple anonymisé

Cordialement
je m'excuse et merci pour ton aide , j'ai cru que j'ai mis macro , en plus il me faut une macro car je vais faire ce test pour plusieurs fichiers et je vais appliquer après d'autres macro
 

yeti_yeti

XLDnaute Junior
Bonjour raniou010,

100'000 lignes ça fait 10'000'000'000 de va et viens pour la macro pour trouver les dupliqués. Et même le formatage conditionnel sera conséquent mais ça reste la fonction la plus sûre.

Pour que cela fonctionne:
  1. Sélectionnez tout votre tableau
  2. Allez dans Formatage Conditionnel et sélectionnez "nouvelle règle"
  3. Sélectionnez la dernière option (utiliser une formule)
  4. Tapez la formule ci-dessous
  5. Cliquez sur Formater pour choisir comment mettre les lignes en évidences
  6. Cliquez sur OK
Code:
=SOMME.SI.ENS($A:$A;$A1;$E:$E;$E1;$AM:$AM;$AM1)>1

Si vous tenez absolument à passer par une macro (ce que je déconseille vivement car la requête prendra un temps fou, voici une idée de code. A adapter dans la partie "Déclaration constantes" pour que cela fonctionne sur votre fichier

Code:
Option Explicit

Sub Duplicates()
Dim ws As Worksheet, s As Integer, c1 As Integer, c2 As Integer, c3 As Integer, c As String 'Constantes
Dim i As Integer, ni As Integer, e As Integer, SearchID As String, MatchID As String 'Variables

'Déclaration constantes
Set ws = ThisWorkbook.Sheets("Sheet1") 'Nom de la feuille où se trouve le tableau
s = 1 'Première ligne du tableau
c = "A" 'Première colonne du tableau
c1 = 1 'Colonne A
c2 = 5 'Colonne E
c3 = 39 'Colonne AM

'Déclarations variables
e = ws.Cells(ws.Rows.Count, c).End(xlUp).Row 'Dernière ligne du tableau

'###############
'# DEBUT MACRO #
'###############

    For i = s To e
    SearchID = ws.Cells(i, c1).Value & ws.Cells(i, c2).Value & ws.Cells(i, c3).Value
        For ni = s To e
            If i <> ni Then
                MatchID = ws.Cells(ni, c1).Value & ws.Cells(ni, c2).Value & ws.Cells(ni, c3).Value
                If SearchID = MatchID Then
                    With Rows(ni).Interior
                        .Pattern = xlSolid
                        .PatternColorIndex = xlAutomatic
                        .Color = 65535
                        .TintAndShade = 0
                        .PatternTintAndShade = 0
                    End With
                End If
            End If
        Next ni
    Next i
End Sub

Cordialement
 

raniou010

XLDnaute Nouveau
Bonjour raniou010,

100'000 lignes ça fait 10'000'000'000 de va et viens pour la macro pour trouver les dupliqués. Et même le formatage conditionnel sera conséquent mais ça reste la fonction la plus sûre.

Pour que cela fonctionne:
  1. Sélectionnez tout votre tableau
  2. Allez dans Formatage Conditionnel et sélectionnez "nouvelle règle"
  3. Sélectionnez la dernière option (utiliser une formule)
  4. Tapez la formule ci-dessous
  5. Cliquez sur Formater pour choisir comment mettre les lignes en évidences
  6. Cliquez sur OK
Code:
=SOMME.SI.ENS($A:$A;$A1;$E:$E;$E1;$AM:$AM;$AM1)>1

Si vous tenez absolument à passer par une macro (ce que je déconseille vivement car la requête prendra un temps fou, voici une idée de code. A adapter dans la partie "Déclaration constantes" pour que cela fonctionne sur votre fichier

Code:
Option Explicit

Sub Duplicates()
Dim ws As Worksheet, s As Integer, c1 As Integer, c2 As Integer, c3 As Integer, c As String 'Constantes
Dim i As Integer, ni As Integer, e As Integer, SearchID As String, MatchID As String 'Variables

'Déclaration constantes
Set ws = ThisWorkbook.Sheets("Sheet1") 'Nom de la feuille où se trouve le tableau
s = 1 'Première ligne du tableau
c = "A" 'Première colonne du tableau
c1 = 1 'Colonne A
c2 = 5 'Colonne E
c3 = 39 'Colonne AM

'Déclarations variables
e = ws.Cells(ws.Rows.Count, c).End(xlUp).Row 'Dernière ligne du tableau

'###############
'# DEBUT MACRO #
'###############

    For i = s To e
    SearchID = ws.Cells(i, c1).Value & ws.Cells(i, c2).Value & ws.Cells(i, c3).Value
        For ni = s To e
            If i <> ni Then
                MatchID = ws.Cells(ni, c1).Value & ws.Cells(ni, c2).Value & ws.Cells(ni, c3).Value
                If SearchID = MatchID Then
                    With Rows(ni).Interior
                        .Pattern = xlSolid
                        .PatternColorIndex = xlAutomatic
                        .Color = 65535
                        .TintAndShade = 0
                        .PatternTintAndShade = 0
                    End With
                End If
            End If
        Next ni
    Next i
End Sub

Cordialement
 

raniou010

XLDnaute Nouveau
je vous remercie , le probleme que j'ai eu les résultats avec la meth de mise en forme mais pour filtrer et voirs juste le nombre de lignes doublons ou dupliqués , excel se bloque , j'ai redémarrer le pc et j'ai tenter une autre fois , même chose excel se plante et même pour l'enregistrement je peu pas enregistrer mon tableau dans mon dossier , il s'enregistre automatiquement dans Microsoft , j'ai fait une copie de tableau dans un autre classeur vide ! meme trucs !!!!!
 

raniou010

XLDnaute Nouveau
Bonjour raniou010,

100'000 lignes ça fait 10'000'000'000 de va et viens pour la macro pour trouver les dupliqués. Et même le formatage conditionnel sera conséquent mais ça reste la fonction la plus sûre.

Pour que cela fonctionne:
  1. Sélectionnez tout votre tableau
  2. Allez dans Formatage Conditionnel et sélectionnez "nouvelle règle"
  3. Sélectionnez la dernière option (utiliser une formule)
  4. Tapez la formule ci-dessous
  5. Cliquez sur Formater pour choisir comment mettre les lignes en évidences
  6. Cliquez sur OK
Code:
=SOMME.SI.ENS($A:$A;$A1;$E:$E;$E1;$AM:$AM;$AM1)>1

Si vous tenez absolument à passer par une macro (ce que je déconseille vivement car la requête prendra un temps fou, voici une idée de code. A adapter dans la partie "Déclaration constantes" pour que cela fonctionne sur votre fichier

Code:
Option Explicit

Sub Duplicates()
Dim ws As Worksheet, s As Integer, c1 As Integer, c2 As Integer, c3 As Integer, c As String 'Constantes
Dim i As Integer, ni As Integer, e As Integer, SearchID As String, MatchID As String 'Variables

'Déclaration constantes
Set ws = ThisWorkbook.Sheets("Sheet1") 'Nom de la feuille où se trouve le tableau
s = 1 'Première ligne du tableau
c = "A" 'Première colonne du tableau
c1 = 1 'Colonne A
c2 = 5 'Colonne E
c3 = 39 'Colonne AM

'Déclarations variables
e = ws.Cells(ws.Rows.Count, c).End(xlUp).Row 'Dernière ligne du tableau

'###############
'# DEBUT MACRO #
'###############

    For i = s To e
    SearchID = ws.Cells(i, c1).Value & ws.Cells(i, c2).Value & ws.Cells(i, c3).Value
        For ni = s To e
            If i <> ni Then
                MatchID = ws.Cells(ni, c1).Value & ws.Cells(ni, c2).Value & ws.Cells(ni, c3).Value
                If SearchID = MatchID Then
                    With Rows(ni).Interior
                        .Pattern = xlSolid
                        .PatternColorIndex = xlAutomatic
                        .Color = 65535
                        .TintAndShade = 0
                        .PatternTintAndShade = 0
                    End With
                End If
            End If
        Next ni
    Next i
End Sub

Cordialement
pour la macro deja elle se bloque dés le debut !
 

yeti_yeti

XLDnaute Junior
pour la macro deja elle se bloque dés le debut !

Pas étonnant, la requête est trop importante...

je vous remercie , le probleme que j'ai eu les résultats avec la meth de mise en forme mais pour filtrer et voirs juste le nombre de lignes doublons ou dupliqués , excel se bloque , j'ai redémarrer le pc et j'ai tenter une autre fois , même chose excel se plante et même pour l'enregistrement je peu pas enregistrer mon tableau dans mon dossier , il s'enregistre automatiquement dans Microsoft , j'ai fait une copie de tableau dans un autre classeur vide ! meme trucs !!!!!

Donc la mise en forme fonctionne mais c'est au moment où vous filtrer que tout plante? On pourrait là créer une macro pour copier uniquement les lignes dubliquées dans une autre feuille et la macro ne ferait "que" 100'000 contrôles
 

yeti_yeti

XLDnaute Junior
oui , mais je veux savoir , dans le cas ou il y a pas que une ligne qui se répète 2 fois , mais 3 ou 4 fois , elle colore une seule ligne ou plus ?

La mise en forme conditionnelle colore toutes les lignes qui sont identiques aux critères que vous avez mentionné dans votre premier message. Donc si vous avez la même chose à la ligne 1, 3 et 18... les lignes 1, 3 et 18 seront coloriées

Pour la macro qui copie les lignes coloriées, voici ce que je vous propose. Comme toujours, à adapter la "Déclaration constantes" à votre fichier

Code:
Option Explicit

Sub CopyDuplicates()
Dim mycolor As Long, ws1 As Worksheet, ws2 As Worksheet 'Constantes
Dim i As Integer, p As Integer, e As Integer, s As Integer, c As Integer 'Variables

'Déclaration constantes
mycolor = 65535 'Code couleur à chercher (ici jaune)
With ThisWorkbook
    Set ws1 = .Sheets("Sheet1") 'Nom feuille 100'000 lignes
    Set ws2 = .Sheets("Sheet2") ' Nom feuille où copier
End With

'Déclaration variables
c = ws1.UsedRange.Column
s = ws1.UsedRange.Row
e = ws1.Cells(ws1.Rows.Count, c).End(xlUp).Row 'Dernière ligne du tableau
p = ws2.Cells(ws2.Rows.Count, c).End(xlUp).Row + 1 'Première ligne vide du tableau

'###############
'# DEBUT MACRO #
'###############
    For i = s To e
        If ws1.Cells(i, 1).Interior.Color = mycolor Then
            ws1.Cells(i, 1).EntireRow.Copy Destination:=ws2.Rows(p)
            p = p + 1
        End If
    Next i
   
End Sub
 

Discussions similaires

Réponses
0
Affichages
214
Réponses
22
Affichages
758

Statistiques des forums

Discussions
312 182
Messages
2 086 001
Membres
103 084
dernier inscrit
Hervé30120