تفضل جرب اخي لاكن حاول دائما عدم طلب اكثر من طلب في موضوع واحد لكي يستطيع الاساتدة مساعدتك. لا احد لديه الوقت الكافي لاتمام كل الطلبات ...عند الانتهاء من ترحيل البيانات بنجاح قم بفتح وضوع جديد. وسوف نكون سعداء بمساعدتك.
بالتوفيق..........
Sub Transfer() ' ترحيل
Dim rng As Range, line As Range, cl As Range
Dim C As Long, lastrow As Long
Dim msg As VbMsgBoxResult
Dim WSdata As Worksheet: Set WSdata = Worksheets("Items")
Dim WSdest As Worksheet: Set WSdest = Worksheets("Orders")
lastrow = WSdest.Cells(WSdest.Rows.Count, "C").End(xlUp).Row
Application.ScreenUpdating = False
'التحقق من وجود بيانات على الخلايا التالية
WSdata.Activate
Arr = Array([F4], [F6], [H6], [H9], [H9], [F13], [H13], [J13])
For i = 0 To 7
If Arr(i) = Empty Then
MsgBox " المرجوا ملء بيانات " & Arr(i).Offset(0, -1), vbExclamation, "إنتباه"
Arr(i).Select
Exit Sub
End If
Next
'التحقق من وجود اسم العميل مسبقا لمنع التكرار
If Application.WorksheetFunction.CountIf(WSdest.Range("D:D"), WSdata.Range("F4").Value) > 0 Then
MsgBox "إسم العميل مضاف مسبقا", vbExclamation, "إنتباه"
Exit Sub
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
msg = MsgBox("ترحيل البيانات ؟ ", vbYesNo + vbQuestion + vbDefaultButton2, "")
If msg = vbNo Then
Exit Sub
Else
End If
Set rng = WSdata.Range("H15,F4,F6,H6,F9,H9,J9,F13,H13,J13,F15,J15,F18,H18,J18,F20,H20")
C = 3
For Each cl In rng
cl.Copy
WSdest.Cells(lastrow + 1, C).PasteSpecial xlPasteValues
C = C + 1
Next cl
'تسلسل البيانات
With WSdest.Range("B7:B" & lastrow + 1)
.Formula = "=Row() - 6"
.Value = .Value
End With
Application.CutCopyMode = False
'حدف الصفوف الفارغة
On Error Resume Next
Set line = Range("Orders[[إسم العميل]]").SpecialCells(xlCellTypeBlanks)
If Not line Is Nothing Then
line.Delete Shift:=xlUp
End If
On Error GoTo 0
'افراغ الخلايا
WSdata.Range("H15,F4,F6,H6,F9,H9,J9,F13,H13,J13,F15,J15,F18,H18,F20,H20") = Empty
Application.ScreenUpdating = True
m = MsgBox("تم ترحيل البيانات بنجاح", 64, "تأكيد")
End Sub