Bonjour,
A tester :
Vérifier les montants de la colonne G avant et après.
Sub SupprimerLesValeursQuiSAnnulent()
Dim ShEssai As Worksheet
Dim DerniereColonne As Long, DerniereLigne As Long
Dim AirePositifs As Range, AireNegatifs As Range, AireATrier As Range, AireTableau As Range, AireMontant As Range
Dim I As Integer, J As Integer
Sheets("Sheet1").Copy after:=Sheets(Sheets.Count)
Set ShEssai = ActiveSheet
With ShEssai
DerniereColonne = .Cells(1, .Columns.Count).End(xlToLeft).Column
DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(1, DerniereColonne + 1), .Cells(1, DerniereColonne + 2)) = Array("Valeurs positives", "Valeurs négatives")
Set AirePositifs = .Range(.Cells(2, DerniereColonne + 1), .Cells(DerniereLigne, DerniereColonne + 1))
Set AireNegatifs = .Range(.Cells(2, DerniereColonne + 2), .Cells(DerniereLigne, DerniereColonne + 2))
Set AireATrier = .Range(.Cells(2, "C"), .Cells(DerniereLigne, "C"))
Set AireTableau = .Range(.Cells(1, "A"), .Cells(DerniereLigne, DerniereColonne + 2))
Set AireMontant = .Range(.Cells(2, "G"), .Cells(DerniereLigne, "G"))
Application.ScreenUpdating = False
With AirePositifs
.Formula = "=IF(G2>0,C2&"" ""&G2,"""")"
.Copy
.PasteSpecial xlPasteValues
End With
With AireNegatifs
.Formula = "=IF(G2<0,C2&"" ""&-G2,"""")"
.Copy
.PasteSpecial xlPasteValues
End With
Application.ScreenUpdating = False
For I = AireNegatifs.Count To 1 Step -1
For J = AirePositifs.Count To 1 Step -1
If AireNegatifs(J) = AirePositifs(I) And AireNegatifs(J) <> "" Then
AireNegatifs(J).EntireRow.Clear
AirePositifs(I).EntireRow.Clear
Exit For
End If
Next J
Next I
.Sort.SortFields.Clear
.Sort.SortFields.Add2 Key:=AireATrier, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
With .Sort
.SetRange AireTableau
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
.Cells(1, DerniereColonne + 3).Formula = "=SUM(" & AireMontant.Address & ")"
Application.ScreenUpdating = True
End With
Set ShEssai = Nothing
Set AirePositifs = Nothing: Set AireNegatifs = Nothing
Set AireATrier = Nothing: Set AireTableau = Nothing: Set AireMontant = Nothing
End Sub