اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

دعوة للخبراء في درس عمل فاتورة ديناميكية رهيييبة


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

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

وكما عودناكم في كل جديد نلتمس من بستان معرفتكم زهرة تبعث رياحينها للناس الطيبة أمثالكم.

تم تجهيز فكرة لعمل فاتورة ديناميكية (بدون فورم)، وبها أفكار إبداعية متنوعةـ وحتى تتمازج الأفكار سأطرحها بطريقة متسلسلة أقف عند بعض الأكواد بانتظار مشاركة الخبراء، وسنعتمد الكود السهل والقصير أملاً أن تعم الفائدة للجميع.

ترقبونا

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

جزاك الله خيراً أ.ايراهيم وزادك الله حرصاً على كل ما هو جديد..

وكما تعودنا سنقوم ببناء الفااتورة من البداية حتى النهاية، وسنتطرق بها إلى كيفية إنشاء قاعدة بيانات بأسس علمية إلى الترحيل والإستدعاء والطباعة إلى حفظ ورقة العمل.. ونطلب منكم التفاعل وتزويدنا بما ترونه مناسباً.

 

بإذن الله سنتعامل مع هذا الملف المبدئي:

فاتورة.rar

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

 

السؤال الأول: ما هو الكود الذي يقوم بالعمليات التالية بعد الضغط مرتين على رقم المنتج ليجعله ينتقل إلى الفاتورة كالتالي:

vid01.gif

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

الإجابة عن السؤال الأول

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim Last As Integer, Qn As String
If Target.Column = 8 And Target.Row > 3 And Target <> "" Then
Cancel = True
Last = Cells(Rows.Count, 1).End(xlUp).Row + 1
Qn = InputBox("أدخل الكمية", "الكمية")
If Not IsNumeric(Qn) Then Exit Sub
    With Cells(Last, 1)
    .Value = Last - 8: .Offset(, 1).Value = Target.Offset(, 1).Value
    .Offset(, 2).Value = Val(Qn): .Offset(, 3).Value = Target.Offset(, 2).Value
    .Offset(, 4).Value = Val(Qn) * Target.Offset(, 2).Value: .Offset(1, 3).Value = "ÇáÅÌãÇáí"
    .Offset(1, 4).Value = WorksheetFunction.Sum(Range("E9:E" & Last ))
    End With
    With Range(Cells(Last, 1), Cells(Last, 5))
    .Borders.Value = 1: .Borders.ColorIndex = 48
    End With
End If

End Sub

 

تم تعديل بواسطه أبو حنــــين
  • Like 2
رابط هذا التعليق
شارك

ما شاء الله عليك يا أستاذنا أبو حنين ، دائماً سباق، وطريقتك جميلة جداً، يا حبذا إرفاق المرفق حتى نتعامل معه إلى النهاية،

بقي لديك ثلاثة أمور وهي:

1- جعل الكمية الإفتراضية  = 1

2- إضافة عبارة "شكراً لتسوقكم" مع تضليلها.

3- تضليل سطر وترك سطر في الفاتورة باللون الرمادي

 

وتقبل تحياتي

 

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

بارك الله فيك .. أشكر تفاعلك البناء.. بقي تلوين سطر دون الآخر

 

وسنشرح بعض الأمور المتعلقة بالكود لاحقاً .. انتظرونا

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

عظمة على عظمة.. أستاذي أبوحنين.. ويكأنك بتقول لي ليه تبيع مويه في حارة السقايين.. تُشكر على هذا العمل الرائع.

أما بالنسبة لي فقد أنجزتها بالكود التالي:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("h4:h25")) Is Nothing Then

r = 9
Sum = 0
Do While Cells(r, 1) <> ""
Sum = Sum + Cells(r, 5)
r = r + 1

Loop
On Error GoTo ErrorHandler
qty = InputBox(Prompt:=" ÃÏÎá ÇáßãíÉ ÇáÎÇÕÉ È " & Target.Offset(0, 1).Value, Title:="ÅÏÇÑÉ ÇáãÊÌÑ", Default:=1)
If Not IsNumeric(qty) Then Exit Sub
Cells(r, 1) = Cells(r - 1, 1) + 1
Cells(r, 2) = Target.Offset(0, 1).Value

Cells(r, 3) = qty
Cells(r, 4) = Target.Offset(0, 2).Value
Cells(r, 5) = Cells(r, 3) * Cells(r, 4)
End If
Cells(r - 1, 1).Select
Range(ActiveCell, ActiveCell.End(xlToRight)).Borders.LineStyle = xlNone
Cells(r, 1).Select
Range(ActiveCell, ActiveCell.End(xlToRight)).Borders(xlEdgeBottom).Weight = xlThin
Range(ActiveCell, ActiveCell.End(xlToRight)).Offset(2, 0).Interior.Color = xlNone
Cells(r + 1, 3).Font.Color = vbBlack
Cells(r + 1, 3) = ""

Cells(r + 1, 4) = "ÇáÅÌãÇáí"
Cells(r + 1, 5) = Sum + Cells(r, 5)
Range(ActiveCell, ActiveCell.End(xlToRight)).Offset(3, 0).Interior.Color = RGB(15, 36, 62)
Cells(r + 3, 3) = "ÔßÑÇð áÊÓæÞßã"
Cells(r + 3, 3).Font.Color = vbWhite
shadding
Exit Sub

ErrorHandler:
Cells(r, 1) = 1
Resume Next

End Sub
Sub shadding()
Dim i As Integer
i = 10
Do
i = i + 1
Loop Until Cells(i, 1).Value = ""
i = i - 1

If Cells(10, 1).Value = "" Then
Exit Sub
Else

Dim Col As Long
  Dim Row As Long
  For Col = 1 To 5
    For Row = 10 To i Step 2
      Sheet1.Cells(Row, Col).Interior.Color = RGB(200, 200, 200)
    Next Row
  Next Col
  
End If
End Sub

 

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

تعقيب على ما سبق:

استوقفتنا بعض الأمور من أخي أبو حنين.

Qn As String

في هذا الكود يتوجب على Qn أن تكون Integer بل الأصح أن تكون Byte حيث أن الكمية لا تتعدى 255.

===========================================================

 

Qn = InputBox("أدخل الكمية", "الكمية")
If Not IsNumeric(Qn) Then Exit Sub

معنى الكود أنه إذا لم تكن الكمية رقم فسيتم انهاء الدالة (جرب إدخال نص)

ولنزيد الكود جمالاً نضيف تحذير بأنه لم يتم إدخال رقم قبل الخروج من الدالة.

=============================================

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

On Error GoTo ErrorHandler
.
.
Cells(r, 1) = Cells(r - 1, 1) + 1

استكشاف الأخطاء وإصلاحها: هذا الكود يقوم بعملية الترقيم التلقائي، حيث يقوم بإضافة واحد على الخلية الحالية، بمعنى أن الخلية الحالية=الخلية السابقة+1

وهذه المعادلة تنطبق على جميع الخلايا فيما عدا الخلية الأولى، حيث تتكون الخلية الأولى على نص العنوان "م"، فبذلك لا يمكن جمع نص مع العدد واحد، وفي هذه الحالة أٌجبر الكود بأن يعتبرها أول رقم من الترقيم (يعني واحد).. ويتم توجيهها إلى الكود التالي:

ErrorHandler:
Cells(r, 1) = 1
Resume Next

 

 

وتقبلوا تحياتي.. ترقبوا السؤال التالي.

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

السؤال التالي:

إضافة زر يقوم بحذف بيانات الفاتورة وإضافة فاتورة جديدة.. وقد سبقنا بها أبوحنين في الجزئية الأولى.

فما هو الكود الذي يحقق ما سبق كالتالي:

b01.png

 

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

السلام عليكم

تم عمل المطلوب مع إضافة خاصية حفظ الفاتورة الحالية تحسبا لاستدعائها او تعديلها

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

ان كانت هناك اخطاء سنستدركها حالة اكتشافها

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

 

2-فاتورة.rar

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

يا خطيييير

لكن يا حبذا جعل طريقة الدفع الإفتراضية هي نقداً حتى لا تكون مصدر إزعاج للبائع.. فيكفي تغيير رقم الفاتورة.

وثانياً: نريد أن تكون أيام الأسبوع بالعربي.. ابحث عن الكود البديل.

تحياتي

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

كود جميل لأيام الأسبوع بالعربي ومن روائع أبوحنين

Nmb = Weekday(Range("C5").Value)
Art = Array("الاحد", "الاثنين", "الثلاثاء", "الاربعاء", "الخميس", "الجمعة", "السبت")
For i = LBound(Art) To UBound(Art)
If Nmb = i + 1 Then Range("B5").Value = Art(i)
Next

وهذا كود آخر مختصر

Cells(5, 2) = Choose(Weekday([today()]), "الأحد", "الأثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعه", "السبت")

 

المرفق:

فاتورة ديناميكية2.rar

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

كيفية معرفة كود اللون:

لمعرفة لون خلفية الخلية نتبع التالي:

1- نقف على الخلية لمعرفة لونها.

c00.png

2- من قائمة الألوان اختر أوان إضافية.

c01.png

3- ستجد رقم اللون بنظام الألوان RGB.

c02.png

 

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

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

المهمة التالية:

نضيف كود يجعلنا نمنع تكرار الصنف في الفاتورة، بل نزيد في الكمية.. بمعنى أننا إذا أضفنا صنف موجود في الفاتورة فإنه لا يدرجه في سطر جديد، بل يبحث عن هذا الصنف ويزيد كميته.

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

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

جمييييل بارك الله فيك.. لكن الإجمالي لم يتغير :Rules:، وبعدين راح تخسر في المبيعات :smile:، واللي ببلاش كثر منه.

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

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