أخى الفاضل أ.الجموعي
لا أجيد الشرح ولكن هذه محاولة مني لإيصال الفكرة...أرجو أن أكون وفقت في ذلك
Sub GetUniques()
'عند حدوث أى خطأ يذهب الى 1
'وهناك ننهي الكود
On Error GoTo 1
'تعريف المتغيرات
Dim S As Object, c, m As Variant, i, k, LastR, LastR2 As Long, ws, ws2 As Worksheet
Application.ScreenUpdating = False
'تعريف ورقة العمل التى سنجلب منها القائمة المنسدلة
Set ws = ThisWorkbook.Sheets("المبيعاتSales")
'تعريف ال
'Scripting Dictionary
'الذي سيحوي البيانات الفريدة
Set S = CreateObject("Scripting.Dictionary")
'تعريف الورقة التى ستكون بها القائمة المنسدلة
Set ws2 = ThisWorkbook.Sheets("كشف حساب عميل")
'ايجاد اخر صف بالورقة التى سنحضر منها البيانات
LastR = ws.Cells(Rows.Count, 4).End(xlUp).Row
'عمل حلقة تكرارية من بداية النطاق الذي به البيانات حتى اخر صف بهذا النطاق
'القيم الفريدة يتم وضعها في ال
'Scripting Dictionary
'حتى يتم ايجاد البيانات بدون أى تكرار
m = ws.Range("D4:D" & LastR)
For k = 1 To UBound(m, 1)
S(m(k, 1)) = 1
Next k
'أصبح لدينا الآن
'Scripting Dictionary
'يحوي القيم الفريدة في النطاق الذي حددناه
'نذهب الى ورقتنا الأصلية التى ستحوي القائمة المنسدلة
'نمسح البيانات من
'z500 to z700
ws2.Range("Z500:Z700").ClearContents
'نحذف القائمة المنسدلة الموجودة بالخلية
'F1
ws2.Range("F1").Validation.Delete
'بنقول هنا بداية من
'Z500
'وبطول عدد القيم الموجودة بال
'Scripting Dictionary
'قم بكتابة القيم الموجودة به
ws2.Range("Z500").Resize(S.Count) = Application.Transpose(S.keys)
'كده البيانات الفريدة أصبحت موجودة لديك بالشيت
'بداية من الخلية
'Z500
'نشوف قيمة آخر صف بعد ان تم وضع البيانات
LastR2 = ws2.Cells(Rows.Count, "Z").End(xlUp).Row
'يتم عمل قائمة منسدلة في الخلية
'F1
'بدايتها الخلية
'z500
'ونهايتها
'z&LastR2
'الذي حصلنا عليه
With ws2.Range("F1").Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:="=$Z$500:$Z$" & LastR2
'تجاهل الفراغات في القائمة المنسدلة
.IgnoreBlank = True
.InCellDropdown = True
End With
Application.ScreenUpdating = True
1 End Sub
تحياتي
lماشاء الله
الفكرة وصلت
بارك الله فيك
أستاذي الكريم قم بمراجعة مرفقك
به مشكل وهو عند البحث مرة ثانية لا يمسح البيانات الأولى