وعليكم السلام أخي الكريم محمد عبد السلام
في الحقيقة يمكنني أن أختصر في المساعدة وأقوم برفع الملف بعد التعديل عليه ولكني لن أفعل ذلك ؛ لأن الهدف من المنتدى تعليمي وليس خدمي. وبمشاركتي بهذا الشكل ستكون الاستفادة لك ولغيرك ولي أنا أيضاً (من حيث توثيق الخطوات والشرح)
** بما أن التعامل مع ورقة العمل المسماة Sheet1 لذا يفضل أن نقوم بإعلان متغير من النوع ورقة عمل في أول الموديول الخاص بالفورم UserForm1
CODE
Option Explicit
Dim ws As Worksheet
لاحظ أنني أضفت سطر في بداية الكود وهذا السطر يجبرك على تعريف المتغيرات إذا لم يكن تم تعريفها في الأكواد الموجودة.
** الآن وبعد أن قمنا بالإعلان عن المتغير يلزم تعيين قيمة لهذا المتغير وستكون القيمة هي ورقة العمل المسماة Sheet1 ، وأنسب مكان لتعيين قيمة المتغير ws هو حدث بدء تشغيل الفورم UserForm_Initialize
وهذا هو الكود الخاص بحدث بدء التشغيل حيث قمت بإضافات بسيطة وهي مسح محتويات الليست بوكس قبل تعبئة الليست بوكس وستعرف لاحقاً السبب في إضافة هذه الجزئية.
CODE
Private Sub UserForm_Initialize()
Dim lr As Long, i As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
With Me.ListBox1
.Clear
.ColumnCount = 3
lr = ws.Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To lr
.AddItem ws.Cells(i, 1).Value
.List(ListBox1.ListCount - 1, 1) = ws.Cells(i, 2).Value
.List(ListBox1.ListCount - 1, 2) = ws.Cells(i, 2).Row
Next i
End With
End Sub
يقوم الكود السابق بتعيين ورقة العمل ws وهو الورقة المسماة Sheet1 ، ثم نبدأ في التعامل مع الليست بوكس الموجود على الفورم ListBox1 ، ونقوم بمسح محتويات الليست بوكس باستخدام الأمر Clear ، ثم تحديد عدد الأعمدة في الليست بوكس وهي هنا 3 أعمدة ، ثم حلقة تكرارية لتعبئة الليست بوكس بالصفوف الموجودة في ورقة العمل من الصف الرابع وحتى آخر صف به بيانات على أن يكون الليست بوكس في العمود الأول يساوي قيمة الخلية في العمود الأول ، وأن يكون الليست بوكس في العمود الثاني هو قيمة الخلية في العمود الثاني ، وأن يكون الليست بوكس في العمود الثالث هو رقم الصف الموجود به البيانات في ورقة العمل.
(الكود السابق موجود بالفعل في ملفك لكنني أضفت بعض التغييرات البسيطة)