السلام عليكم
غيرت الكود تماما كالتالي
Private Sub Worksheet_Activate()
If IsEmpty(Sheet1.[c5]) Then MsgBox "لايوجد مواد للترحيل .... !!" & Chr(10) & "الورقة الأولي بها خطأ": Sheet1.Select: Exit Sub
If IsEmpty(Sheet1.[b6]) Then MsgBox "لايوجد طلاب .... !!" & Chr(10) & "الورقة الأولي بها خطأ": Sheet1.Select: Exit Sub
Application.ScreenUpdating = False
' حذف السابق
[A9:B999].ClearContents
With [C4:V100]
.UnMerge
.FillDown
End With
' ترحيل المواد
n1 = Sheet1.[B5].End(xlToRight).Column - 2
For x = 1 To n1
c = 1 + x * 2
Sheet3.Columns("A:B").Copy Cells(1, c)
Cells(5, c).FormulaR1C1 = "=ورقة1!RC[-" & x - 1 & "]"
Cells(9, c).FormulaR1C1 = "=ورقة1!R[-3]C[-" & Int((c - 2) / 2) & "]"
Cells(9, c + 1).FormulaR1C1 = "=R6C[-1]*RC[-1]"
Next
' ترحيل الطلاب
With Sheet1
nr = .[b6].End(xlDown).Row
.Range(.[b6], .Cells(nr, 1)).Copy [A9]
End With
nr = [b8].End(xlDown).Row
Range([C9], Cells(nr, "W")).FillDown
Application.ScreenUpdating = True
End Sub
ليوافق طلباتك
وزودت أعمدة المواد حتي 10 مواد
تفضل المرفق
zxs4.rar