السلام عليكم
شرح مفصل لكود الترحيل
أولا يتم تحديد المطلوب كالتالي:
في الورقة Data يوجد 10 أعمدة (B:K) تحتاج لنقل البيانات إليها من الورقة (Invoice) من الخلايا التالية بالترتيب كما يلي
البيانات الخمسة الأولي
البيان 01 وبه - رقم الفاتورة - بالخلية E7
البيان 02 وبه - التاريخ - بالخلية D8
البيان 03 وبه - اسم العميل - بالخلية D9
البيان 04 وبه - كود العميل - بالخلية F9
البيان 05 وبه - العنوان - بالخلية D10
أما البيانات الخمسة التالية فيتم التعامل معها طريقة أخري ، لأنها ليست في خلية واحدة أوعدد ثلبت من الخلايا
البيان 06 إذن التسليم ، وحسب شكل الفاتورة قد يكون هناك أكثر من إذن تسليم واحد
البيان 07 البيان ، وهذا أيضا محتمل أن يكون أكثر من واحد
البيان 08 الكمية ، وهذه أيضا مثلهما
البيان 09 السعر ، وهذا كذلك
البيان 10 القيمة ، وهذه أيضا
ثانيا للتعامل مع هذه البيانات الخمسة الأخيرة فلابد من معرفة كم صنف في هذه الفاتورة وأدق عمود لهذا الغرض هو عمود الكمية ، إذ يتم تحديد عدد الأصناف أو البيانات عن طريق أنه من الخلية E30 مثلا بالقفزللأعلي حتي يجد خلية بها بيانات وتكون هذه هي آخر كمية بالفاتورة فيسجل رقم هذا السطر LR إختصارا لـ Last Row
ثم يبدأ في نقل البيانات الخمسة الأخيرة من السطر 12 إلي هذا السطر LR
ثم يخيرك في مسح بيانات الفاتورة أم لا
هذا هو الكود
Sub Tarheel()
'قراءة البيانات الخمسة الأولي
Dim d(5), x(5, 30)
d(1) = [E7]: d(2) = [D8]: d(3) = [D9]: d(4) = [F9]: d(5) = [D10]
'نقل البيانات الخمسة الأولي للورقة داتا
With Sheets("Data")
DR = .[H10000].End(xlUp).Row + 1 'آخر صف بيانات جاهز لاستلام بيانات جديدة بالورقة داتا
For i = 1 To 5
.Cells(DR, i + 1) = d(i)
Next i
End With
LR = [E30].End(xlUp).Row
'قراءة ونقل البيانات الأربعة الأخيرة
Range("C12:G" & LR).Copy
Sheets("Data").Select
Range("G" & DR).Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
[F2].Select
Sheets("Invoice").Select
Reply = MsgBox("تم ترحيل الفاتورة بحمد الله" & Chr(10) & "هل تريد مسح البيانات منها", vbYesNo)
If Reply <> 6 Then Exit Sub
Range("C12:F" & LR).ClearContents
[E7] = [E7] + 1
Range("D8:D10, F9").ClearContents
End Sub
مرفق الملف وبه الجزء الأول (كود الترحيل)
ولاحقا إن شاء الله كود الإستدعاء
فاتورة جديدة .rar