Demande d aide sur macro pour suppression de lignes

elvioc

XLDnaute Nouveau
Bonjour à tous !

Comme j ai du mal à vous expliquer, je vais utiliser un exemple pour vous montrer ce que j aimerai obtenir :

voici comment se présente le tableau de départ :

ref montant montant
1102 -5
1102 5
1102 -10
1102 10
1103 -15
1104 -10
1103 15
1104 8

j aimerai avoir une macro qui fonctionne comme cela

ref 1102 montant -5 chercher si il existe ref 1102 montant +5 -> si oui passer au montant suivant
si pas de ligne correspondante, copier la ligne et la coller sur la feuille n°2 dans un autre tableau et reprendre le test à la ligne suivante etc...

Bref dans l exemple ci dessus, il ne devrait plus rester que ce tableau là en page 2 :

ref montant montant
1104 -10
1104 8

Je suis complétement largué et ne sais pas comment m en sortir...
Le tableau faisant plusieurs centaine de lignes, je ne me vois pas chercher moi-même toutes les lignes conformes ^^

Un grand merci d avance à celles et ceux qui arriveraient à m aider.
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Demande d aide sur macro pour suppression de lignes

Hello

essaie ce code dans un module VBA
Code:
Sub sup()

fin = Range("A" & Range("A:A").Rows.Count).End(xlUp).Row

ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Add Key:=Range("A2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil2").Sort
        .SetRange Range("A2:B" & fin)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
For i = fin To 3 Step -1
    If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = -Cells(i - 1, 2) Then
        Cells(i, 1).EntireRow.Delete
        Cells(i - 1, 1).EntireRow.Delete
    End If
Next i
end sub
 

elvioc

XLDnaute Nouveau
Re : Demande d aide sur macro pour suppression de lignes

Un grand merci !
Ca fonctionne parfaitement sur l'exemple que j ai donné.

Maintenant, j essaye de comprendre pour l adapter au "vrai" tableau, et je galère un peu pour le moment.

Cf ci joint un tableau "raccourci" en nb de ligne du définitif
Où là il faut enlever la colonne H remplace la colonne A du 1er exemple et les J et K remplace les B et C
Hmmm pas sûr d être très clair...
 

Pièces jointes

  • test.xlsm
    21.4 KB · Affichages: 29
  • test.xlsm
    21.4 KB · Affichages: 30
  • test.xlsm
    21.4 KB · Affichages: 30
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Demande d aide sur macro pour suppression de lignes

Re,

Ci joint le "meme" code mais avec quelques commentaires pour expliquer

Code:
Private Sub Rapprocher_Click()
'on récupère le nombre de lignes dans la colonne A (donc par extension dans tout le tableau)
fin = Range("A" & Range("A:A").Rows.Count).End(xlUp).Row

'on efface les tri actifs
ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Clear
    
'on tri le tableau sur la colonne A puis B 'car j'y avais mis tes data du post 1: Ref et montant
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("A2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range("A2:B" & fin)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'en partant de la fin et en remontant vers le haut du tableau
    
For i = fin To 3 Step -1
    If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = -Cells(i - 1, 2) Then
        Cells(i, 1).EntireRow.Delete
        Cells(i - 1, 1).EntireRow.Delete
    End If
Next i

End Sub


je ne retrouve pas tes colonnes ref et montant dans ton fichier ?
dis moi ou c'est et je retravaille le sujet
en attendant.. déjeuner ;-)
 

vgendron

XLDnaute Barbatruc
Re : Demande d aide sur macro pour suppression de lignes

re
voici une mise à jour du code
Code:
Private Sub Rapprocher_Click()
'on récupère le nombre de lignes dans la colonne A (donc par extension dans tout le tableau)
fin = Range("A" & Range("A:A").Rows.Count).End(xlUp).Row

'on efface les tri actifs
ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
    
'on tri le tableau sur la colonne H
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("H2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range("A2:K" & fin)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'en partant de la fin et en remontant vers le haut du tableau
    
For i = fin To 3 Step -1
    If Range("H" & i) = Range("H" & i - 1) And Range("J" & i) = Range("K" & i - 1) Then
        Cells(i, 1).EntireRow.Delete
        Cells(i - 1, 1).EntireRow.Delete
    End If
Next i

End Sub


attention, ca ne marche QUE si les deux opérations à rapprocher sont l'une directement sous l'autre...
et je viens de voir qu'il s'agissait de lettrage....
donc. gros casse tete récurrent sur ce forum ;-)
fait une recherche avec le mot lettrage. tu pourrais y trouver tout un tas de solutions directement adaptées à ton besoin. et surement plus performant que ce que je viens de faire ;-)
 

elvioc

XLDnaute Nouveau
Re : Demande d aide sur macro pour suppression de lignes

Un ENORME merci !!! Ca a marché impeccable !
Ca a mouliné un peu plus de 5min mais mon fichier est passé de 30 000 lignes à 400 et après une petite vérif c est tout bon !

Mes yeux te remercient vivement de les avoirs sauver lol
 

Statistiques des forums

Discussions
312 104
Messages
2 085 332
Membres
102 864
dernier inscrit
abderrashmaen