Suppression de ligne en double sur 2 tableaux

Fermé
Fitz_Chev - 8 oct. 2015 à 17:09
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 11 oct. 2015 à 09:47
Bonjour,

Alors je sais que la question des doublons a été évoquée des milliers de fois sur ce forum mais même en recherchant, je n'ai pas trouvé ce qui m'intéressait, ou alors j'ai mal cherché (ce qui est une éventualité).
Dans le cadre de mon boulot, je reçoit chaque mois un fichier de commissions payées par mon client, mais celui du mois N+1 reprends l'historique + les nouveaux.
Pour simplifier, je colle le fichier du mois N dans la feuille 2 du fichier N+1.
Ce que j'aimerais c'est isoler mes nouvelles lignes en feuille 3
J'ai essayé avec la MEF conditionnelle pour repérer les doublons sur le N° de contrat qui est unique, mais j'ai ce que j'appelle des dé-commissionnement d'un vieux contrat et donc le numéro de contrat est le même mais la ligne n'apparaissait pas dans mon fichier du mois N mais bien dans celui de N+1.
Je me demandais si avec une macro je pourrais pas réussir à m'en sortir car je vous avoue que mon fichier fait 800 lignes et j'en suis qu'au 3eme mois sur au moins 24, donc si vous avez une solution, je vous serait trèèèèèès reconnaissant.

Je vous joint un exemple pour plus de compréhension.

http://www.cjoint.com/c/EJio3kq5vk4

A voir également:

3 réponses

Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 9/10/2015 à 14:31
Bonjour,

Le code :

Sub COMPARATIF()
Dim O1 As Worksheet
Dim O2 As Worksheet
Dim TC1 As Variant
Dim TC2 As Variant
Dim i As Long
Dim J As Long
Dim TEST As Boolean
Dim DEST As Range
Dim TL() As Variant
Dim T1 As String
Dim T2 As String
Dim K As Long


Set O1 = Sheets(1)
Set O2 = Sheets(2)
Set O3 = Sheets(3)

x = 1
TC1 = O1.Range("A2:L" & O1.Cells(Application.Rows.Count, 1).End(xlUp).Row)
TC2 = O2.Range("A2:L" & O2.Cells(Application.Rows.Count, 1).End(xlUp).Row)
For i = 2 To UBound(TC1, 1)
    TEST = False
    T1 = CStr(TC1(i, 1)) & "/" & CStr(TC1(i, 2)) & "/" & CStr(TC1(i, 3)) & "/" & CStr(TC1(i, 4)) & "/" & CStr(TC1(i, 5)) & "/" & CStr(TC1(i, 6)) & "/" & CStr(TC1(i, 7)) & "/" & CStr(TC1(i, 8)) & "/" & CStr(TC1(i, 9)) & "/" & CStr(TC1(i, 10)) & "/" & CStr(TC1(i, 11)) & "/" & CStr(TC1(i, 12))
    For J = 2 To UBound(TC2, 1)
    T2 = CStr(TC2(J, 1)) & "/" & CStr(TC2(J, 2)) & "/" & CStr(TC2(J, 3)) & "/" & CStr(TC2(J, 4)) & "/" & CStr(TC2(J, 5)) & "/" & CStr(TC2(J, 6)) & "/" & CStr(TC2(J, 7)) & "/" & CStr(TC2(J, 8)) & "/" & CStr(TC2(J, 9)) & "/" & CStr(TC2(J, 10)) & "/" & CStr(TC2(J, 11)) & "/" & CStr(TC2(J, 12))
        If T1 = T2 Then TEST = True: Exit For
    Next J
    If TEST = False Then
    x = x + 1
        For K = 1 To 12
        Sheets(1).Cells(i, K).Copy Sheets(3).Cells(x, K)
        Next K
    End If
Next i

End Sub


Le fichier modifié (il ne reste qu'à cliquer sur le bouton) :

https://www.cjoint.com/c/EJjmFH18W7f

Cordialement.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 oct. 2015 à 15:16
Bonjour,

Afin d'éviter de se précipiter pour répondre à tout prix et fournir une usine à gaz si possible:
quelle la colonne de l'identifiant unique de l'opération:? n° de police , code lien , ou....?

0
Ah oui je croyais que la colonne était "N° de contrat" mais non c'est la colonne "N° de police", désolé
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > Fitz_Chev
9 oct. 2015 à 15:48
Ce que je ne comprend est que on retrouve dans la différence des N° de police 2346 et 2348 présents dans N et N+1, le seul unique que je vois est le 2350...
peut-être tenir compte du changement sur 2 lignes dans les colonnes >G et conserver la 2° ligne ???
0
Fitz_Chev > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
9 oct. 2015 à 16:13
Je ne comprends pas ce que vous voulez me dire, cependant je vais essayer d'être plus claire dans mon explication. En fait pour le contrat 2348 par exemple, même si le numéro de contrat est unique, il peut y avoir deux lignes, car la 1ere est la commission payée par mon client par exemple au mois de mars, cependant, pour X raisons, au mois de mai, le contrat est annulé ou résilié, donc mon client me dé-commissionne sur ce contrat d'où les 2 lignes avec + et -, et malheureusement, la date comptable ne change pas car c'est la date de la vente. Pour le 2346, il y a eu un versement complémentaire ou une augmentation des versements (ce sont des produits d'assurance), d'où ma seconde, car mon client me commissionne plus vu que le contrat rapporte plus.
Et c'est de là que viens mon problème, c'est que c'est trié par date du contrat.

Je sais pas si j'ai été suffisamment clair, sinon n'hésitez pas à me poser des questions pour éclaircir.

Merci beaucoup en tout cas
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
9 oct. 2015 à 15:37
J'ai fait avec les données que j'avais. Pour comparer les lignes, j'ai juste repris toutes les colonnes.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019
9 oct. 2015 à 17:14
Donc on garde la 2° ligne dans différence...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 11/10/2015 à 09:51
Bonjour

ci joint proposition
le bouton de déclenchement peut être dans n'importe quelle feuille
j'ai considéré que le nombre de lignes était important pour choisir une méthode rapide (mais peut-être + compliquée)
http://www.cjoint.com/c/EJlhTXLK8vI

Le code pour mémoire

Option Explicit
Option Base 1
'-------
Sub indiquer_différences()
Dim Derlig As Integer, T_in, D_in As Object, Cptr As Integer, Ref As String
Dim T_in1, T_out, Cpx As Integer, Col As Byte

Application.ScreenUpdating = False 'fige l'écran: confort et rapidité
'-----------------------------nettoyage
Sheets("différence").Range("A2:L10000").Clear

'-----------------------------mémorisation feuille N en Ram
With Sheets("Tableau N")
Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
T_in = .Range("D2:G" & Derlig)
'concaténation police & cotisation dans une collection (dictionary)
Set D_in = CreateObject("scripting.dictionary")
For Cptr = 1 To UBound(T_in)
Ref = T_in(Cptr, 1) & " " & T_in(Cptr, 4)
If Not D_in.exists(Ref) Then: D_in.Add Ref, ""
Next
End With

'--------------------------comparaison de la collection avec concaténation _
police & cotisatin dans feuille n+1
With Sheets("Tableau N+1")
ReDim T_out(12, 1) 'mémorisation en Ram
Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
T_in1 = .Range("A2:L" & Derlig)
For Cptr = 1 To UBound(T_in1)
Ref = T_in1(Cptr, 4) & " " & T_in1(Cptr, 7)
'si la concaténation feuille n=1 n'existe pas dans la collection feuil n
If Not D_in.exists(Ref) Then
Cpx = Cpx + 1
' inscription des données colonne a à L feuille n+1 dans _
variables tableau dynamique
ReDim Preserve T_out(12, Cpx)
For Col = 1 To 12
T_out(Col, Cpx) = T_in1(Cptr, Col)
Next
End If
Next
End With

'-----------------------------------------restitution
With Sheets("Différence")
.Range("A2").Resize(Cpx, 12) = Application.Transpose(T_out)
With .Range("A2:L" & Cpx + 1)
.Borders.Weight = xlThin 'quadrillage
.Font.Name = "Verdana" 'police
.Font.Size = 8
End With
.Activate
End With
End Sub


Michel
0