وعليكم السلام ورحمة الله تعالى وبركاته
جرب هدا
بمكنك حدف السطور المخصصة للتحقق من أوراق العمل في حالة الرغبة لاختصار الكود
Sub test1()
Dim DataRng As Range, arr As Variant
Dim Ct As Long, i As Long, tmp As Boolean
Dim ws As Worksheet, dest As Worksheet
Dim WSname As String, destName As String
'****التحقق من وجود ورقة العمل المرغوب الترحيل منها
WSname = InputBox(" : يرجى إدخال اسم الشهر المرغوب ترحيله")
If Len(Trim(WSname)) = 0 Then
MsgBox " تم إلغاء الترحيــل", vbExclamation
Exit Sub
End If
On Error Resume Next
Set ws = ThisWorkbook.Sheets(WSname)
On Error GoTo 0
If ws Is Nothing Then
MsgBox "إسم الشهر غير صحيح يرجى التحقق والمحاولة مرة أخرى"
Exit Sub
End If
'****التحقق من وجود ورقة العمل المرغوب الترحيل اليها
destName = InputBox(" : يرجى إدخال اسم الشهر المرحل إليه")
If Len(Trim(destName)) = 0 Then
MsgBox " تم إلغاء الترحيــل", vbExclamation
Exit Sub
End If
On Error Resume Next
Set dest = ThisWorkbook.Sheets(destName)
On Error GoTo 0
If dest Is Nothing Then
MsgBox "إسم الشهر غير صحيح يرجى التحقق والمحاولة مرة أخرى"
Exit Sub
End If
'***** نطاق البيانات
Set DataRng = ws.Range("B5:B200")
tmp = Application.WorksheetFunction.CountA(DataRng) > 0
If Not tmp Then
MsgBox WSname & " " & "لا يوجد بيانات للنسخ في شهر", vbExclamation
Exit Sub
End If
'****افراغ البيانات السابقة
dest.Range("B5:B200").ClearContents
ReDim arr(1 To DataRng.Rows.Count, 1)
Ct = 0
For i = 1 To DataRng.Rows.Count
If Len(DataRng.Cells(i, 1).Value) > 0 Then
Ct = Ct + 1
arr(Ct, 1) = DataRng.Cells(i, 1).Value
End If
Next i
' لصق البيانات بداية من الصف 5 من ورقة الشهر المختارة
If Ct > 0 Then
For i = 1 To Ct
dest.Range("B5").Offset(i - 1, 0).Value = arr(i, 1)
Next i
End If
MsgBox "تم نسخ البيانات من شهر " & WSname & " إلى " & "شهر" & " " & destName & " " & " بنجاح", vbInformation
End Sub
ولنسخها بدون تكرار ستجد الكود داخل الملف المرفق
ترحيل.xlsm