Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Supprimer les lignes en doubles (multi critères)

Tony.R

XLDnaute Nouveau
Bonjour,

Je suis en train de créer un fichier automatisé de A à Z, je débute mais je ne m'en sort pas trop mal mais il y a un endroit où je bloque. J'ai fichier après traitement de la macro sauf que dans ce fichier il y a des lignes qui ne m'intéressent pas. C'est pourquoi je souhaite avoir une macro qui va permettre de faire une double recherche pour supprimer les lignes inutiles. Pour expliquer en détail pour un montant dans les colonnes intitulées D ou C il y a environ 50% de la TVA qui vient s'ajouter sauf que je n'en ai pas besoin. exemple :


Je parlais de double critère car en effet il faut un double doublon pour effectuer cette tâche de suppression : sur la colonne N et P de ce fait s'il y a un doublon sur la colonne N et P alors il faut supprimer la ligne la plus petite (qui équivaut à 50% de la TVA environ) donc dans cette exemple la ligne qui doit être supprimer est la ligne à 116,62€.

Normalement un double doublons doit avoir 2 lignes une ligne avec un gros montant en D ou C2 et un petit montant en D ou C2 mais il arrive qu'il y ai plusieurs ligne par exemple 4 grosses lignes (du même montant en général) et 4 petits montant , il faut garder que les gros (du coup les 4 gros montants). Que les montants soient en D ou C2 cela n'a pas d'importance la gymnastique est la même.

Je sais que cela peut être compliqué à comprendre mais n'hésitez pas à me poser le maximum de question pour la bonne compréhension. Le faire manuellement est très long donc si une macro peut le faire rapidement je ne dirais pas non ...

D'ailleurs toutes les colonnes doivent être présente.

Merci par avance.

Cordialement.
Tony
 

Pièces jointes

  • Projet tony.xlsx
    130.6 KB · Affichages: 9

Tony.R

XLDnaute Nouveau
Hello,

Avant de répondre à tes questions il me semblait que la macro faisait le ménage pour la colonne C2 aussi (sauf erreur de ma part il y avait plus les petits montants)
Tu as visé juste si il y a un 0 en D alors le montant se trouve en C2 et inversement si le 0 est sur C2 alors cela signifie que les montants se trouve en D mais jamais un montant sup à 0 dans les 2 en même temps et jamais de montant < à 0 dans D ou C2.

1) cas 1
Si dans une cellule D le montant est 0 alors il y a forcément un Montant différent de 0 dans la colonne C2
Exemple :
Ligne 28 / colonne D = 200 / Colonne C2 = 0
= oui ou non ? Reponse oui
Et
Exemple :
Ligne 28 / colonne D = 0 / Colonne C2 = 200
Vis versa
= oui ou non ? Reponse oui

2 ) cas 2
C'est possible qu'il y est un montant supérieur 0 en D et C2
Exemple :
Ligne 28 / colonne D = 200 / Colonne C2 = 200
= oui ou non ? Réponse non
 

laurent950

XLDnaute Barbatruc
Bonsoir,

Les colonnes D et C2 sont prise en compte.

Ci-dessous à comparer.

VB:
Option Explicit
Sub SuppressionTVAColonneD_C()
' macro qui va permettre de faire recherche avec une clé pour supprimer les lignes inutiles.
' en Colonne D ou C2 les sommes qui représente environ 50% de la TVA qui vient s'ajouter.
'
' 1) Copie la somme "D" ou "C2" /  crée une clé
'    - Colonne 12 copie la somme de la colonne "D" ou "C2"
'    - Colonne 13 crée une clé avec les colonnes N & P & Le code de la colonne somme soit "D" ou "C2" & C & D
' 2) Identification de la ligne avec couleur jaune
'    - A Partir de la clé créer
' 3) Puis suppression de cette ligne
'    - A Partir de la couleur jaune générer sur la feuille Excel.
'
Application.ScreenUpdating = False
'
    Dim t(0 To 1) As Variant
    Dim Temp() As Variant
    Dim a() As Variant
    Dim i, j As Long
        t(0) = Range(Cells(1, 1), Cells(Cells(65536, 1).End(xlUp).Row, Cells(1, Cells.Columns.Count).End(xlToLeft).Column))
    Set t(1) = Range(Cells(1, 1), Cells(Cells(65536, 1).End(xlUp).Row, Cells(1, Cells.Columns.Count).End(xlToLeft).Column))
    Temp = t(0)
    ReDim Preserve Temp(LBound(t(0), 1) To UBound(t(0), 1), LBound(t(0), 2) To UBound(t(0), 2) + 2)
    t(0) = Temp
    Erase Temp
' 1) Copie la somme "D" ou "C2" /  crée une clé
    For i = LBound(t(0), 1) + 1 To UBound(t(0), 1)
        If t(0)(i, 8) > 0 Then
            t(0)(i, 12) = t(0)(i, 8) ' ........................................................ Somme
            t(0)(i, 13) = t(0)(i, 7) & "-" & t(0)(i, 10) & "-" & "D" & "-" & t(0)(i, 3) & "-" & t(0)(i, 4) ' .... Clé
        Else
            t(0)(i, 12) = t(0)(i, 9) ' ........................................................ Somme
            t(0)(i, 13) = t(0)(i, 7) & "-" & t(0)(i, 10) & "-" & "C2" & "-" & t(0)(i, 3) & "-" & t(0)(i, 4) ' .... Clé
        End If
    Next i
    i = Empty
' 2) Identification de la ligne avec couleur jaune
    For i = LBound(t(0), 1) + 1 To UBound(t(0), 1)
        For j = i + 1 To UBound(t(0), 1)
            If t(0)(i, 13) = t(0)(j, 13) Then
                a = Array(t(0)(i, 12), t(0)(j, 12))
                    If Application.Min(a) = t(0)(i, 12) Then
                        Range(t(1).Cells(i, 1), t(1).Cells(i, UBound(t(0), 2) - 2)).Interior.Color = 65535
                    ElseIf Application.Min(a) = t(0)(j, 12) Then
                        Range(t(1).Cells(j, 1), t(1).Cells(j, UBound(t(0), 2) - 2)).Interior.Color = 65535
                    End If
                    Erase a
            End If
        Next j
    Next i
        i = Empty: j = Empty
' 3) Puis suppression de cette ligne
        For i = t(1).Rows.Count To 1 Step -1
            If Range(t(1).Cells(i, 1), t(1).Cells(i, UBound(t(0), 2) - 2)).Interior.Color = 65535 Then
                Range(t(1).Cells(i, 1), t(1).Cells(i, UBound(t(0), 2) - 2)).Delete
            End If
        Next i
    Erase t
        i = Empty: j = Empty
        Erase t
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Tony.R

XLDnaute Nouveau
Merci beaucoup je test ça dès ce WE etje reviens vers toi. juste pour que je comprenne. Ca veut dire quoi exactement ton point 1) la macro fait quoi exactement. Le point 2 et 3 je l'ai bien compris.


Une autre question, si le nom des colonnes changent cela pose problème pour la macro ?

Merci par avance
 

oguruma

XLDnaute Occasionnel
Hi, pour l'avoir alimenter dans un post Précédent, comme tu es en V2010, le plus simple serait d'installer l'add-on PowerQuery....
Ou y faudrait aussi que ton Admin Bureautique responsable des Masterisation des postes face les maj enfin si cela est possible aussi..... je sais qu'il y a encore un bon nombre de comptes qui sont encore en 2010 dont des grands comptes....
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…