Hi,
Thank you all for the various suggestions
Here is the code I use
Code:
Option Explicit
Option Compare Text
Sub Test_AN()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
'-- Areas of Verification
Dim cl As Variant
Dim clx As Variant
Dim varFirstArr() As Variant
Dim varSecondArr() As Variant
Dim varFinalArr() As Variant
Dim lngLoop As Long
Dim lngIndex As Long
Dim lngCount As Long
Dim PanSx As Integer
Dim LastSx As Integer
Dim LastDx As Integer
Dim CicloAN As Integer
Dim RC As Long
RC = Rows.Count
'---Column on the left to compare
PanSx = 1
'---References of Cycles
Dim Ciclo As Long
'---references Columns
Dim Col_Pos As Long
'---I put the column where the Parameter Data Set
Col_Pos = 20
Call Imposta_Fogli.Imposta_Fogli
Dim Lista(1 To 12, 1 To 1)
Dim AreaR As Variant
AreaR = F6.Range("C23:G23")
Dim AreaS
AreaS = F6.Range("C26:C30")
Dim r As Range, s As Range
With FAB
.Select
'---I clean the lines of the sheet
.[L15].Copy
.Range("T7:CG200").PasteSpecial Paste:=xlFormats
'---I create a list with the positions of the last row of columns AN
For Ciclo = 1 To 12
Lista(Ciclo, 1) = .Cells(RC, Ciclo).End(xlUp).Row
Next
Set r = Cells(5, 20)
Set s = r
For CicloAN = PanSx To 12
For Ciclo = PanSx + 1 To 12
varFirstArr = .Range(Cells(7, CicloAN), Cells(Lista(CicloAN, 1), CicloAN)).Value
varSecondArr = .Range(Cells(7, Ciclo), Cells(Lista(Ciclo, 1), Ciclo)).Value
lngCount = 1
For lngLoop = LBound(varFirstArr) To UBound(varFirstArr)
lngIndex = 0
lngIndex = GetArrayIndex(varFirstArr(lngLoop, 1), varSecondArr, False)
If lngIndex > 0 Then
lngIndex = 0
ReDim Preserve varFinalArr(1 To lngCount)
varFinalArr(lngCount) = varFirstArr(lngLoop, 1)
lngCount = lngCount + 1
End If
Next lngLoop
.Cells(7, Col_Pos).Resize(UBound(varFinalArr)).Value = Application.Transpose(varFinalArr)
For clx = 1 To UBound(varFinalArr)
For Each cl In AreaR
If cl = varFinalArr(clx) Then Set r = Union(r, Cells(clx + 6, Col_Pos))
Next
For Each cl In AreaS
If cl = varFinalArr(clx) Then Set s = Union(s, Cells(clx + 6, Col_Pos))
Next
Next
Col_Pos = Col_Pos + 1
Next
PanSx = PanSx + 1
If PanSx = 12 Then Exit For
Next CicloAN
Erase varFirstArr
Erase varSecondArr
Erase varFinalArr
lngLoop = Empty
lngIndex = Empty
lngCount = Empty
AreaR = Empty
AreaS = Empty
.Range("T7").Select
End With
If Not r Is Nothing Then
FAB.[L11].Copy
r.PasteSpecial Paste:=xlFormats
Set r = Nothing
End If
If Not s Is Nothing Then
FAB.[L12].Copy
s.PasteSpecial Paste:=xlFormats
Set s = Nothing
End If
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Function GetArrayIndex(ByVal Val As Variant, ByVal varArr As Variant, _
Optional blnTranspose As Boolean = True, Optional lngColNo As Long = 1, _
Optional blnMatcase As Boolean = False) As Long
Dim varDataArr As Variant
GetArrayIndex = 0
On Error Resume Next
With WorksheetFunction
If blnTranspose Then
varDataArr = .Index(Application.Transpose(varArr), lngColNo)
Else
varDataArr = varArr
End If
GetArrayIndex = .Match(Val, varDataArr, blnMatcase)
End With
On Error GoTo -1: On Error GoTo 0: Err.Clear
varDataArr = Empty
End Function
I have attached the cycle requires you to re-analyze data entered in sheet
Bookmarks