مرحبا اساتذتنا الكرام يسرني المشاركة معكم في ايجاد حل للمطلوب رغم انني لم استوعب الفكرة جيدا وكنت قد صرفت النظر عن المشاركة في الموضوع لاكن بعد معاينة النتيجة المستخرجة على ملف الاستاد @AbuuAhmed الدي نكن له كل الاحترام والتقدير. اليك اخي هده المساهمة البسيطة على قدر ما استطعت فهمه لحد الساعة
مع تغيير اسم الورقة المظافة من مصفوفة الى Test 🫣🫣
Sub test1()
Dim wb As Workbook, WSdata As Worksheet, dest As Worksheet, lRow As Long, lCol As Long
Set wb = ThisWorkbook: Set WSdata = wb.Sheets("الفواتير"): Set dest = wb.Sheets("Test")
A = WSdata.Range("A2:I" & WSdata.[D65000].End(xlUp).Row)
With Application
.ScreenUpdating = False
With dest
Intersect(.Range(.Rows(2), .UsedRange.Rows(.UsedRange.Rows.Count)), .Range("A:I")).ClearContents
End With
Dim c(): ReDim c(1 To UBound(A, 1), 1 To 9)
Cpt = 0
Set mondico = CreateObject("Scripting.Dictionary")
For I = 1 To UBound(A)
On Error Resume Next
clé = A(I, 4) & A(I, 8)
If Not mondico.exists(clé) Then
Cpt = Cpt + 1: mondico.Add clé, Cpt: c(Cpt, 1) = clé: F = Cpt
Else
F = mondico.Item(clé)
End If
c(F, 1) = A(I, 1): c(F, 2) = A(I, 2): c(F, 3) = A(I, 3): c(F, 4) = A(I, 4): c(F, 5) = c(F, 5) + A(I, 5)
c(F, 6) = c(F, 6) + A(I, 6): c(F, 7) = c(F, 7) + A(I, 7): c(F, 8) = A(I, 8): c(F, 9) = A(I, 9)
Next
dest.[a3].Resize(mondico.Count, UBound(c, 2)) = c
lRow = dest.Cells.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
With dest
Union(dest.Range("A3:A" & lRow), dest.Range("F3:F" & lRow)).NumberFormat = "#,##0;- #,##0;""-""??"
dest.Range("C3:C" & lRow).NumberFormat = "dddd dd-mm-yyyy"
dest.Range("E3:E" & lRow).NumberFormat = "#,##0.0;- #,##0.0;""-""??"
If dest.ListObjects.Count <> 0 Then Exit Sub
lCol = .Cells(3, dest.Columns.Count).End(xlToLeft).Column
dest.ListObjects.Add(xlSrcRange, .Range(dest.Cells(3, 1), .Cells(lRow, lCol)), , xlYes).Name = "Table1"
.ListObjects("Table1").ShowAutoFilterDropDown = False
End With
On Error GoTo 0
.ScreenUpdating = True
End With
End Sub
تجربة1.xlsb