Suppression de ligne en double sur 2 tableaux
Fitz_Chev
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Suppression de ligne en double sur 2 tableaux
- Double ecran - Guide
- Whatsapp double sim - Guide
- Partage de photos en ligne - Guide
- Forcer suppression fichier - Guide
- Mètre en ligne - Guide
3 réponses
Bonjour,
Le code :
Le fichier modifié (il ne reste qu'à cliquer sur le bouton) :
https://www.cjoint.com/c/EJjmFH18W7f
Cordialement.
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.
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....?
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....?
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
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
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
Michel
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