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

AbuuAhmed

الخبراء
  • Posts

    1074
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    17

مشاركات المكتوبه بواسطه AbuuAhmed

  1. دع الـ B الأولى كما هي وبدل في الـ B الثانية:
     

    With Range("B3:C" & LR)

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

  2. أضف هذا السطر:
     

    .Replace "عبد ال", "عبدال"

    ليصبح كامل الكود كالتالي:
     

        Dim ch
        
        LR = Cells(Rows.Count, 3).End(xlUp).Row
        With Range("B3:B" & LR)
            For Each ch In Array("إ", "أ", "آ")
                .Replace CStr(ch), "ا"
            Next
            .Replace "ة", "ه"
            .Replace "ى", "ي"
            .Replace "عبد ال", "عبدال"
        End With

    أشك أن هذا السطر مقلوب:
     

    .Replace "ى", "ي"

     

    • Like 2
  3. انتبهت أن بعض الدخول يكون مساءً فتوقعت أن هناك خطأ من الموظفين ومع التدقيق وجدت أنهم يخرجون صباحا لليوم التالي أي أنهم يعملون نوبة/شفت ليل.
    نسخة مدققة ومنقحة كثيرا.

     

    AttendanceIII_02.xlsm

    • Like 1
  4. نسخة أخيرة منقحة.
     

    Sub GetNames()
        Dim Row As Long, lastRow As Long, firstRow As Byte, valueRow As Byte
        Dim Col As Integer, lastCol As Integer, firstCol As Byte, Names As String
        
        Application.ScreenUpdating = False
        Sheets("ورقة1").Select
        
        '------------------ التحديد اليدوي ----------------
        valueRow = 4    'سطر البيانات المطلوبة
        firstRow = 6    'أول سطر في الجدول
        firstCol = Range("B1").Column   'أول عمود في الجدول
        lastCol = Range("M1").Column    'آخر عمود في الجدول
        '--------------------------------------------------
        lastRow = Cells(1, 1).SpecialCells(xlLastCell).Row
        
        For Row = firstRow To lastRow
            Names = ""
            For Col = firstCol To lastCol
                If Cells(Row, Col) <> "" Then
                    Names = Names & IIf(Names = "", "", " - ") & Cells(valueRow, Col).Text
                End If
            Next Col
            Cells(Row, lastCol + 1) = Names
        Next Row
        
        Application.ScreenUpdating = True
        MsgBox "تم", vbInformation, "جلب الأسماء"
    End Sub

     

     

     

    DATA_07.xlsb

  5. حياك الله يا إبراهيم
    نسخ ولصق يدويا.
    أو افتح موضوع جديد تطلب فيها كود لفتح ملف الوورد ونسخ البيانات للذاكرة ثم لصقه في الإكسل ابتداء من الخلية A2
    أما إذا كانت البيانات ضخمة فستحتاج إلى عمل كود سلسلة يقوم بنسخ ولصق سجل سجل.
    موفق أخي.

  6. 1 ساعه مضت, samycalls2020 said:

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

    كلام غير دقيق، نعم في شفرتي هناك مشكلة واحدة لاختلاف في دالة التنسيق بين الإكسل والبيزك، ففي الإكسل "General" تكون في الأكسس "General Number"
    وهذا سبب بخطأ واحد فقط لرقم 52 والحل إما بعمل تبديل التنسيق للخلية أو تبديله في الشفرة أو نأخذ قيمة Text بدلا من Value للخلية المصدر.

    كما أنصحك بترك التفاضل بين الخبراء لأننا خضنا معركة كبيرة مع مالك الموقع لتجنب هذا التفاضل بتغيير الوصف من "أفضل إجابة" إلى "تمت الإجابة"، فغالبا تكون بها غبن للآخرين، فالأستاذ عبدالله أسس للكود وقبل طلبك الأخير باستخدام التنسيق، وكذلك الأستاذ محمد هشام قدم حله بعد اطلاعه على الحلين السابقين واستفاد من المقارنة وقد عدل مرفقه بعدها.

    لا يهمني اختيار جوابي كما فعلت ولا يعني ملاحظتي لك التقليل من جهد أساتذتي فإن أمكنك إعطاء الاختيار لأحد أساتذتي فافعل. 

    • Like 1
    • Thanks 1
  7. بإذن الأستاذ عبدالله
    ضع سجل البداية في متغير يحميك من الأخطاء:
     

    firstRow = 5	'السجل المطلوب
    For rowIndex = firstRow + 1 To lastRow
    	names = ""
       	For colIndex = 2 To 13
       		If ws.Cells(rowIndex, colIndex).Value <> "" Then
             	names = names & IIf(names = "", "", " - ") & ws.Cells(firstRow, colIndex).Value
       		End If
      	Next colIndex
       	ws.Cells(rowIndex, 14).Value = names
    Next rowIndex

     

    • Like 2
  8. في 11‏/2‏/2025 at 09:54, dd13901390 said:

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

    عدلت على مثالك ومنها تبديل نوع الحقول من نصي إلى رقمي وبعض إجراءات التحكم وكذلك تحسين شكل النموذج أيضا.

    bmiTest_03.accdb

  9. مع الاعتذار، ملاحظة "فنية" في الكود، فهو عمليا صحيح 100% ومنظم بشكل جميل.
    الملاحظة هو هناك زيادة في الشرط غير ضارة يمكن إزالتها للاختصار بهذا الشكل:
     

            If bmi < 16.5 Then
                Me.ww = "نقص حاد بالوزن"
            ElseIf bmi < 18.5 Then
                Me.ww = "نقص بالوزن"
            ElseIf bmi < 25 Then
                Me.ww = "وزن مثالي"
            ElseIf bmi < 30 Then
                Me.ww = "زيادة في الوزن"
            ElseIf bmi < 35 Then
                Me.ww = "بداية سمنة"
            Else
                Me.ww = "سمنة مفرطة"
            End If

     

  10. إذا الكسر مقتطع من رقم كسري مثلا 6.5 فهذا يعني ستة دينار ونصف الدينار وبما أن الدينار يساوي 1000 فلس فنصفها يعني 500 فلسا وليس خمسة فلوس.

    ثم أن جمع فلس فلوس وليس أفلاس
    عموما وجود الفاصلة العشرية في الفلوس شيء غريب.
    على كل كان الحل عندك وبأكثر من خيار ولكن يبدو أنك لم "تهضمه".
    يفضل أن لا تتجاهل أي واحد ممن سعى لخدمتك حتى وإن لم تجد في محاولته مبتغاك، كلامي للكل وليس لي.

    جرب أن تشغل الاستعلام أكثر من مرة وأعد مراجعة النتائج.
    موفق.

    • Thanks 1
  11. من عيوب برامج الحضور عدم الاهتمام بحقل نوع التسجيل دخول أم خروج وبفقدان هذا الحقل في البرنامج سيكون غير عملي ومرهق جدا للمنشآت التي تعمل بنظام النوبات/الشفتات كالمصانع التي تعمل بثلاث نوبات. وبرمجيا الأمر سهل ولكن يبدو الضعف من مبرمجي هذه البرامج.

    أخي @ابوخليل لنفس الموضوع ونفس السائل في منتدى الاكسل عملت على تنظيم البيانات قد تستفيد منها لمعالجة بعض التداخلات وغياب بعضها.

    أنا من نصحته إلى اللجوء إلى منتدى الأكسس لأن معالجة الأمر بالإكسل به صعوية.

    لم أطلع على محاولتك إلى الآن، الليلة إن شاء الله.

  12. وعليكم السلام
    موضوعك شائك، ومن أصعب الأمور التي تحتاج إلى سيطرة وخصوصا الموضفين غير الملتزمين بالتعليمات.
    الموضوع يحتاج إلى كتابة شفرة وربما لو تم بقاعدة بيانات أكسس يكون أسهل.
    أنا ابتدأت ولم أشأ أن أتراجع، فما عملته لك ليس عمل برمجة أو مبرمج بل هو عمل موظف شؤون موظفين أو سكرتاريا.
    عموما هذا ما لدي، أنصحك بالاستعانة بخدمات مبرمجي الأكسس ولا يهونون مبرمجي الإكسل.

    المصنف_03.xlsx

  13. اللهم بارك لنا في شعبان وبلغنا رمضان

    فلنكن أكثر احترافية

    اضطررت لعمل الاختبار والمقارنة استخدام عدد سجلات ضخم لتوسيع مقدار الفرق بين الشفرات وكما ذكرت لكم أن السجلات بلغت مليون ونصف سجل.

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

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

    قمت قبل بدء عمل أي شفرة بعد فتح النموذج بالذهاب إلى آخر سجل ثم العودة إلى أول سجل وعمل Maximize وأحيانا أكررها عندما أشعر أن النظام لا يزال يقوم بتجهيزاته، ثم أذهب إلى الصفحة التي تحوي السجل مئة للتأكد من اختفاء العلامة وتبديل قيمة السجل 99.

    أرجع للجدول لفحص نتائج حقل
    y_n وهل تمت بنجاح.

    ملاحظات:

    - شفرتي وشفرة الأستاذ جعفر هي نفسها تماما عدا عبارة واحدة في البداية لتحديث السجل قبل تشغيل عبارة الـ sql فلذلك ليس هناك فرقا يذكر وكان المفترض أن استبعد أحدهما في المقارنة.
    - شفرة الأستاذ أبو عارف، عند تبديل قيمة السجل 99 تحتفظ بقيمة السجل 100 وربما بسبب "الحدث" وطريق حفظ السجل، لذلك تم استبعادها، وكذلك حتى لو تم إصلاح الخلل فلن يكون أداؤها سريعا لأن عبارة التحديث لكل السجلات.
    - شفرة الأستاذ فوكش لا تقوم بتحديث الحقل، لذلك تم استبعادها.
    - شفرتا الأستاذين خليفة وأبوجود مشكلتهما في عدم قيامهما بالفلترة قبل التحديث.


    توصيات:

    - لا بد من عمل الفلترة قبل التحديث الجماعي لتسريع المعالجة.
    - يفضل عمل فهرس للحقول التي يتم فيها البحث والفلترة للتسريع أيضا.
    - مستغرب أن شفرتي أبوجود وخليفة أعطتا وقتا أطول مع الحقل المفهرس، وهذه تحتاج إلى تحليل ودراسة.
     

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

    • Thanks 1
  14. سأرجع لكم الليلة إن شاء الله لتقديم بعض الملاحظات، مرفع لكم قاعدة البيانات بدون سجلات ومع بعض التعديلات في الأكواد لإدخال باقي المشاركين في المقارنة، ولكن للأسف تم استبعاد كود مشاركين اثنين حيث كانت نتائجهما خاطئة.

    image.png.408e2faf2e93ad91c98c971828195726.png

    1624.Stress_Test_20.mdb

    • Like 1
    • Haha 1
  15. 22 دقائق مضت, jjafferr said:

    بسبب تقارب طرق الكود ، تم الاستعانه بـ 300,000 سجل ، ووضع البيانات على كمبيوتر آخر على الشبكة

    أشكرك كثيرا سأقوم بإعادة المقارنة بعد عمل فهرس لحقل y_n
    توني أنتبه أن حلك الثاني نفس عبارة sql لحلي وكأني عملت نسخ ولصق لحلك! لم أنتبه له من قبل!!
    صدق المثل القائل "إذا عرف السبب بطل العجب" 🙂 

    • Like 1
  16. 10 دقائق مضت, jjafferr said:

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

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

    سنقبل بالنتائج منك ولن نفحص بعدك ولا داعي لرفع قاعدة البيانات أيضا.

     

    اسمح لي أطلب منك فأنا أتواصل معكم ومسغول في مشروع برمجة بعيدا عن الأكسس والفي بي أي.

×
×
  • اضف...

Important Information