اذهب الي المحتوي
أوفيسنا

اهداء الى المنتدى--شرح كيفية عمل فاتوره على الكسيل بدون فورم


الردود الموصى بها

بسم الله الرحمن الرحيم

والصلاة والسلام على اشرف المرسلين

سيدنا محمد صلى الله عليه وسلم

لقد قدمت سابقا نموذج فاتوره على الاكسيل بدون فورم

وبناء على طلب بعض الاخوه فى شرح كيفيه عمل النموذج

وتلبية لرغباتهم

نتناول طريقه عمل النموذج

ونظرا لضيق الوقت

ان شاء الله يتم تناول درس يوميا على الاقل حتى الانتهاء بإذن الله

..........................................................................

الاخوه الافاضل

الحمد لله فقد انتهينا من شرح الدرس

الاول وهو عباره عن ثلاثة دروس تمهيديه

وهى

اولا--تصميم الفاتوره

ثانيا--انشاء شيت به الاكواد المساعده

ثالثا--انشاء شيت لتجميع بيانات الفواتير المسجله

---------------------------------------------------

الان نبدأ فى شرح الدرس الثانى

الدرس الثانى ( أ )  الكود الاول--كود يقوم بعمل تسلسل لرقم الفاتوره

بالتاكيد اننا نحتاج لمثل هذا الكود توفيرا للوقت الضائع فى ادخال الرقم بأيدينا

وظيفة الكود انه بعد الانتهاء من الفاتوره وادخال بياناتها يقوم الكود تلقائيا بوضع رقم جديد للفاتوره

وهذا الكود سوف يكون مرتبط بالبيانات المسجله فى شيت INVOICE DATA

وبالاخص فى العمود C والخاص برقم الفاتوره حيث ان عمل الكود يكون كالاتى

انه فى حالى عدم وجود بيانات فى العمود c يتم اعطاء الخليه  الرقم 1

اما فى حالة وجود بيانات يتم اخذ اكبر رقم موجود ثم يتم اضافة 1 اليه

الان نتعرف على كيفيه كتابة الكود وطريقه عمل الكود

نقوم بانشاء موديل جديد وكتابة الكود داخلها كالاتى

CPriHD.jpg

 

vc3FCi.jpg

 

وهنا نجد ان الشكل النهائى للكود يكون كالأتى

Sub INV_NO()
On Error Resume Next
Dim WS As Worksheet
Dim WS1 As Worksheet
Set WS = Worksheets("INVOICE")
Set WS1 = Worksheets("INVOICE DATA")
If WS.Range("F2").Value = "" Then
WS.Range("F2").Value = 1
Exit Sub
End If
If WS.Range("f2").Value <> "" Then
With WS1
WS.Range("F2").Value = Application.Max(WS1.[C3:C10800]) + 1
End With
End If
End Sub

واسمحو لى ايها الاخوه الافاضل

بمحاوله متواضعه منى لشرح اسطر الكود

Sub INV_NO()

كلمة sub ,وهى اختصار لكلمة Subroutine وتعنى تنفيذ مهمه محدده

هذه المهمه تم تسميتها ب INV_NO

Dim WS As Worksheet
Dim WS1 As Worksheet

هنا يتم الاعلان عن متغير اسميناه ب ws

,ومتغير اخر اسميناه ب ws1

وتم الاشاره الى كلا من المتغيرين على انهما

سيكونان عباره عن شيت اكسيل

Set WS = Worksheets("INVOICE")
Set WS1 = Worksheets("INVOICE DATA")

وهنا يتم تعريف المتغيرين وتحديد اسمهما

فنجد ان المتغير الاول ws تم نعريفه على انه الشيت المسمى ب invoice

ونجد ان المتغير الثانى ws1 تم نعريفه على انه الشيت المسمى ب invoice data

If WS.Range("f2").Value = "" Then

هنا ينم استخدام القاعده if داخل الكود

لتنفيذ شئ معين

وفى البداية نود ان نشير الى شئ معين

الا وهو كيفيه استخدام المتغير ws

فمثلا فى هذا السطر نشير الى الخليهf2فى شيت invoice

وبذلك يكون شكل الكود كألأتى

sheets("invoice").range("f2")

هكذا يتم الاشاره الى الخليه f2 فى شيت invoice

اما فى حالة استخدام الاختصار اى استخدام المتغير ws

تكون الاشاره كالأتى

ws.range("f2")

وبالنظر الى سطر الكود سنجد اننا نريد ان  نقول انه فى حالة عدم وجود بيانات

فى الخليه f2 فى الشيت ws اى شيت invoice

يتم تنفيذ الاتى

WS.Range("F2").Value = 1

وفى هذا السطر نجد انه سوف يتم تنفيذ أو

سوف يتم اعطاء الخليه f2

فى شيت ws اى فى شيت invoice

الرقم 1

Exit Sub
End If

كلمة Exit Sub

وظيفها انه تقوم بانهاء عمل الكود

فلا يتم تنفيذ شئ بعدها

اما كلمة End If

فهى تقوم بانهاء عمل الشرط if

If WS.Range("f2").Value <> "" Then

هنا نريد ان نقول انه فى حالة  وجود  بيانات فى الخليه  f2 فى

شيت ws اى فى شيت invoice

يتم الاتى

WS.Range("F2").Value = Application.Max(WS1.[C6:C10800]) + 1

بالنظر الى هذا السطر سنجد اننا  قد استخدمنا المعادله MAX

هذه المعادله من وظيفتها ان تقوم بالبحث داخل النطاق

المشار اليه (C3:C10800) فى شيت WS1 اى فى شيت INVOICE DATA

ثم يتم اضافة الرقم 1 الى النتاتج

بمعنى

انه فى حالة وجود الارقام الاتيه فى الخلايا

1-2-3-4-5

سنجد ان المعادله MAX سوف تعطى الرقم 5 كأكبر رقم

موجود ثم يتم اضافة الرقم 1 الى الرقم5

1+5=6

وبذلك تصبح قيمة الخليه f2 فى شيت ws

اى فى شيت invoice تساوى الرقم 6

وهكذا

End If
End Sub

اما كلمة End If

فهى تقوم بانهاء عمل الشرط if

اما كلمة End sub

فهى تقوم بنهاء عمل الكود نهائيا

.............................................................................................................................................................................................................................................................

الان يتم التعرف على كيفيه انشاء زر وربطه بالكود

6a6b3N.jpg

 

----------------------------------------------------------------------------------------------

الان قد انتهينا من شرح الدرس الاول (أ)

 

اتمنى ان اكون قد وفقت فى الشرح

 

تقبلوا تحياتى

  • Like 1
رابط هذا التعليق
شارك

  • الردود 115
  • Created
  • اخر رد

Top Posters In This Topic

السلام عليكم ورحمة الله وبركاته

الاستاذ والاخ الحبيب ابراهيم جزاكم الله خيرا

بهذه الدروس سوف يرتقي منتدانا الى الصفوة الاولى في

المنتديات التعليمية في الوطن العربي حقا انه منتدى تعليمي رائع

وفيه اساتذه كبار حفظهم الله جميعا غايتهم الوحيدة توصيل المعلومة

وادراكها من قبل جميع الاعضاء  وهذا هو المسار الصحيح

وفقكم الله وزادكم من فضله علما وخيرا كثيرا

اخى محمد

اشكرك على متابعة الموضوع

وعلى الكلمات الطيبه

واتمنى ان اقدم شيئا مضيفا

ردا لجميل هذا المنتدى الكبير علينا

تقبل تحياتى

  • Like 1
رابط هذا التعليق
شارك

لسلام عليكم ورحمة الله وبركاته

الاستاذ والاخ الحبيب ابراهيم جزاكم الله خيرا

بهذه الدروس

اخى ابا اسماعيل

تقبل تحياتى

رابط هذا التعليق
شارك

بسم الله الرحمن الرحيم

والصلاة والسلام على اشرف المرسلين

سيدنا محمد صلى الله عليه وسلم

لقد قدمت سابقا نموذج فاتوره على الاكسيل بدون فورم

وبناء على طلب بعض الاخوه فى شرح كيفيه عمل النموذج

وتلبية لرغباتهم

نتناول طريقه عمل النموذج

ونظرا لضيق الوقت

ان شاء الله يتم تناول درس يوميا على الاقل حتى الانتهاء بإذن الله

..........................................................................

الاخوه الافاضل

الحمد لله فقد انتهينا من شرح الدرس

الاول وهو عباره عن ثلاثة دروس تمهيديه

وهى

اولا--تصميم الفاتوره

ثانيا--انشاء شيت به الاكواد المساعده

ثالثا--انشاء شيت لتجميع بيانات الفواتير المسجله

---------------------------------------------------

الان نبدأ فى شرح الدرس الثانى

وقد انتهينا سابقان من تناول

الدرس الثانى ( أ )  الكود الاول--كود يقوم بعمل تسلسل لرقم الفاتوره

 

الان نتناول شرح

الدرس الثانى ( ب )  الكود الثانى--كود يقوم بعمل تسلسل لبيانات الفاتوره

اود ان اوجه عناية احبائى المتابعين الى اننا سوف نقوم بوضع الكود فى حدث الورقه

ولكن دعونا نجرب شيئا قبل وضع الكود

انظر الى الصوره

                                                                                                  UXEbtn.jpg

وكما قلنا سابقا ان وضع الكود سوف يكون فى حدث الورقه

نقوم بفتح محرر الاكواد ونقوم بكتابة الكود كما هو موضح فى الصوره

 

AoZw67.jpg

قم الان بمسح الاكواد الموجوده فى الخلايا من C16 الى C18

والتى قمنا بادخالها سابقا ثم قم باعاده ادخالها من جديد وستلاحظ انه تم عمل تسلسل

فى الخلايا من B16 الى B18

كما هو موضح فى الصوره

C377GO.jpg

 

شرح الكود

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

هذا الكود يوضوع فى حدث الورقه وهو من وظيفته انه فى حالة حدوث اى تغير فى النطاق

المحدد يتم تفعيل الكود

If Target.Column = 3 Then

هنا نستخدم قاعده if لوضع شرط معين

وهنا نشترط انه فى حالة ان يكون العمود رقم 3 هو عمود الادخال

ونود ان نشير الى انه طالما بدأنا سطر الكود ب if فهذا يعنى اننا لابد ان

يتم اقفال هذا السطر ب end if

s = 1

متغير يشير الى ان بدايه الترقيم سوف يبدأ من الرقم 1

For T = 16 To 37

هنا تم استخدام الحلقه التكراريه for وننبه الى انه طالما بدأنا سطر

الكود ب for فهذا يعنى انه لابد ان يتم اقفال هذه الحلقه  ب next

وهنا تم الاشاره الى t على  انه متغير يشير الى ان تنفيذ الحلقه التكراريه سوف تتم بداية

من السطر  16 وحتى السطر 37

If Cells(T, 3) = "" Then

هنا نقول انه اذا كانت الخليه الواقعه فى النطاق المعرف ب t (من السطر 16الى37)

فى العمود الثالث فارغه يتم الاتى

Cells(T, 2).Value = ""

يتم جعلل الخليه الواقعه فى النطاق المعرف ب t(من السطر 16الى37)

فى العمود الثانى فارغه

End If

هنا كما قلنا سابقا انه طالما بدأنا بكلمة if لابد ان يكون هناك اقفال بكلمة end if

وهنا نجد ان end if هذه تقفل السطر       If Cells(T, 3) = "" Then

If Cells(T, 3) > "" Then

هنا نبدأ شرط جديد

نقول فيه انه اذا كانت الخليه الواقعه فى النطاق المعرف

ب t(من السطر 16الى37)فى العمود الثالث غير فارغه يتم الاتى

Cells(T, 2).Value = s

هنا نقول انه فى حالة تحقق الشرط السابق

يتم جعل الخليه  الواقعه فى النطاق المعرف ب t(من السطر 16الى37)

فى العمود الثانى تساوى قيمة المتغير المعرف ب s اى 1

s = s + 1

اى انه فى حالة ان تكون الخلاياالتى يتم عمل التسلسل فيها اى من b16الى b37 قد اخذت قيمة المتغير s يتم اضافة الرقم 1 الى الخليه التى تليها وهكذا

End If

هنا كما قلنا سابقا انه طالما بدأنا بكلمة if لابد ان يكون هناك   اقفال   بكلمة  end if  

وهنا نجد ان  end if  هذه تقفل السطر       If Ce lls(T, 3) > "" Then

Next

وكم قلنا سابقا انه طالما بدأنا ب  for فهذا يعنى انه لابد ان يتم اقفال هذه الحلقه  ب next

End If

هنا كما قلنا سابقا انه طالما بدأنا بكلمة   if   لابد ان ي كون هناك  اقفال  بكلمة  en d if  

وهنا نجد ان  end if  هذه تقفل السطر       If Ta rget.Column = 3 Then

End Sub

نهاية الكود

............................................................................................................................................................................................................................

الان نقوم بتجربه الملف المرفق لرؤيه عمل الكود على حده

فقط قم بالكتابه داخل الخلايا من C16 الى C37 وستلاحظ ظهور الناتج فى الخلايا

من B16 الى B37

شاهد الفيديو    2-EXE         والمرفق    2-EXCEL

-----------------------------------------------------------------------------------

الان قد انتهينا من شرح

الدرس الثانى ( ب )  الكود الثانى--كود يقوم بعمل تسلسل لبيانات الفاتوره

 

اتمنى ان اكون قد وفقت فى الشرح

 

تقبلوا تحياتى

 

2-EXE.rar

2-EXCEL.rar

رابط هذا التعليق
شارك

 

استاذ / ابراهيم ابو ليلة

مجهود و عمل اكثر من رائع

بارك الله فيك

 

اخى جلال

اشكرك على متابعة الموضوع

اتمنى ان يكون الموضوع مفيدا

تقبل تحياتى

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله وبركاته

استاذى الحبيب ابراهيم

ابحث عن هذا الدرس لك من زمان والحمد لله وجدت ضالتى

جزاكم الله خيرا

اخى محمد

شاكرك على المتابعه

واتمنى ان استطيع تقديم شيئا مفيدا

تقبل تحياتى

رابط هذا التعليق
شارك

 

ا / ابراهيم

سر على بركة الله

ياجماعه انا كنت عامل فاتوره وعايزه تسحب الكميات اللي هكتبها داخل الفاتوره من شيت المخزن ارجو المساعده ضروررررررررررررررري

اخى محمد

الهدف من هذه الدروس

هى ان تصل بنفسك الى

الدرجه التى تجعلك تعتمد على

نفسك فى انشاء برانامج فاتوره خاص بك

دون الحاجه الى مساعده احد

ان شاء الله

تقبل تحياتى

رابط هذا التعليق
شارك

شكر الله لك أستاذنا الحبيب إبراهيم على ما قدمت وما ستقدم وجعله في ميزان حسناتك فكم استفدت منك كثيرا في عملي ، جزاكم الله خيرا .

رابط هذا التعليق
شارك

شكر الله لك أستاذنا الحبيب إبراهيم على ما قدمت وما ستقدم وجعله في ميزان حسناتك فكم استفدت منك كثيرا في عملي ، جزاكم الله خيرا .

اخى حنفضر

اشكرك على المتابعه

واتمنى لك التوفيق والاستفاده

تقبل تحياتى

رابط هذا التعليق
شارك

بسم الله الرحمن الرحيم

والصلاة والسلام على اشرف المرسلين

سيدنا محمد صلى الله عليه وسلم

لقد قدمت سابقا نموذج فاتوره على الاكسيل بدون فورم

وبناء على طلب بعض الاخوه فى شرح كيفيه عمل النموذج

وتلبية لرغباتهم

نتناول طريقه عمل النموذج

ونظرا لضيق الوقت

ان شاء الله يتم تناول درس يوميا على الاقل حتى الانتهاء بإذن الله

..........................................................................

الاخوه الافاضل

الحمد لله فقد انتهينا من شرح الدرس

الاول وهو عباره عن ثلاثة دروس تمهيديه

وهى

اولا--تصميم الفاتوره

ثانيا--انشاء شيت به الاكواد المساعده

ثالثا--انشاء شيت لتجميع بيانات الفواتير المسجله

---------------------------------------------------

الان نبدأ فى شرح الدرس الثانى

وقد انتهينا سابقان من تناول

الدرس الثانى ( أ )  الكود الاول--كود يقوم بعمل تسلسل لرقم الفاتوره

الدرس الثانى ( ب )  الكود الثانى--كود يقوم بعمل تسلسل لبيانات الفاتوره

 

الان نتناول شرح

الدرس الثانى ( ج )  كود الثالث--يقوم باحضار بيانات العميل عند كتابة الكود الخاص بالعميل

 

فى هذا الدرس كما هو واضح من العنوان اننا سوف نتعامل مع العملاء

اذا لابد ان تكون لدينا بيانات لهؤلاء العملاء وان نكون قد قمنا بادخال هذه

البيانات فى الاماكن المخصصه لها فى شيت codes

الان نتعرف على كيفية ادخال البيانات الخاصه بمجموعه من العملاء وذلك فى شيت  codes

وذلك على ان يكون ادخال البيانات كالاتى

1-ان يتم ادخال كود العميل فى العمود f بداية من السطر 3 مع عدم تكرار الكود

2-ان يتم ادخال اسم العميل فى العمود g بداية من السطر 3 مع عدم تكرار الاسم

الان نقوم بادخال بعض البيانات كما هو واضح فى الصوره

yvXRvM.jpg

 

ملوحظه

سوف يتم لاحقا معرفة كيفية انشاء فوم لادخال هذه البيانات دون الحاجه الى الادخال اليدوى

الان وبعد ان انتهينا من ادخال بيانات بعض العملاء

نذهب الى شيت invoice

ثم نقوم بادخال الكود الاتى101 وهو خاص بالعميل عبدالله باقشير فى الخليه  f6

سنلاحظ ان

الخليه d8 والتى يكتب فيها اسم العميل مازالت فارغه

الخليه I8 والتى يكتب فيها تليفون العميل مازالت فارغه

الخليه d10 والتى يكتب فيها عنوان العميل مازالت فارغه

tOeFLg.jpg

 

الان نقوم باضافة موديول جديد ونسميه call_age_data

ثم نقوم بكتابة الكود الاتى فى محرر الاكواد كما فى الصوره

 

lx4O7E.jpg

وكما يظهر فى الصوره انه تم اضافة الكود الى محرر الاكواد

وكما قلنا سابقا ان الكود سوف يكون فى حدث الورقه

وذلك من اجل تنفيذ الكود تلقائيا دون الحاجه الى زر

لذلك نذهب الى محرر الاكواد الخاص بشيت invoice

ثم نضع فيه الكود الذى سوف يقوم باستدعاء الكود السابق

 

gdZju3.jpg

الان نذهب الى شيت INVOICE ثم نكتب كود العميل101 فى الخليه F6

سنلاحظ انه تم استدعاء البيانات الخاصه بالعميل فى الخلايا

كما فى الصوره

ztniM3.jpg

 

شرح الكود

Sub call_agent_data()

وكما قلنا سابقا كلمة sub ,وهى اختصار لكلمة Subroutine وتعنى تنفيذ

مهمه محدده هذه المهمه تم تسميتها ب call_agent_data

Set WS = Worksheets("INVOICE")

   تم تعريف المتغيرws على انه شيت اكسيل المسمى ب invoice
 

Set WS1 = Worksheets("codes")

  المسمى ب تم تعريف المتغيرws1 على انه شيت اكسيل codes 

WS.Cells(8, 4) = ""

هنا يتم تفريغ اى حزف محتوى الخليه الواقعه فى السطر8 والعمود4-- اى الخليه(d4)

فى شيت ws اى فى الشيت المعرف باسم invoice

هذه الخليه هى خليه اسم العميل

WS.Cells(8, 8) = ""

هنا يتم تفريغ اى حزف محتوى الخليه الواقعه فى السطر8 والعمود8-- اى الخليه(h8)

فى شيت ws اى فى الشيت المعرف باسم invoice

هذه الخليه هى خليه تليفون العميل

WS.Cells(10, 4) = ""

هنا يتم تفريغ اى حزف محتوى الخليه الواقعه فى السطر10 والعمود4-- اى الخليه(d10)

فى شيت ws اى فى الشيت المعرف باسم invoice

هذه الخليه هى خليه عنوان العميل

Dim hh As Integer

hh  متغير تم تعريفه على انه عدد صيح

For hh = 3 To 51

هنا تم تعريف قيمه المتغيرhh  على انها تتراوح مابين الرقمين 3 والرقم 51   

او بمعنى ان الكود سوف ينفذ على الاسطر من 3 الى 51

If WS.Cells(6, 6).Value = WS1.Cells(hh, 6) Then

هنا نستخدم قاعده if لوضع شرط معين

هنا نقول انه فى حالة ان الخليه الواقعه فى السطر 6 والعمود 6 اى الخليه f6

فى شيت ws اى فى الشيت المعرف باسم invoice تساوى

الخليه الواقعه فى السطر المعرف ب hh فى العمود 6 اى من الخليه (f6 الى F51)

  اى الخليه f6 فى شيت  ws1 اى فى الشيت المعرف باسم codes يتم الاتى

WS.Cells(8, 4) = WS1.Cells(hh, 7)

سنجد هنا انه فى حالة تحقق الشرط السابق يتم

اعطاء الخليه الواقعه بين السطر8 والعمود 4 اى الخليه ( d8 ) فى شيت ws

اى فى الشيت المعرف باسم invoice يتم اعطائها قيمة الخليه التى تساوى الشرط والواقعه

بين  السطر المعرف ب hh فى العمود 7 اى من الخليه (e7 الى e51)

وهكذا بالنسبه للسطرين التاليين

    

WS.Cells(8, 8) = WS1.Cells(hh, 8)
       WS.Cells(10, 4) = WS1.Cells(hh, 9)
GoTo 2

هنا نقول انه بعد تحقق الشرط وبعد تنفيذ مايتم بعد تحقق الشرط يتم الذهاب الى الرقم2

والرقم 2 قد تم الاشاره اليه فى الكود على انه

2  End Sub

اى نهاية عمل الكود

If WS.Cells(6, 6).Value <> WS1.Cells(hh, 6) Then

وهنا نستخدم قاعدة if ايضا ولكن لوضع شرط اخر داخل نفس الكود

وفى هذا السطر نقول

هنا نقول انه فى حالة ان الخليه الواقعه فى السطر 6 والعمود 6 اى الخليه f6

فى شيت ws اى فى الشيت المعرف باسم invoice لاتساوى(اكبرمن او اقل من)

الخليه الواقعه فى السطر المعرف ب hh فى العمود 6 اى من الخليه (f6 الى F51)

 فى شيت  ws1 اى فى الشيت المعرف باسم codes يتم الاتى

WS.Cells(8, 4) = WS1.Cells(hh, 7)

سنجد هنا انه فى حالة تحقق الشرط السابق يتم الاتى

GoTo 1

والرقم 1 قد تم الاشاره اليه فى الكود على انه

1  MsgBox "هذا العميل غير مسجل من قبل"

اى ظهور رساله تفيد بان الرقم الذى تم ادخاله غير مسجل من قبل

End If

هنا كما قلنا سابقا انه طالما بدأنا بكلمة if لابد ان يكون هناك اقفال بكلمة end if

وهنا نجد ان end if هذه تقفل السطر      

If WS.Cells(6, 6).Value = WS1.Cells(hh, 6) Then

End If

هنا كما قلنا سابقا انه طالما بدأنا بكلمة if لابد ان يكون هناك اقفال بكلمة end if

وهنا نجد ان end if هذه تقفل السطر      

If WS.Cells(6, 6).Value <> WS1.Cells(hh, 6) Then

Next

وكما قلنا سابقا انه طالما بدأنا ب  for فهذا يعنى انه لابد ان يتم اقفال هذه الحلقه  ب next

 

............................................................................................................................................................................................................................

الان نقوم بتجربه الملف المرفق لرؤيه عمل الكود على حده

 

شاهد الفيديو    3-EXE         والمرفق    3-EXCEL

-----------------------------------------------------------------------------------

الان قد انتهينا من شرح

الدرس الثانى ( ج )  كود الثالث--يقوم باحضار بيانات العميل عند كتابة الكود الخاص بالعميل

 

اتمنى ان اكون قد وفقت فى الشرح

 

تقبلوا تحياتى

3-EXCEL.rar

رابط هذا التعليق
شارك

درس جميل من شخص مميز .. بارك الله لك فيما تقدم و جزاك الله عنا كل الخير

 

اعجبتنا فكرة ترقيم تسلسل تفاصيل الفاتورة...نرجو الاستمرار  :smile: 

رابط هذا التعليق
شارك

درس جميل من شخص مميز .. بارك الله لك فيما تقدم و جزاك الله عنا كل الخير

 

اعجبتنا فكرة ترقيم تسلسل تفاصيل الفاتورة...نرجو الاستمرار  :smile: 

 اخى ابو تراب

اشكرك على المتابعه

اتمنى لك التوفيق

تقبل تحياتى

رابط هذا التعليق
شارك

 

بارك الله لك فيما تقدم

و جزاك الله عنا كل الخير

 

اخى

yasiressa

اشكرك على المتابعه

واتمنى لك الاستفاده

تقبل تحياتى

  • Like 1
رابط هذا التعليق
شارك

بسم الله الرحمن الرحيم

والصلاة والسلام على اشرف المرسلين

سيدنا محمد صلى الله عليه وسلم

لقد قدمت سابقا نموذج فاتوره على الاكسيل بدون فورم

وبناء على طلب بعض الاخوه فى شرح كيفيه عمل النموذج

وتلبية لرغباتهم

نتناول طريقه عمل النموذج

ونظرا لضيق الوقت

ان شاء الله يتم تناول درس يوميا على الاقل حتى الانتهاء بإذن الله

..........................................................................

الاخوه الافاضل

الحمد لله فقد انتهينا من شرح الدرس

الاول وهو عباره عن ثلاثة دروس تمهيديه

وهى

اولا--تصميم الفاتوره

ثانيا--انشاء شيت به الاكواد المساعده

ثالثا--انشاء شيت لتجميع بيانات الفواتير المسجله

---------------------------------------------------

الان نبدأ فى شرح الدرس الثانى

وقد انتهينا سابقان من تناول

الدرس الثانى ( أ )  الكود الاول--كود يقوم بعمل تسلسل لرقم الفاتوره

الدرس الثانى ( ب )  الكود الثانى--كود يقوم بعمل تسلسل لبيانات الفاتوره

الدرس الثانى ( ج )  كود الثالث--يقوم باحضار بيانات العميل عند كتابة الكود الخاص بالعميل

 

 

الان نتناول شرح

الدرس الثانى ( ح )  الكود الرابع---كود يقوم باحضار بيانات الصنف عند كتابة الكود الخاص بالصنف

فى هذا الدرس كما هو واضح من العنوان اننا سوف نتعامل مع الاصناف وبياناتها

اذا لابد ان تكون لدينا بيانات لهذه الاصناف وان نكون قد قمنا بادخال هذه

البيانات فى الاماكن المخصصه لها فى شيت codes

 

الان نقوم بادخال بعض البيانات الخاصه بالاصناف  وذلك فى شيت  codes

وذلك على ان يكون ادخال البيانات كالاتى

1-ان يتم ادخال كود الصنف فى العمود A بداية من السطر 3 مع عدم تكرار الكود

2-ان يتم ادخال اسم الصنف فى العمود B بداية من السطر 3 مع عدم تكرار الاسم

3-ان يتم ادخال الوحده فى العمود C بداية من السطر 3 وهنا يمكن تكرار اسم الوحده

4-ان يتم ادخال السعر فى العمود D بداية من السطر 3

وبعد ان نقوم بادخال بعض البيانات كما هو واضح فى الصوره

W7b0E0.jpg

 

الان وبعد ان انتهينا من كتابة بيانات الاصناف كما فى الصوره السابقة

نذهب الى شيت invoice

ثم نقوم بادخال الاكواد الاتيه 1-2-3-4-5 فى الخلايا من   c16 الى c20

سنلاحظ ان

الخلايا d16:d20 والتى يكتب فيها اسم الصنف مازالت فارغه

الخلايا من  e16:e20 والتى يكتب فيها الوحده مازالت فارغه

الخلايا من  f16:f20 والتى يكتب فيها الكميه مازالت فارغه

الخلايا من  g16:g20 والتى يكتب فيها السعر مازالت فارغه

كما فى الصوره

hB7nas.jpg

الان تأتى مرحلة وضع الكود

وسوف نقوم بوضع الكود فى حدث الورقه

وذلك من اجل تنفيذ الكود تلقائيا دون الحاجه الى زر

نقوم بفتح محرر الاكواد ونقوم بكتابة الكود كما هو موضح فى الصوره

 

WpOX8S.jpg

 

قم الان بمسح الاكواد الموجوده فى الخلايا من C16 الى C20

والتى قمنا بادخالها سابقا

ثم نقوم بادخال الاكواد الاتيه 1-2-3-4-5 فى الخلايا من   c16 الى c20

سنلاحظ ان

الخلايا d16:d20 والتى يكتب فيها اسم الصنف لم تعد فارغه

الخلايا من  e16:e20 والتى يكتب فيها الوحده لم تعد فارغه

الخلايا من  f16:f20 والتى يكتب فيها الكميه لم تعد فارغه

الخلايا من  g16:g20 والتى يكتب فيها السعر لم تعد فارغه

كما فى الصوره

V76Xrs.jpg

 

شرح الكود

If Target.Cells.Count <> 1 Then Exit Sub

هذا السطر يمنع حدوث الاخطاء فى حالة مسح اكثر من خليه مع بعضها

If Not Intersect(Target, [c16:c37]) Is Nothing Then

هنا نستخدم قاعده if لتطبيق شرط معين الا وهو

فى هذه السطر نقول انه فى حالة عدم وجود متشابهات داخل النطاق c16:c37 يتم الاتى

If Target.Value = Empty Then

هنا نستخدم شرط اخر فى حالة تحقق الشرط الاول الا وهو

انه فى حالة ان تكون اى من الخلايا من c16:c37 فارغه يتم الاتى

Target.Offset(0, 1) = ""

يتم اعطاء الخليه التى تلى الخليه الفارغه فى النطاق المحدد ب TARGET(C16:C37)

اى التى تلى الخليه الفارغه فى نفس السطر وفى العمود الذى يليها بمقدار عمود واحد فقط لاشئ

بمعنى لو ان الخليه الفارغه هى C20 يتم حزف محتوى الخليه D20 من البيانات

Target.Offset(0, 2) = ""

يتم اعطاء الخليه التى تلى الخليه الفارغه فى النطاق المحدد ب TARGET(C16:C37)

اى التى تلى الخليه الفارغه فى نفس السطر وفى العمود الذى يليها بمقدار عمودين فقط لاشئ

بمعنى لو ان الخليه الفارغه هى C20 يتم حزف محتوى الخليه E20 من البيانات

Target.Offset(0, 4) = ""

يتم اعطاء الخليه التى تلى الخليه الفارغه فى النطاق المحدد ب TARGET(C16:C37)

اى التى تلى الخليه الفارغه فى نفس السطر وفى العمود الذى يليها بمقدار اربعة اعمده فقط لاشئ

بمعنى لو ان الخليه الفارغه هى C20 يتم حزف محتوى الخليه g20 من البيانات

End If

نهاية الشرط If Target.Value = Empty Then

For Each cl In Sheets("codes").[a3:a53]

هنا بداية الكود الخاص باحضار البيانات

هنا يتم استخدام الحلقه التكراريه FOR EACH للبحث فى نطاق محدد

وهنا فى هذا السطر تم تعريف المتغير CI على انه عباره عن الخلايا من A3:A53 فى

شيت CODES والتى سوف تستخدم كنطاق للبحث

If cl = Target Then

هنا نقوم باستخدام القاعده IF لتحديد شرط استخراج البيانات

وهنا نقول انه اذا كان النطاق المسمى  ب CI من A3:A53 فى شيت CODES يساوى

النطاق المسمى TARGET  من C16:C37 فى شيت INVOICE يتم الاتى

Target.Offset(0, 1) = cl.Offset(0, 1)

هنا نقول انه فى حالة تحقق الشرط

يتم اعطاء الخليه التى تلى الخليه التى وقع عليها الشرط فى النطاق المحدد ب TARGET(C16:C37)

اى  التى تليها بمقدار نفس السطر وتليها بمقدار عمود واحد فقط يتم اعطائها قيمة الخليه التى تلى الخليه التى

وقع عليها الشرط فى النطاق  المسمى  ب CI من A3:A53 فى شيت CODES اى الخليه التى

التى تليها بمقدار نفس السطر وتليها بمقدار عمود واحد فقط

للتوضيح اكثر

بمعنى اننا لو كتبنا الرقم 2 فى الخليه C19 يتم البحث عن هذا الرقم فى الخلايا من A3:A53

فاذا كان الرقم موجود ضمن نطاق البحث يتم اعطاء الخليه D19 قيمة الخليه B التى تطابق الرقم2

وهكذا كما فى الصوره

Ml6zsh.jpg

وهكذا بالنسبه للسطرين التاليين

Target.Offset(0, 2) = cl.Offset(0, 2)
Target.Offset(0, 4) = cl.Offset(0, 3)
Exit Sub

هنا نجبر الكود على الخروج وعدم تنفيذ شئ اخر

End If

نهاية الشرط If cl = Target Then

Next

استكمال الحلقه التكراريه  For Each cl

For Each c2 In Sheets("codes").[a3:a53]

هنا نقوم بعمل كود اخر من وظيفته حزف بيانات الخلايا فى حالة ان الكود المدخل غير موجود ضمن نطاق البحث

وهذا السطر تم شرحه من قبل فلا حاجه لاعدة الشرح

If Target <> c2 Then

هنا نقوم باستخدام القاعده IF لتحديد شرط حزف البيانات اى تفريغ الخلايا

وهنا نقول انه اذا كان النطاق المسمى  ب CI من A3:A53 فى شيت CODES اكبر من او اقل من 

النطاق المسمى TARGET  من C16:C37 فى شيت INVOICE يتم الاتى

Target.Offset(0, 1) = ""
Target.Offset(0, 2) = ""
Target.Offset(0, 4) = ""

ايضا هذه السطر تم شرحها من قبل فلا حاجه لاعادة الشرح

MsgBox "هذا الكود غير معرف من قبل"

رساله تفيد بان الكود غير معرف

Exit Sub

هنا نجبر الكود على الخروج وعدم تنفيذ شئ اخر

End If

نهاية الشرط If c2 <> Target Then

Next

 استكمال  الحلقه التكراريه  For Each  c2

End If

نهاية الشرط If Not Intersect(Target, [c16:c37]) Is Nothing Then

End Sub

نهاية عمل الكود

............................................................................................................................................................................................................................

الان نقوم بتجربه الملف المرفق لرؤيه عمل الكود على حده

 

شاهد  المرفق    4-EXCEL

-----------------------------------------------------------------------------------

الان قد انتهينا من شرح

الدرس الثانى ( ح )  الكود الرابع---كود يقوم باحضار بيانات الصنف عند كتابة الكود الخاص بالصنف

اتمنى ان اكون قد وفقت فى الشرح

 

تقبلوا تحياتى

4-EXCEL.rar

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله

الاستاذ / إبرهيم ابو ليله

عمل عطيم وغير معقد وبالشرح استفدنا اكثر

تشكر علي ذلك جزاك الله خير وجعله الله في ميزان حسناتك

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله

الاستاذ / إبرهيم ابو ليله

عمل عطيم وغير معقد وبالشرح استفدنا اكثر

تشكر علي ذلك جزاك الله خير وجعله الله في ميزان حسناتك

اخى

khmb

اشكرك على المتابعه

واتمنى ان يكون الشرح جيدا

لاننى  لست خبير

فى الشرح ولكنى اشرح على قدر الامكان

تقبل تحياتى

رابط هذا التعليق
شارك

 

السلام عليكم ورحمة الله

الاستاذ / إبرهيم ابو ليله

عمل عطيم وغير معقد وبالشرح استفدنا اكثر

تشكر علي ذلك جزاك الله خير وجعله الله في ميزان حسناتك

اخى

khmb

اشكرك على المتابعه

واتمنى ان يكون الشرح جيدا

لاننى  لست خبير

فى الشرح ولكنى اشرح على قدر الامكان

تقبل تحياتى

 

 

السلام عليكم ورحمة الله

اخي في الله إبراهيم ابو ليلة ليس مهما ان تكون خبير المهم توصيل الرسالة بالاسلوب الشيق ولايملك هذا إلا من شخص من الله علية بذلك.

جزاك الله خير

رابط هذا التعليق
شارك

شرح وافي وبالصور اجمل  ... شكرا الله لك و جزاك الله عن كل حرف كتبت

 

تحياتي

اخى ابو تراب

اشكرك على المتابعه للموضوع

واتمنى ان اكون قد وفقت فى شرح الدروس السابقه

تقبل تحياتى

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




×
×
  • اضف...

Important Information