Salut,

Voila, j'ai un tableau excel de 600 lignes environ (valeur qui change en fonction du remplissage) avec d'une part, une référence dans la colonne A et un indice dans la colonne B.
L'idée étant de supprimer les doublons avec la même référence et le même indice.

Je galère un peu car une fois la référence trouvée, il faut chercher l'indice et si c'est le même, le supprimer. Deuxième problématique, il peut y avoir dans le tableau 5/6 références identiques avec des indices identiques ou pas.

Ma macro fonctionne partiellement : elle supprime les doublons (même ref et meme indice) mais par pour tous. Ou alors, elle boucle en permanence sans sortir.

Si vous avez des idées de modif,

Les définitions de variables :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
'Ligne de début et fin du tableau
LigneDebut = Sheets(OngletAccord).Range(CodAccord & lideb).Row
LigneFin = Sheets(OngletAccord).Range(CodAccord & "65536").End(xlUp).Row
Les constantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
Option Explicit
Option Base 1
 
Public LigneDebut As Long, LigneFin As Long, i As Long
 
Const CodAccord = "A"   ' colonne Numero Accord
Const CodInd = "B"   ' colonne indice
Const lideb = 3     ' premiere ligne des données
Const OngletAccord = "Accords"
La macro :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
Sub RetireDoublons(LigneDebut As Long, LigneFin As Long)
'Définit la plage de cellules pour la recherche de doublons
 
Dim Valeur_Cherchee As String
Dim obj As Object, plage As Range, AdresseTrouvee As String
Dim LigneRecherche As Long, p As Long
Dim Indice_Objet_Encours As Integer, Indice_Objet_Trouve As Integer
 
' boucle sur les lignes en partant de la dernière (à cause des suppressions eventuelles de lignes)
For p = LigneFin To LigneDebut Step -1
 
    ' plage où on va rechercher
    Set plage = Worksheets(OngletAccord).Range(CodAccord & lideb, CodAccord & p - 1)
 
        ' Accord et Indice ligne i
        Valeur_Cherchee = Range(CodAccord & p).Value
        LigneRecherche = Range(CodAccord & p).Row
 
        ' recherche Accord dans plage
        Set obj = plage.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
 
        ' si Accord est trouvé
        If Not obj Is Nothing And Valeur_Cherchee <> "" And p <> lideb Then
 
            AdresseTrouvee = obj.Row
 
            'Vérification de l'indice
            'indice de l'objet trouvé et objet en cours
            Indice_Objet_Encours = Range(CodAccord & p).Offset(0, 1).Value
            Indice_Objet_Trouve = obj.Offset(0, 1).Value
 
            If Indice_Objet_Encours = Indice_Objet_Trouve Then
                MsgBox "L'accord " & Valeur_Cherchee & " indice " & Indice_Objet_Encours & " existe déjà à la ligne " _
                & AdresseTrouvee & "." & Chr(10) & Chr(10) & "Il va être supprimé."
 
                Application.EnableEvents = True
                Sheets(OngletAccord).EnableSelection = xlUnlockedCells
                Sheets(OngletAccord).Protect Contents:=True, UserInterfaceOnly:=True
 
                Rows(p).Delete 'Efface la ligne en doublon
            Else
                Do 'Faire la boucle tant qu'il existe des doublons sur les numéros d'accord
                    Set obj = plage.Cells.FindNext(obj) 'Recherche du suivant
 
                    AdresseTrouvee = obj.Row
 
                    'Vérification de l'indice
                    'indice de l'objet trouvé et objet en cours
                    Indice_Objet_Encours = Range(CodAccord & p).Offset(0, 1).Value
                    Indice_Objet_Trouve = obj.Offset(0, 1).Value
 
                    If Indice_Objet_Encours = Indice_Objet_Trouve Then
                        MsgBox "L'accord " & Valeur_Cherchee & " indice " & Indice_Objet_Encours & " existe déjà à la ligne " _
                        & AdresseTrouvee & "." & Chr(10) & Chr(10) & "Il va être supprimé."
 
                        Application.EnableEvents = True
                        Sheets(OngletAccord).EnableSelection = xlUnlockedCells
                        Sheets(OngletAccord).Protect Contents:=True, UserInterfaceOnly:=True
 
                        Rows(p).Delete 'Efface la ligne en doublon
                    End If
                Loop While Not obj Is Nothing And AdresseTrouvee <> (p - 1) 'And Valeur_Cherchee <> "" And p <> lideb)
            End If
        End If
Next p
 
'vidage des variables
Set plage = Nothing
Set obj = Nothing
 
End Sub