Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Long 'déclare la variable J (incrément)
Dim K As Long 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim PAS As Range 'déclare la variable PAS (Plage À Supprimer)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set O = Worksheets("Sheet2") 'définit l'onglet O
Set PAS = O.Range("A1") 'initialise la plage à supprimer PAS
TV = O.Range("A1").CurrentRegion 'définit la tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les liges I du tableau des valeurs TV (en partant de la seconde)
For J = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les liges J du tableau des valeurs TV (en partant de la seconde)
'condition : si I est différente de J et si la donnée en colonne 11 de I est la même (Dossier) que la donnée en colonne 11 de J et si la donnée en colonne 14 de I (Mvts) est l'opposé de la donnée en colonne 14 de J
If I <> J And TV(I, 11) = TV(J, 11) And TV(I, 14) = -TV(J, 14) Then
K = K + 2 'incrémente K
ReDim Preserve TL(1 To K) 'redimensionne le tableau des lignes TL (K lignes)
TL(K - 1) = I 'récupère la ligne I dans la ligne K - 1 de TL
TL(K) = J 'récupère la ligne J dans la ligne K de TL
Exit For 'sort de la boucle 2
End If 'fin de la condition
Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
For I = 1 To UBound(TL) 'boucle sur toutes données du tableau des lignes TL
'définit les lignes à effacer PAS (la ligne TL(I) si PAS ne contient qu'une seule celllue sinon union de toutes les ligne de TL)
Set PAS = IIf(PAS.Cells.Count = 1, O.Rows(TL(I)), Application.Union(PAS, O.Rows(TL(I))))
Next I ' prochaine donnée de TL
PAS.Delete 'supprime la plage a supprimer PAS
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
MsgBox "Traitement effectué !" 'message
End Sub