J'ai des données actuelles dans un classur et des données archivées dans un autre classur. Dans la colonne "B" du classur de données récentes, j'ai une variable ID. Je veux dire:
Pour chacun des ID figurant dans la colonne B des données récentes, interrogez toutes les lignes de la colonne A du classur archivé. S'il y a une correspondance, copyz plusieurs inputs de colonne du classur de données récentes dans le classur archivé.
J'ai écrit un code de travail, mais le problème est que, dans le cahier des données archivées, il y a 1.048.575 lignes et les loops For fonctionnent très lentement pour chaque match. Y a-t-il une meilleure façon de penser à cela?
Voici mon code actuel:
Sub CopyDataLines() Dim wb As Workbook, wb2 As Workbook Dim ws As Worksheet Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Ssortingng 'Set source workbook Set wb = ActiveWorkbook Set wbSheet = ActiveSheet 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Workbooks.Open vFile 'Set worbook to copy from Set wb2 = ActiveWorkbook Set wb2sheet = ActiveSheet With wb2.ActiveSheet FirstRow_book2 = 3 LastRow_book2 = .Cells(.Rows.Count, "B").End(xlUp).Row 'The contents of the tracking book FirstRow_book1 = 3 LastRow_book1 = wbSheet.Cells(.Rows.Count, "A").End(xlUp).Row For Lrow = LastRow_book2 To FirstRow_book2 Step -1 With .Cells(Lrow, "B") Pupid = .Value End With 'The For Loop Now Iterates Through All of the First WorkBook For Lrow_book1 = LastRow_book1 To FirstRow_book1 Step -1 With wbSheet.Cells(Lrow_book1, "A") If .Value = Pupid Then 'Reference for Date Changed Cells wbSheet.Cells(Lrow_book1, "V") = wb2sheet.Cells(Lrow, "C") 'Reference for Date Changed Cells wbSheet.Cells(Lrow_book1, "X") = wb2sheet.Cells(Lrow, "D") 'Prepare to copy range of multiple columns Let secondBookRange = "I" & Lrow & ":" & "N" & Lrow Let firstBookRange = "AI" & Lrow_book1 & ":" & "AN" & Lrow_book1 wb2sheet.Range(secondBookRange).Copy Destination:=wbSheet.Range(firstBookRange) End If End With Next Lrow_book1 Next Lrow End With
Mise en œuvre actuelle à l'aide d'un dictionary / carte Hash:
Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Sub CopyLinesImproves ()Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Dim vFile As VariantSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Dim Filter As SsortingngSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Dim FilterIndex As IntegerSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Dim Pupid As LongSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
'Set Tracking BookSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Définir wb_TrackingBook = ActiveWorkbookSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Définissez wbSheet_TrackingBook = ActiveSheetSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
'Définir la dernière ligne de TrackingBookSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
LastRow_TrackingBook = wbSheet_TrackingBook.Cells (wbSheet_TrackingBook.Rows.Count, "A"). End (xlUp) .RowSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
'Filtres pour les files autorisésSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Filter = "Excel versions ultérieures (* .xlsx), *. Xlsx," & _Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
"Fichiers Excel (* .xls), *. Xls,"Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
FilterIndex = 1Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
'Ouvrir le cahier cibleSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
vFile = Application.GetOpenFilename (Filter, FilterIndex, "Select One File to Open",, False)Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
'si l'user n'a pas sélectionné un file, quittez le sousSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Si TypeName (vFile) = "Boolean" Then Exit SubSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
'Ouvrez encore le fileSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Définissez wb_NewData = Workbooks.Open (vFile)Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Définir wbSheet_NewData = wb_NewData.ActiveSheetSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
'Définir la première ligne et la dernière ligne de la nouvelle feuille de travail de donnéesSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
FirstRow_NewData = 3Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
LastRow_NewData = wbSheet_NewData.Cells (wbSheet_NewData.Rows.Count, "B"). End (xlUp) .RowSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
'créer une carte de consultation à l'aide d'un dictionarySub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Définissez rngLookup = wbSheet_TrackingBook.Range ("A1"). Redimensionner (LastRow_TrackingBook, 1)Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Définir d = GetMap (rngLookup)Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Pour CurrentRow = FirstRow_NewData à LastRow_NewData Étape 1Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Pupid = wbSheet_NewData.Cells (CurrentRow, "B"). ValeurSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Si d.exists (Pupid) EnsuiteSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
wbSheet_TrackingBook.Cells (d (Pupid), "V") = wbSheet_NewData.Cells (CurrentRow, "C")Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
wbSheet_TrackingBook.Cells (d (Pupid), "X") = wbSheet_NewData.Cells (CurrentRow, "D")Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Laissez secondBookRange = "I" et CurrentRow & ":" & "N" et CurrentRowSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Laissez firstBookRange = "AI" et d (Pupid) & ":" & "AN" & d (Pupid)Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
wbSheet_NewData.Range (secondBookRange) .Copy Destination: = wbSheet_TrackingBook.Range (firstBookRange)Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Suivant CurrentRowSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Fonction GetMap (rng) As ObjectSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Dim d, v, arr, ub As Long, r As Long, r1 As LongSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Dim c As RangeSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Définir d = CreateObject ("scripting.dictionary")Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
arr = rng.ValueSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
r1 = rng.Cells (1) .RowSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
ub = UBound (arr, 1)Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Pour r = 1 à ubSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
v = arr (r, 1)Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Si Len (v)> 0 ThenSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Si d.exists (v) EnsuiteSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
d (v) = d (v) & "|"Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
& r1 + (r - 1)Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
d.Add v, r1 + (r-1)Sub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Next rSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function
Définir GetMap = dSub CopyLinesImproves() Dim vFile As Variant Dim Filter As Ssortingng Dim FilterIndex As Integer Dim Pupid As Long 'Set Tracking Book Set wb_TrackingBook = ActiveWorkbook Set wbSheet_TrackingBook = ActiveSheet 'Set Last Row of TrackingBook LastRow_TrackingBook = wbSheet_TrackingBook.Cells(wbSheet_TrackingBook.Rows.Count, "A").End(xlUp).Row 'Filters for allowed files Filter = "Excel Later Versions (*.xlsx),*.xlsx," & _ "Excel Files (*.xls),*.xls," FilterIndex = 1 'Open the target workbook vFile = Application.GetOpenFilename(Filter, FilterIndex, "Select One File to Open", , False) 'if the user didn't select a file, exit sub If TypeName(vFile) = "Boolean" Then Exit Sub 'Else open the file Set wb_NewData = Workbooks.Open(vFile) Set wbSheet_NewData = wb_NewData.ActiveSheet 'Set First Row and Last Row of the New Data Worksheet FirstRow_NewData = 3 LastRow_NewData = wbSheet_NewData.Cells(wbSheet_NewData.Rows.Count, "B").End(xlUp).Row 'create a lookup map using a dictionary Set rngLookup = wbSheet_TrackingBook.Range("A1").Resize(LastRow_TrackingBook, 1) Set d = GetMap(rngLookup) For CurrentRow = FirstRow_NewData To LastRow_NewData Step 1 Pupid = wbSheet_NewData.Cells(CurrentRow, "B").Value If d.exists(Pupid) Then wbSheet_TrackingBook.Cells(d(Pupid), "V") = wbSheet_NewData.Cells(CurrentRow, "C") wbSheet_TrackingBook.Cells(d(Pupid), "X") = wbSheet_NewData.Cells(CurrentRow, "D") Let secondBookRange = "I" & CurrentRow & ":" & "N" & CurrentRow Let firstBookRange = "AI" & d(Pupid) & ":" & "AN" & d(Pupid) wbSheet_NewData.Range(secondBookRange).Copy Destination:=wbSheet_TrackingBook.Range(firstBookRange) End If Next CurrentRow End Sub Function GetMap(rng) As Object Dim d, v, arr, ub As Long, r As Long, r1 As Long Dim c As Range Set d = CreateObject("scripting.dictionary") arr = rng.Value r1 = rng.Cells(1).Row ub = UBound(arr, 1) For r = 1 To ub v = arr(r, 1) If Len(v) > 0 Then If d.exists(v) Then d(v) = d(v) & "|" & r1 + (r - 1) Else d.Add v, r1 + (r - 1) End If End If Next r Set GetMap = d End Function