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

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

قام بنشر

السادة الخبراء

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

و الكود يعمل بشكل ممتاز و لكن عندما يتم طلب استدعاء فواتير خاصة بعميل لة عدد كبير من الفواتير فأنة يقوم بأستدعاء جزء فقط من الفواتير و ليس جميع الفواتير الخاصة بهذا العميل

فمثلا عندما يتم طلب استدعاء فواتير العميل الذى كودة 1-300 و الذى لدية عدد 45 فاتورة فأنة يقوم بأستدعاء اول 32 فاتورة فقط و ليس جميع الفواتير

برجاء التجربة على الكود 1-300 و 2-300 حبث انهم لهم العدد الأكبر من الفواتير

حاولت جاهدا معرفة السبب فلم اتمكن من معرفة السبب

 

شكرا جزيلا للمساعدة 

استدعاء فاتورة.rar

قام بنشر

الأستاذ القدير ياسر خليل ابو البراء

ارجو التكرم بالنظر فى حل مشكلتى كعهدك دائما حيث انك الذى تكرمت بتصميم هذا الكود الجميل

و قد قمت بأرفاق الملف مرة اخرة بعد تخفيض عدد الفواتير و اختصارها فى عدد 100 فاتورة فقط لعميل واحد فقط حتى يسهل بحث المشكلة

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

حاولت جاهدا ان افهم سبب المشكلة و لكن للأسف لم استطيع حيث ان الكود مصمم بطريقة المصفوفات الذى لا افهمة تماما

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

 

استدعاء فاتورة.rar

قام بنشر
Sub GrabBills()
    Dim rFind As Range, sAddr As String, Rng As Range, RngDel As Range, SH As Worksheet, R As Range, WS As Worksheet, VarList
    Set SH = Sheets("استدعاء فاتورة")
    Set WS = Sheets("فاتورة")
    VarList = SH.Range("A3").Value
    
    Application.ScreenUpdating = False
        SH.UsedRange.Offset(3).Clear
        If IsEmpty(SH.Range("A3")) Then MsgBox "أدخل كود العميل المطلوب استدعاء فواتيره", 64: Exit Sub
        With WS.Columns(3)
            Set rFind = .Find(VarList, LookIn:=xlValues, LookAt:=xlWhole)
            If IsEmpty(SH.Range("C3")) Then
                If Not rFind Is Nothing Then
                    sAddr = rFind.Address
                    Set RngDel = rFind.CurrentRegion
                    Do
                        Set RngDel = Union(RngDel, rFind.CurrentRegion)
                        Set rFind = .FindNext(rFind)
                        
                    Loop While rFind.Address <> sAddr
                    sAddr = ""
                End If
            Else
                If Not rFind Is Nothing Then
                    sAddr = rFind.Address
                    Do
                        If Month(rFind.Offset(-3, -1)) = SH.Range("C3") Then
                            If RngDel Is Nothing Then
                                Set RngDel = rFind.CurrentRegion
                            Else
                                Set RngDel = Union(RngDel, rFind.CurrentRegion)
                                
                            End If
                        End If
                        Set rFind = .FindNext(rFind)
                    Loop While rFind.Address <> sAddr
                    sAddr = ""
                End If
            End If
        End With
        
        If Not RngDel Is Nothing Then
            RngDel.Copy SH.Range("A5")
        End If
        
        Set rFind = Nothing
        Set RngDel = Nothing
        Set SH = Nothing
    Application.ScreenUpdating = True
End Sub

أخي الكريم طارق طلعت

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

عموماً ..إليك الكود التالي وإن شاء الله يفي بالغرض ويعمل مع كود العميل ومع الشهر إذا أردت التعامل مع شهر معين في الخلية C3

 

 

Grab Bills YasserKhalil.rar

  • Like 1
قام بنشر

الأخ القدير ياسر خليل

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

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

مرة اخرى شكرا جزيلا

  • Like 1
قام بنشر

أخي الحبيب طلعت

لا داعي للاعتذار ..أردت فقط التنويه ..لا أكثر ولا أقل ..

بالنسبة للمشكلة .. فإن سببها أنني اعتمدت في المرة الأولى على دالة معرفة لاستخراج العناوين التي تطابق عملية البحث .. واكتشفت بعد طرح الموضوع في منتدى أجنبي أن المخرجات من هذه الدالة يجب ألا تزيد عن 255 حرف ... فالعناوين للـ 46 فاتورة يتعدي عدد حروفها 255 .. ولذلك لم تظهر غير 32 فاتورة كما ذكرت ..

العنوان بيكون بهذا الشكل $C$243 على سبيل المثال (طول العنوان بهذا الشكل يساوي 6) وبالتالي عند وصول الخلايا للعنوان مثلاً $C$1945 يكون طول العنوان (7)

المهم أن الدالة تكتفي بما يقارب 255 حرف وبقية العناوين لا يتم التعامل معها ..

ظهرت المشكلة معك بعد كبر حجم الملف ...

أتمنى أن يكون الكود الجديد وافي بالغرض

تقبل تحياتي

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.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information