Supprimer lignes dont 2 valeurs sont de signes opposés suivant conditions
Bonjour,
Vous trouverez ci-joint mon fichier excel "test".
Je voudrais supprimers les lignes dont la somme des valeurs présentes dans la colonne N sont égales à 0. Ces lignes doivent aussi avoir la même valeur en colonne A et en colonne U.
J'ai mis en surbrillance 2 lignes qui répondent à ces conditions afin d'illustrer mes propos.
Ces lignes s'annulent et viennent donc polluer mon fichier sur lequel je dois ensuite appliquer des formules qui ne fonctionnent pas à cause de celles-ci.
J'ai trouvé ce code pour supprimer deux lignes qui ont des valeurs de signes opposés auxquels il faudrait ajouter mes conditions qui vérifient que les 2 lignes trouvées y répodent avant de les supprimer mais je ne maitrise pas assez pour adapter le code...
Sub supp_lignes()
'on déclare les variables
Dim Valeur_Cherchee As Long
Dim PlageDeRecherche As Range, Trouve As Range
For I = 2 To Range("A65536").End(xlUp).Row 'on lance une boucle qui va tester les lignes 2 à la dernière renseignée(colonne A)
If Cells(I, 1) = "" Then Exit For 'Si cellule col A vide on sort de la boucle
If Cells(I, 2).Value = "op" And InStr(Cells(I, 3).Value, "-") And I >= 2 Then 'on vérifié qu'en B on a "OP" et le signe "-" en C
Valeur_Cherchee = Replace(Cells(I, 3).Value, "-", "") 'on récupère la valeur absolue du chiffre
Set PlageDeRecherche = Cells(I, 3).EntireColumn 'on déclare la plage de recherche - ici colonne C
Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole) 'on lance la recherche
If Trouve Is Nothing Then
'si on trouve rien on ne fait rien
Else 'sinon si on trouve on fait :
If I < Trouve.Row And Trouve.Row <> I Then 'si I inf à la ligne trouvée
Cells(Trouve.Row, 3).EntireRow.Delete 'on sup la ligne trouvée
Cells(I, 3).EntireRow.Delete 'on sup la ligne I
I = I - 1 'I = I-1 pour ne pas oublier de ligne à cause de la sup
ElseIf I > Trouve.Row And Trouve.Row <> I Then
Cells(I, 3).EntireRow.Delete
Cells(Trouve.Row, 3).EntireRow.Delete
I = I - 1
End If
End If
End If
Next I
End Submerci d'avance pour votre aide,
Wish
Bonjour Wlish, bonjour le forum,
Peut-être comme ça :
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim PL As Range 'déclare la variable PL (PLage)
Set OS = Worksheets("Source") 'définit l'onglet OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set PL = OS.Range("A1") 'définit la plage PL
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeur TV (en partant de la seconde)
For J = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeur TV (en partant de la seconde)
If I <> J Then 'condition 1 : si I est différent de J
'condition 2 : si les données en colonne A sont identiques et les données en colonne M sont identique mais de signe opposé et les données en colonne U sont identiques
If TV(I, 1) = TV(J, 1) And TV(I, 14) = -TV(J, 14) And TV(I, 21) = TV(J, 21) Then
'redéfinit la plage PL
Set PL = IIf(PL.Cells.Count = 1, Application.Union(OS.Rows(I), OS.Rows(J)), Application.Union(PL, OS.Rows(I), OS.Rows(J)))
End If 'fin de la condition 2
End If 'fin de la condition 1
Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
PL.Delete 'supprime la plage PL
End SubBonjour Thautheme,
et merci déjà !
C'est presque ça.
J'ai essayé dans mon fichier original et cela supprime trop de ligne... Dans la colonne D, outre les valeurs "", "101" ou "102", il y a aussi des lignes avec la valeur 103, 903, etc.
Parmi ces lignes, il y en a parfois qui s'annulent. Les lignes avec la valeur "103" sont égales à "0" et peuvent avoir des données en colonne A et U identiques... et onc sont supprimées aussi.
Par conséquent, il faudrait une condition qui dit
"chercher uniquement les lignes avec la valeur "102" en colonne D et ne supprimer que la ligne valeur "101" en colonne D qui correspond (dont les valeurs en colonne N s'annulent, et qui ont les mêmes valeurs en colonne A, et qui on les mêmes valeurs en colonne U)"
Désolé je n'étais pas clair depuis le début c'est ma faute.