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

محمد هشام.

الخبراء
  • Posts

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

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

  • Days Won

    155

كل منشورات العضو محمد هشام.

  1. تفضل جرب المرفق التالي واختار ما يناسبك Private Sub UserForm_Initialize() Me.ScrollHeight = Me.Height * 2 End Sub 'OR Private Sub UserForm_Initialize() Me.ScrollHeight = Me.Height Me.Height = Me.Height / 2 End Sub 'OR Private Sub UserForm_Activate() With Me .ScrollBars = fmScrollBarsHorizontal .ScrollWidth = .InsideWidth * 1.5 End With End Sub test (1).xlsm
  2. جرب هذا Private Sub TextBox1_change() Dim n As Range, J As Long, f As Long Set WS = Worksheets("Sheet1") clé = Me.TextBox1 f = WS.Cells(WS.Rows.Count, 2).End(xlUp).Row With WS Set n = .Range("A2:A" & f).Find(What:=clé, LookIn:=xlValues, LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False) If Not n Is Nothing Then J = n.Row Me.TextBox2 = .Range("B" & J) Else Me.TextBox2 = "" End If End With End Sub بطريقة مختلفة Public Property Get WS() As Worksheet: Set WS = Worksheets("Sheet1") End Property Private Sub UserForm_Initialize() Set J = CreateObject("Scripting.Dictionary") a = WS.Range("A2:A" & WS.[A65000].End(xlUp).Row) For i = LBound(a) To UBound(a) If a(i, 1) <> "" Then J(a(i, 1)) = "" Next i n = J.keys Me.ComboBox1.List = n End Sub '================== Private Sub ComboBox1_Change() Me.TextBox2 = Evaluate("=vlookup(" & """" & Me.ComboBox1.Value & """" & _ ",A2:B" & Split(WS.[a2].CurrentRegion.Address, "$")(4) & ",2)") End Sub test.xlsm
  3. وعليكم السلام ورحمة الله تعالى وبركاته جرب هدا Private Sub addbtn_Click() Dim n As Long Dim src As Worksheet: Set src = Sheets("Data") n = Application.WorksheetFunction.CountA(src.Range("B:B")) + 1 If Me.studname = "" Then: Exit Sub src.Cells(n, 2) = Me.cod.Value src.Cells(n, 3) = Me.studname.Value src.Cells(n, 4) = Me.row.Value src.Cells(n, 5) = Me.class.Value src.Cells(n, 6) = Me.group.Value src.Cells(n, 7) = Me.studcase.Value src.Cells(n, 8) = Me.birthdate.Value src.Cells(n, 9) = Me.mother.Value src.Cells(n, 10) = Me.gender.Value src.Cells(n, 11) = Me.mobile.Value src.Cells(n, 12) = Me.subcase.Value src.Cells(n, 13) = Me.adress.Value src.Cells(n, 14) = Me.datenow.Value src.Cells(n, 15) = Me.employ.Value src.Cells(n, 16) = Me.notes.Value With src.Range("A2:A" & src.Cells(src.Rows.Count, "B").End(xlUp).row) .Value = Evaluate("ROW(" & .Address & ")") End With arr = Array("studname", "cod", "row", "birthdate", "class", "studcase", "mobile", _ "notes", "group", "mother", "gender", "subcase", "adress") For i = 0 To UBound(arr): Me.Controls(arr(i)).Value = Empty: Next i MsgBox "تمت عملية التسجيل بنجاح" 'ActiveWorkbook.Save End Sub دوبل كليك على الصف الاول من ورقة Data لاظهار اليوزرفورم Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Application.Intersect(Target, Range("A1:P1")) Is Nothing Then Cancel = True ADD.Show End If End Sub school data 2025x V2.xlsm
  4. اخي الكود يتم تنفيده تلقائيا عند تغيير القيمة في عمود من / إلى المدرسة بمجرد اختيار عبارة من المدرسة يتم نقل العمود الهدف الى ورقة (محولين الى المدرسة) دون الحاجة لاستخدام الازرار اما ادا كنت تريد تنفيده فقط عند الظغط على زر تحويل الطالب تفضل تم ربط الكود بالزر سجل مستجدين - 2025 V3.xlsm
  5. الكود يشتغل عندي بشكل جيد !!!! اخي قم بغلق الملف وإعادة تشغيله مع محاول تنفيذ الكود مباشرة بعد إضافة عبارة من المدرسة على بعض الصفوف ووافينا بالنتيجة
  6. أظن أن نظام القائمة أسهل!!!! هل تقصد أنك ترغب بكتابة الإسم وجلب البيانات باستخدام زر البحث؟ جرب هذا ReDim a(1 To UBound(r), 1 To UBound(r, 2)) For I = 1 To UBound(r) If r(I, 5) = clé Then F = F + 1 a(F, 1) = r(I, 2):a(F, 2) = r(I, 4): a(F, 3) = r(I, 6) a(F, 4) = r(I, 7):a(F, 5) = r(I, 3):a(F, 6) = r(I, 1) End If Next I Search_by_name-V2.xlsm
  7. ادن جرب هدا Option Explicit Sub Filter_ListUniques() Dim lastRow&, n&, F& Dim WS As Worksheet, src As Worksheet, _ tmp As Range, rngCell As Range, c As Range, _ rng As Range, r As Range, list As Range Set WS = Worksheets("1"): Set src = Worksheets("التقرير") With Application .ScreenUpdating = False With WS If .AutoFilterMode Then .AutoFilterMode = False lastRow = WS.Cells(WS.Rows.Count, "H").End(xlUp).Row Set rng = WS.Range("A1:J" & lastRow) Intersect(src.Range(src.Rows(1), _ src.UsedRange.Rows(src.UsedRange.Rows.Count)), src.Range("A:J")).Clear .Range("H1:H" & lastRow).AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=.Range("AA1"), Unique:=True Set list = .Range(.[AA2], .Cells(.Rows.Count, "AA").End(xlUp)) For Each tmp In list rng.AutoFilter 8, tmp.Value n = src.Range("A" & src.Rows.Count).End(xlUp).Row If n > 2 Then n = n + 2 rng.SpecialCells(xlCellTypeVisible).Copy src.Range("a" & _ n).PasteSpecial Paste:=xlPasteValuesAndNumberFormats Next tmp WS.AutoFilterMode = False End With On Error Resume Next F = src.Range("A:J").Find("*", SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row Set rngCell = src.Range("A1 :J" & F) For Each c In rngCell.Rows If WorksheetFunction.CountA(c) > 0 Then c.Borders.LineStyle = xlContinuous Next For Each r In src.Range("A1:A" & F) If r.Value = "سعر الوقود" Then With src.Range(src.Cells(r.Row, 1), src.Cells(r.Row, 10)) .Interior.Color = RGB(51, 204, 204) .Font.Bold = True End With End If Next .CutCopyMode = False .ScreenUpdating = True End With End Sub تقرير 3.xlsm
  8. تفضل جرب هدا ملاحظة لم يتم تحديد العمود الاخير لعدم معرفتي لاسم العمود المرغوب جلب بياناته لهدا سبق تدكيرك بارفاق عينة للنتائج المتوقعة Sub Search_by_name() Dim WS As Worksheet, src As Worksheet Dim r As Variant, a As Variant, Rng As Range Dim i As Long, F As Long, Lastrow As Long Dim clé As Variant, Search As Range Set WS = Worksheets("AA"): Set src = Worksheets("UU") Lastrow = WS.Columns("B:I").Find(What:="*", _ SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row Set Rng = WS.Range("B2:I" & WS.Cells(Rows.Count, "F").End(xlUp).Row) r = Rng.Value2: clé = src.[C1] If clé = Empty Then: MsgBox "برجاء إدخال اسم للبحث عن بياناته", vbCritical, "الامل الدولية": Exit Sub Set Search = WS.Range("F2:F" & Lastrow).Find(clé, LookIn:=xlValues, lookat:=xlWhole) If Search Is Nothing Then MsgBox clé & " غير موجود", vbExclamation: Exit Sub Application.ScreenUpdating = False src.Range("B3:G" & src.Rows.Count).ClearContents ReDim a(1 To UBound(r), 1 To UBound(r, 2)) For i = 1 To UBound(r) If r(i, 5) = clé Then F = F + 1 a(F, 1) = r(i, 2) a(F, 2) = r(i, 4) a(F, 3) = r(i, 6) a(F, 4) = r(i, 7) a(F, 5) = r(i, 3) ' رقم اليوزر ' a(F, ؟) = r(i, ؟) End If Next i src.[B2].Offset(1).Resize(F, UBound(a, 2)).Value2 = a Application.ScreenUpdating = True End Sub وفي حدث ورقة (UU) Private Sub Worksheet_Activate() ' جلب الاسماء بدون تكرار Set WS = Worksheets("AA") Application.ScreenUpdating = False Set MonDico = CreateObject("Scripting.Dictionary") For Each cnt In WS.Range("f2", WS.[f65000].End(xlUp)) If cnt <> "" Then MonDico(cnt.Value) = "" Next cnt With WS.Range("L2:L65000") .ClearContents .Resize(MonDico.Count) = Application.Transpose(MonDico.Keys) End With Application.ScreenUpdating = True End Sub '===================== Private Sub Worksheet_Change(ByVal Target As Range) ' تنفيد الكود عند اختيار الاسم من القائمة المنسدلة Select Case Target.Address(0, 0) Case "C1": Call Search_by_name Target.Select Case Else: Exit Sub End Select End Sub الخلية C1 ورقة (UU) ضع الصيغة التالية =OFFSET(AA!$L$2, 0, 0, COUNTA(AA!$L:$L), 1) بالتوفيق......... Search_by_name.xlsm
  9. قم بتغيير داخل الكود الخاص بجلب البيانات مباشرة دون ان تنسى مراجعة هده الاكواد او حدفها عند التوصل للنتائج المطلوبة
  10. اخي ما هو العمود المرغوب ترحيله الى رقم اليوزر
  11. نعم اخي لاكن ما الغرض من تسلسل رقم السيارة على ورقة التقرير يمكنك نسخ البيانات دون الاعتماد على وجود رقم السيارة مسبقا في حالتك هده يمكنك الاعتماد على عدد الصفوف لكل جدول والتي سوف تجبرك على توحيد عدد الصفوف على جميع الجداول مادا لم تمت اظافة رقم السيارة بعدد يتجاوز عدد الصفوف المقترحة مسبقا وهي على ملفك 60 صف ؟ على العموم تم تعديل الكود على حسب تصميمك للملف ربما يناسبك Option Explicit Sub Filter_ListUniques() Dim WS As Worksheet: Dim src As Worksheet Set WS = Worksheets("1"): Set src = Worksheets("التقرير") Dim Lastrow&, f&, n& Dim list As Object, item As Variant, Rng As Range, tmp As Range Set list = CreateObject("System.Collections.ArrayList") Application.ScreenUpdating = False Intersect(src.Range(src.Rows(2), src.UsedRange.Rows(src.UsedRange.Rows.Count)), _ Union(src.Range("A:G"), src.Range("I:J"))).ClearContents Set tmp = WS.Range("A1:J1") With WS If .AutoFilterMode Then .AutoFilterMode = False For Each item In .Range("H2", .Range("H" & .Rows.Count).End(xlUp)) If Not list.Contains(item.Value) Then list.Add item.Value Next End With For Each item In list With tmp .AutoFilter 8, item '<<======Car number column Lastrow = WS.Cells(WS.Rows.Count, "H").End(xlUp).Row WS.Range("a2:j" & Lastrow).SpecialCells(xlCellTypeVisible).Copy If WorksheetFunction.CountA(src.Range("a:a")) = 1 Then n = src.Cells(src.Rows.Count, "a").End(xlUp).Row + 1 Else 'The number of rows between tables n = n + 61 End If src.Range("a" & n).PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False 'Copy column headings src.Range("a" & n - 1 & ":j" & n - 1).Value = tmp.Value .AutoFilter End With Next Application.ScreenUpdating = True End Sub تقرير V2.xlsb
  12. تفضل اخي Option Explicit Sub filtre() Dim f$, Lastrow&, Cnt&, n&: f = "من المدرسة" Dim WS As Worksheet: Set WS = Sheets("الصف الثانى ") Dim src As Worksheet: Set src = Sheets("محولين الى المدرسة") Application.ScreenUpdating = False src.Range("B10:U" & src.Rows.Count).ClearContents Lastrow = WS.Range("V" & WS.Rows.Count).End(xlUp).Row For Cnt = 10 To Lastrow If UCase(WS.Range("V" & Cnt).Value) Like f Then n = n + 1 src.Range("B" & n + 9 & ":U" & _ n + 9).Value = WS.Range("B" & Cnt & ":U" & Cnt).Value End If Next Application.ScreenUpdating = True End Sub لتنفيد الكود تلقائيا عند التغيير في عمود التحويلات المدرسية (الصف الثانى ) Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("V10:V600")) Is Nothing Then Application.EnableEvents = False Application.Run ("filtre") Application.EnableEvents = True End If End Sub سجل مستجدين - 2025 V2.xlsm
  13. وعليكم السلام ورحمة الله تعالى وبركاته طلبك غير واضح !!!!! أظن أنه سبق التطرق إلى هذا الموضوع مسبقا بفكره مشابهة نوعا ما يرجى مراجعة الرابط التالي ربما يفيدك
  14. اخي الفاضل صفحة الصف الثانى فارغة زيادة انك لم تدكر لنا ماهو النطاق او الاعمدة المرغوب ترحيلها يرجى اظافة بعض البيانات الوهمية على الملف مع ارفاق عينة للنتائج المتوقعة .ربما نستطيع مساعدتك
  15. السلام عليكم ورحمة الله تعالى وبركاته ضع الصيغة التالية في الخلية (E6) مع سحبها للاسفل =IFERROR(INDEX($J$6:$J$11,MATCH(TRUE,MMULT(--(ROW($J$6:$J$11)>=TRANSPOSE(ROW($J$6:$J$11))),$I$6:$I$11)>=ROWS($1:1),0)),"") في حالة الرغبة بتسلسل عمود المدة بقدر بيانات عمود المبلغ في الخلية (F6) مع سحب المعادلة للاسفل =IF(E6<>"",ROWS($A$1:A1),"") Book1.xlsx
  16. وعليكم السلام ورحمة الله تعالى وبركاته اظن انه يوجد طرق افضل لكتابة الاكواد للحصول على نتائج صحيحة وأدق على العموم حاول تجربة تغيير التنسيق بما يناسبك كما في المثال التالي TextBox4.Value = Format(ws.Cells(X, 11).Value, "mm/yyyy") TextBox18.Value = Format(ws.Cells(X, 23).Value, "dd/mm/yyyy") TextBox19.Value = Format(ws.Cells(X, 24).Value, "dd/mm/yyyy")
  17. لايمكن الاشتغال على صورة المرجوا ارفاق ملفك مع عينة للنتائج المتوقعة
  18. وعليكم السلام ورحمة الله تعالى وبركاته كما سبق الذكر من طرف الأستاذ @طارق محمود أنسب طريقة لتنفيد طلبك على ما أعتقد هي إستخدام الأكواد خاصة إذا كانت لك رغبة بالإشتغال على الملفات وهي مغلقة مع وضع عدة معايير للتحقق يمكنك تجربة هدا الاقتراح ربما يناسبك يكفي وضع مصنف المطابقة في نفس مسار الملفات سيتم تحديث البيانات تلقائيا Sub CopyData() '''''''''( رصيد عملاء Workbook ) Dim FileName$, Path$, wbSource$, rng As Range, FilePath$, sPath$ Dim src As Worksheet: Set src = Sheets("1") Path = ThisWorkbook.Path wbSource = "رصيد عملاء.xlsx": FileName = src.[A1] If FileName = "" Then: Exit Sub ' التححق من وجود المصنف FilePath = Path & "\" & wbSource If Len(Dir(FilePath)) = 0 Then MsgBox "الملف غير موجود", vbExclamation, wbSource: Exit Sub End If ' التححق من وجود ورقة العمل sPath = ActiveWorkbook.Path & "\" If Not Verification(sPath, wbSource, FileName) Then MsgBox wbSource & " " & " الورقة " & " : " & FileName & " غير موجودة على مصنف", vbInformation: Exit Sub End If With Application .ScreenUpdating = False .DisplayAlerts = False src.Range("B3:P" & src.Rows.Count).ClearContents a = "B3:B300": b = "C3:C300": c = "D3:P300" '<<===== ' Paste data(المطابقة) Cnt = "Q12:Q300": Cnt2 = "S12:S300": Cnt3 = "CB12:CN300" '<<===== 'Data range(رصيد عملاء) 'كود المنتج src.Range(a).FormulaArray = "='" & Path & "\[" & wbSource & "]" & FileName & "'!" & Cnt 'المنتج src.Range(b).FormulaArray = "='" & Path & "\[" & wbSource & "]" & FileName & "'!" & Cnt2 ' من يناير الى الإجمالى src.Range(c).FormulaArray = "='" & Path & "\[" & wbSource & "]" & FileName & "'!" & Cnt3 ling = src.UsedRange.Rows.Count: Set rng = src.Range("B3:P" & ling) With rng .Value = .Value: .Borders.LineStyle = xlNone .Replace "#N/A", "", xlWhole: .Replace "0", "", xlWhole End With ' Underline the rows Sheets("1") For Each c In rng.Rows If WorksheetFunction.CountA(c) > 0 Then c.Borders.LineStyle = xlContinuous Next .ScreenUpdating = False .DisplayAlerts = False End With End Sub Sub CopyData2() '''''''''''''( عملاء Workbook ) Dim FileName$, Path$, wbSource$, rng As Range, FilePath$, sPath$ Dim src As Worksheet: Set src = Sheets("1") Path = ThisWorkbook.Path wbSource = "عملاء.xlsx": FileName = src.[R1] If FileName = "" Then: Exit Sub FilePath = Path & "\" & wbSource If Len(Dir(FilePath)) = 0 Then MsgBox "الملف غير موجود", vbExclamation, wbSource: Exit Sub End If sPath = ActiveWorkbook.Path & "\" If Not Verification(sPath, wbSource, FileName) Then MsgBox wbSource & " " & " الورقة " & " : " & FileName & " غير موجودة على مصنف", vbInformation: Exit Sub End If With Application .ScreenUpdating = False .DisplayAlerts = False src.Range("S3:AG" & src.Rows.Count).ClearContents a = "S3:S300": b = "T3:T300": c = "U3:AG300" '<<===== ' Paste data(المطابقة) Cnt = "Y4:Y300": Cnt2 = "Z4:Z300": Cnt3 = "FK4:FW300" '<<===== 'Data range(عملاء) 'كود المنتج src.Range(a).FormulaArray = "='" & Path & "\[" & wbSource & "]" & FileName & "'!" & Cnt 'المنتج src.Range(b).FormulaArray = "='" & Path & "\[" & wbSource & "]" & FileName & "'!" & Cnt2 ' من يناير الى الإجمالى src.Range(c).FormulaArray = "='" & Path & "\[" & wbSource & "]" & FileName & "'!" & Cnt3 ling = src.UsedRange.Rows.Count: Set rng = src.Range("S3:AG" & ling) With rng .Value = .Value: .Borders.LineStyle = xlNone .Replace "#N/A", "", xlWhole: .Replace "0", "", xlWhole End With ' Underline the rows Sheets("1") For Each c In rng.Rows If WorksheetFunction.CountA(c) > 0 Then c.Borders.LineStyle = xlContinuous Next .ScreenUpdating = False .DisplayAlerts = False End With End Sub Function Verification(fPath As String, fName As String, sheetName As String) Dim f As String f = "'" & fPath & "[" & fName & "]" & sheetName & "'!R1C1" Verification = Not IsError(Application.ExecuteExcel4Macro(f)) End Function Sheets("1") وفي حدث Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Select Case Target.Address(0, 0) Case "A1": Call CopyData: Case "R1": Call CopyData2 Target.Select Case Else: Exit Sub End Select End Sub Workbook event Private Sub Workbook_Open() Call CopyData: Call CopyData2 End Sub إستدعاء بيانات.zip
  19. ادن جرب هدا ربما يفيدك Sub Locked(ByVal bEnabled As Boolean) Dim sh As Worksheet, tmp As Integer, Cnt As Integer Set WS = Sheets("واجهة البرنامج") If bEnabled = True Then Cnt = -1 '<<==== Visible tmp = 2 '<<==== Hidden Else Cnt = 2 tmp = -1 End If With ThisWorkbook On Error Resume Next Application.ScreenUpdating = False WS.Visible = Cnt For Each sh In .Sheets If Not sh.Name = WS.Name Then sh.Visible = tmp End If Next sh WS.Visible = Cnt Application.ScreenUpdating = True On Error GoTo 0 End With End Sub Sub Verification() With ThisWorkbook Application.DisplayAlerts = False If .Path <> vbNullString Then .ChangeFileAccess xlReadOnly ' Kill .FullName '<<==== لحدف المصنف نهائيا End If .Close SaveChanges:=False End With End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Locked True ActiveWorkbook.Protect Structure:=True, Windows:=False, Password:="1234" End Sub Private Sub Workbook_Open() Select Case Environ("COMPUTERNAME") Case "HP ZBook Power", "Your device name" ' '<<==== أسماء أجهزة الكمبيوتر المعتمدة Locked False ActiveWorkbook.Unprotect "1234" Case Else Verification End Select End Sub Password 1234 فتح المصنف على اجهزة محددة.xlsm
  20. تفضل جرب هدا Private Sub b_recup_Click() Dim Cnt As VbMsgBoxResult Dim sht As Worksheet, tbl As ListObject, tblRow As ListRow Set sht = Sheets("تصدير بيانات اكسيل") Set tbl = sht.ListObjects("Table1") Cnt = MsgBox(" تــرحيل البيانات ؟", vbYesNo, sht.Name): If Cnt <> vbYes Then Exit Sub With tbl.DataBodyRange If .Rows.Count > 1 Then .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete End If End With tbl.DataBodyRange.Rows(1).ClearContents Set tblRow = tbl.ListRows.Add tblRow.Range.Resize(Me.ListBox1.ListCount) = Me.ListBox1.List sht.[b2] = Format(DateAdd("d", -1, CDate(Me.DateMini.Value)), "dd/mm/yyyy") sht.[C2] = ("رصيد المدة"): sht.[F2] = ("بيان رصيد أول مدة بتاريخ هذا اليوم") sht.[G2] = Text_count: sht.[I2] = Text_count With sht.Cells(sht.Rows.Count, 6).End(xlUp).Offset(1) .Value = "الإجمالي" .Offset(, 1) = Me.TextBox3.Value .Offset(, 2) = Me.TextBox2.Value .Offset(, 3) = Me.TextBox1.Value End With MsgBox "تم نرحيــل البيانات بنجاح" Unload Me On Error Resume Next Set Rng = sht.Range("A1").CurrentRegion sht.PageSetup.PrintArea = Rng.Address sht.PrintPreview ' answer = MsgBox("طباعــة التقرير ؟", vbQuestion + vbYesNo + vbDefaultButton2, "تأكـــيد") ' If answer = vbYes Then sht.PrintOut End Sub تمت اظافة اكواد تصدير الملف بصيغة Word, Excel, PDF في الملف المرفق Copy of كشف حساب عميل & كارت صنف V5.xlsm
  21. أخي @Armia Nabilرقم السيارة مكرر على طول العمود مثلا الرقم 125 هل يحب ترحيل البيانات على جميع الصفوف ام فقط الصف الأول تفضل اختار ما يناسبك Option Explicit Sub test1() Dim WS As Worksheet, dest As Worksheet Dim c As Range, f As Range Set WS = Sheets("1"): Set dest = Sheets("التقرير") Application.ScreenUpdating = False For Each c In WS.Range("H2", WS.Range("H" & Rows.Count).End(3)) Set f = dest.Range("H:H").Find((c.Value), , xlValues, xlWhole, , , False) If Not f Is Nothing Then dest.Range("A" & f.Row & ":j" & f.Row).Value = WS.Range("A" & c.Row & ":j" & c.Row).Value End If Next Application.ScreenUpdating = True End Sub '======================== Sub test2() Dim WS As Worksheet, dest As Worksheet Dim Lastrow As Long, i As Long, rng As Range, code As Variant Set WS = Sheets("1"): Set dest = Sheets("التقرير") Lastrow = WS.Cells(WS.Rows.Count, "H").End(xlUp).Row Application.ScreenUpdating = False With dest Intersect(.Range(.Rows(2), .UsedRange.Rows(.UsedRange.Rows.Count)), Union(Range("A:G"), .Range("I:J"))).ClearContents End With For i = 2 To Lastrow: code = WS.Cells(i, "H").Value Set rng = dest.Columns("H").Find(What:=code, LookIn:=xlValues, LookAt:=xlWhole) If Not rng Is Nothing Then dest.Cells(rng.Row, "A").Resize(1, 10).Value = WS.Cells(i, "A").Resize(1, 10).Value End If Next i Application.ScreenUpdating = True End Sub '================================= Sub test3() Dim WS As Worksheet, dest As Worksheet Dim cel As Range, r As Range, tmp As Range Set WS = Sheets("1"): Set dest = Sheets("التقرير") Application.ScreenUpdating = False For Each tmp In dest.Range("H2:H" & dest.Cells(Application.Rows.Count, 8).End(xlUp).Row) Set r = WS.Columns(8).Find(tmp.Value, , xlValues, xlPart) If Not r Is Nothing Then dest.Range("A" & tmp.Row & ":j" & tmp.Row).Value = WS.Range("A" & r.Row & ":j" & r.Row).Value End If Next tmp Application.ScreenUpdating = True End Sub تقرير.xlsb
  22. يمكنك جلب اخر قيمة على الليست بوكس باستبدال هده السطور tb = sum1 - sum2 TextBox1.Value = Format(tb, "#,##00.00") وجعلها هكدا With Application sum3 = .Max(.Index(Me.ListBox1.List, r, 9)) ' الرصيد الختامى End With TextBox1.Value = Format(sum3, "#,##00.00") Copy of كشف حساب عميل -V4.xlsm
  23. ربما عليك مراجعة هدا Cnt = Cnt + 1 '===>> ' عدد الصفوف على الليست بوكس sum1 = sum1 + .List(R, 10) '===>> ' مجموع الصفوف الظاهرة ( عمود المبيعات) sum2 = sum2 + .List(R, 11) '===>> ' مجموع الصفوف الظاهرة ( عمود التحصيل) '==================================== 'المبيعات - التحصيل tb = sum1 - sum2 بمعنى عند البحث بين تاريخين سيتم احتساب الاعمدة الظاهرة على الليست بوكس فقط مثلا الفترة المختارة لا يوجد اي بيانات على اعمدة المبيعات و التحصيل لهدا من الطبيعي اظهار 0
  24. المرجوا توضيح طلبك اكثر او ارفاق عينة للنتائج المتوقعة
  25. جرب هل هدا ما تقصده tb1 = Evaluate("=SUM(SUMIFS('" & WS.Name & "'!G4:G100000,'" & WS.Name & _ "'!C4:C100000,{""مبيعات"";""قيد""},'" & WS.Name & "'!B4:B100000,""<""&'" & WS.Name & "'!Y1))") tb2 = Evaluate("=SUM(SUMIFS('" & WS.Name & "'!H4:H100000,'" & WS.Name & _ "'!C4:C100000,{""مردودات مبيعات"";""سند قيد"";""سند قبض""},'" & WS.Name & "'!B4:B100000,""<""&'" & WS.Name & "'!Y1))") result = tb1 - tb2 Me.Text_count.Value = Format(result, "#,##00.00") If Me.Text_count = 0 Then colDates كما ترى في الصورة التواريخ تظهر معي بالشكل المطلوب قم بتعديل تنسيق التاريخ على الجهاز الخاص بك الى dd/mm/yyyy او تعديل الكود Sub Filtre() If Me.DateMini = "" Or Me.DateMaxi = "" Then Exit Sub For i = 1 To 3 Me.Controls("TextBox" & i).Value = "" Next i S.Caption = "" Dim Tbl() cbx1 = Me.ComboBox1: cbx2 = Me.ComboBox2: cbx3 = Me.ComboBox3 n = 0 dMini = CDate(Me.DateMini): dMaxi = CDate(Me.DateMaxi) Cb = Array(1, 1, 1) For i = 0 To UBound(ColCombo): Cb(i) = ColCombo(i): Next i For i = 1 To UBound(TabBD) If TabBD(i, Cb(0)) Like cbx1 And TabBD(i, Cb(1)) Like cbx2 _ And TabBD(i, Cb(2)) Like cbx3 _ And TabBD(i, 2) >= dMini And TabBD(i, 2) <= dMaxi Then n = n + 1: ReDim Preserve Tbl(1 To Irow + 1, 1 To n) c = 0 For c = 1 To Irow: Tbl(c, n) = TabBD(i, c): Next c Tbl(c, n) = TabBD(i, Irow + 1) Tbl(2, n) = Format(TabBD(i, 2), "dd/mm/yyyy") ' تنسيق عمود التاريخ End If Next i If n > 0 Then Me.ListBox1.Column = Tbl SUMIF Else Me.ListBox1.Clear End If End Sub Copy of كشف حساب عميل -V3.xlsm
×
×
  • اضف...

Important Information