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

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

قام بنشر

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

بدون عنوان.png

  • Like 1
قام بنشر

السلام عليكم 

اذا تقصد الفرز من الاعلى رصيد الى الاقل رصيد استخدم الكود التالي

Sub ترتيب_تنازلي()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("ورقة1")

    With ws
        .Range("A4:E6").Sort Key1:=.Range("E4:E6"), Order1:=xlDescending, Header:=xlNo
    End With
End Sub

ويمكنك نعديل نطاق البيانات من الكود

الملف

عملاء.xlsb

  • Like 1
قام بنشر (معدل)

جرب هدا 

Option Explicit
Sub SortData()
    Dim WS As Worksheet: Set WS = Sheets("ورقة1")
    Dim lastRow As Long, tmp As Long, col As Variant
    Application.ScreenUpdating = False
    tmp = 0
    On Error Resume Next
    tmp = WS.Columns("B").Find("الإجمالي", LookIn:=xlValues, LookAt:=xlWhole).Row
    On Error GoTo 0
    If tmp > 0 Then
        lastRow = tmp - 1
        WS.Range("B4:E" & lastRow).Sort Key1:=WS.Range("E4:E" & lastRow), Order1:=xlAscending, Header:=xlNo
    End If
    For Each col In Array("C", "D", "E")
      With WS.Cells(tmp, col)
        .Formula = "=SUM(" & col & "4:" & col & lastRow & ")": .Value = .Value
      End With
    Next col
    Application.ScreenUpdating = True
End Sub

فرز عملاء.xlsm

تم تعديل بواسطه محمد هشام.
  • Like 1
قام بنشر

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

 على ملفي الخاص فأرجو منكما تطبيق الكود على ملفي علما بأن الحقل المراد فرزه هو l6-l80 

مديونية 2025م.xls

قام بنشر (معدل)
3 ساعات مضت, الموسطي said:

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

 على ملفي الخاص فأرجو منكما تطبيق الكود على ملفي علما بأن الحقل المراد فرزه هو l6-l80 

 

جرب الملف  تم العمل على  ورقة1

مديونية 2025م.xls

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

الملاحظ أن الكود لا يعمل حيث أن العمود المراد فرزه هو l6-l75 ولكن لا يتم الفرز حيث هناك أرقام كبيرة تحت وأرقام مصفرة بالوسط فأرجو التعديل على الكود 

قام بنشر (معدل)

اخونا الفاضل 

الكود الظاهر في الصورة ليس هو الكود الموجود في اخر ملف ارفقته اليك 

المشكلة انك كل مرة ترفق ملف مخنلف عن الاخر وهذا يلزم التعديل على الكود

هذا طلبك في مشاركتك ما قيل الاخيرة

في 9‏/2‏/2025 at 09:57, الموسطي said:

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

 على ملفي الخاص فأرجو منكما تطبيق الكود على ملفي علما بأن الحقل المراد فرزه هو l6-l80 

 

كان طلبك فرز البيانات  l6-l80

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

ثم تغير طلبك في ملفك الاخير  تطاق فرز البيانات  l8-l73 لان الصف 74 اصيح مجاميع للاعمدة

واصبح  الصف 6 رؤوس عناوين وبه خلايا مدمجة فمن الطبيعى ظهور الخطأ

اليك كود يتعامل مع اخر ملف ارفقته انت ويعمل جيدا I8:I73

Sub SortData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("ورقة1")

    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ws.Range("I8:I73"), Order:=xlDescending
        .SetRange ws.Range("A8:AH73")
        .Header = xlNo
        .Apply
    End With
End Sub

الملف

المصنف4.xlsb

 

تم تعديل بواسطه عبدالله بشير عبدالله
  • تمت الإجابة
قام بنشر (معدل)

السلام عليكم

8 ساعات مضت, الموسطي said:

هل لي بسؤال أخير: كيف أستطيع نقل كود من ملف إلى آخر ويختلف معه في الامتداد وعمود الفرز؟

ساشرح لك بمثال 

لنفرض ان الملف 1 به الكود الثالي

Sub SortData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("ورقة1")

    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ws.Range("I8:I73"), Order:=xlDescending
        .SetRange ws.Range("A8:AH73")
        .Header = xlNo
        .Apply
    End With
End Sub

وتريد تقل الكود الى الملف  2 حيث تريد عمود الفرز مثلا العمود  M واول صف به بيانات هو الصف 10 واخر صف به بيانات هو الصف 120 واول عمود به بيانات  B واخر عمود به بيانات هو العمود  BA

الخطوات :-

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

السطر في الكود             .SortFields.Add Key:=ws.Range("I8:I73"), Order:=xlDescending
السطر السابق خاص بالعمود المطلوب فرزه  I8  تعنى  بداية فرز البيانات  الصف 8 للعمود  I    تهاية الفرز لتفس العمود الصف 73

الان تريد ان تعدل في السطر حسب الملف2 

الملف 2   المطلوب عمود الفرز M واول صف به بيانات هو الصف 10    فتكتب بدل  M10  -I8  واخر صف 120 فنستبدل  M120 - I73  فيكون السطر النهائي

             .SortFields.Add Key:=ws.Range("M10:M120"), Order:=xlDescending

وكذلك يتم التغيير في السطر
 

        .SetRange ws.Range("A8:AH73")                 هذا النطاق يحتوي على جميع الخلايا من العمود A إلى AH ومن الصف 8 إلى 73.

,والملف 2  الخلايا  من العمود Bإلى BAومن الصف 10إلى 120.

فيصبح     SetRange ws.Range("B10:BA120")      
فيصبح الكود النهائي

Sub SortData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("ورقة1")

    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ws.Range("M10:M120"), Order:=xlDescending
        .SetRange ws.Range("B10:BA120")
        .Header = xlNo
        .Apply
    End With
End Sub
 

بالتوفيق

تم تعديل بواسطه عبدالله بشير عبدالله
  • Like 3
قام بنشر

السلام عليكم استبدل السطر 

        .SortFields.Add Key:=ws.Range("I8:I73"), Order:=xlDescending

بهذا السطر

        .SortFields.Add Key:=ws.Range("I8:I73"), Order:=xlAscending

لاحظ الكلمة الاخيرة تغيرت

طبعا  هذا الترتيب  للنطاق I8:I73

بالتوفيق

  • Like 1
زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

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

Important Information