نجوم المشاركات
Popular Content
Showing content with the highest reputation since 01/13/26 in all areas
-
اعمل استعلام وضع فيه هذا مع تعديل اسم الحق الذي به المبلغ واسم الجدول لديك SELECT Amount, IIf([Amount] <= 15000, [Amount] * 0.1, 15000 * 0.1) AS [10%], IIf([Amount] > 15000, ([Amount] - 15000) * 0.15, 0) AS [15%] FROM YourTableName;7 points
-
السلام عليكم وجدت لكم صيدا سمينا لمن يواجه صعوبة في استخدام شجرة الحسابات اسميتها الحرة .. لأنها لا تستخدم اداة ActiveX TreeView تعتبر مشكلة أداة ActiveX TreeView في الإصدارات الحديثة من Microsoft Access (خاصة مع ظهور النسخ 64-بت) من أكثر التحديات شيوعاً، لأن الأداة القديمة (MSCOMCTL.OCX) غير مستقرة، تسبب مشاكل في "المكتبات" (DLLs)، ولا تدعم بنية 64-بت بشكل أصيل. هذا هو الخيار "الاحترافي" حالياً. بدلاً من أداة خارجية، يتم استخدام وحدات نمطية (Class Modules) برمجها مطورون لتغيير شكل النماذج العادية لتشبه الشجرة تماماً باستخدام عناصر التحكم الأصلية (مثل الـ Labels والـ Textboxes) تعتبر أداة Jan Karel Pieterse (المعروفة بـ JKP TreeView) واحدة من أرقى الحلول البرمجية التي تعتمد على "الفئات" (Class Modules) لتعويض أداة ActiveX، لأنها لا تعتمد على ملفات خارجية، بل تُبنى بالكامل داخل كود VBA إليكم المثال العملي تم فيه إنشاء شجرة حسابات احترافية بدون الاعتماد على ActiveX ولمن أراد التوسع والاستفادة يوجد امثلة ومرفقات متنوعة مجانية خاصة بأكسس اصدارات قديمة وأكسل وورد .. في هذا الرابط Treeview 26-5.rar6 points
-
وعليكم السلام ورحمة الله وبركاته جرب الكود حيث قبل التنفيذ، يقوم بحذف أي دوائر سابقة 1الثالث.xlsb5 points
-
عن تجربتي الشخصية سأتحدث . حيث قمت سابقاً بتنفيذ الفكرة لمشروع آخر ليرسل الإيميلات من بريده في Gmail إلى أي ايميل تريده ؛ دون إدخال أي وسيط أو موقع خارجي . حيث سيكون تعاملك مع خدمات جوجل مباشرة قمت بإنشاء جدول جديد باسم tbl_EmailSettings . ويحتوي الحقول التالية :- IDMail = حقل ترقيم تلقائي . SenderEmail = حقل نصي ، ويمثل أيميلك الذي تريد استخدامه كإيميل مرسل . SMTPServer = حقل نصي ، ويمثل الخدمة المستخدمة في Gmail لإرسال البريد الإلكتروني . وتكون عادة = smtp.gmail.com SMTPPort = حقل رقمي ، ويمثل المنفذ الذي سنستخدمه للإيميلات الصادرة . وهو عادة لـ Gmail يكون 465 . SMTPPassword = حقل نصي ، وهو الحقل المهم جداً هنا والذي ستكون قيمته كلمة مرور التطبيق الذي سنقوم بإنشائه من خلال بريدك الإلكتروني الذي سجلت به في الحقل SenderEmail . أما كيف نحصل عليه فسيكون الشرح تالياً . UseSSL = حقل من نوع Yes/No . وهو مهم إلى حد ما . والسبب أنه جميع خدمات البريد الحديثة (Gmail, Yahoo, Hotmail) تشترط وجود تشفير SSL . لذا فقيمته بالنسبة لك ستكون دائماً True . الآن كيف نحصل على SMTPPassword المقدم من Gmail ؟ إليك الطريقة خطوة بخطوة ببساطة . في متصفحك ، ادخل إلى ( إعدادات حساب Google ) . تحقق أولاً وقبل كل شيء من تفعيل ميزة ( التحقق بخطوتين ) أو ( 2-Step Verification ) في حسابك . ابحث في خانة البحث عن ( كلمة مرور التطبيق ) أو ( كلمات مرور التطبيقات )، او ( App Password ) ، حسب لغة الموقع لديك . ادخل كلمة المرور الخاصة بالإيميل الذي تريد استخدامه كإيميل مرسل . في خانة ( اسم التطبيق ) أو ( App Name ) ، أدخل اسم للتطبيق ، مثلاً ( SenderMailer ) . ثم انقر زر ( إنشاء أو Creat ) . الآن سيزودك الموقع بكلمة من 16 حرف ، انسخها والصقها في الحقل SMTPPassword . الآن في الجدول المخصص للأعدادات ، سيكون لديك الحقول المهمة وقيمها كالتالي :- SMTPServer = عنوان الخادم وهو smtp.gmail.com SMTPPort وهو المنفذ = 465 SMTPPassword = كلمة المرور التي حصلنا عليها من 16 حرف ( يفضل بدون مسافات ) UseSSL = نعم أو علامة صح SenderEmail = إيميلك الذي سجلت به والذي ستستخدمه للإرسال الآن في زر الإرسال المخصص لكل ايميل بشكل فردي ، سنستخدم الكود البسيط التالي :- Dim result As String Dim strRecipient As String Dim strMessageBody As String strRecipient = Trim(Nz(Me.B2.Value, "")) strMessageBody = Nz(Me.Fonda.Value, "") If strRecipient = "" Then MsgBox "يرجى إدخال إيميل المستلم أولاً", vbExclamation + vbMsgBoxRight, "" Me.B2.SetFocus Exit Sub End If result = SendSmartEmail(strRecipient, "رسالة تجريبية", strMessageBody) If result = "Success" Then MsgBox "تم الإرسال بنجاح", vbInformation + vbMsgBoxRight, "" Else MsgBox "فشل في الإرسال", vbCritical + vbMsgBoxRight, "خطأ" End If وفي زر الإرسال الجماعي ، سنستخدم الكود التالي :- Dim rs As DAO.Recordset Dim result As String Dim counter As Integer Dim strTo As String Dim strMsg As String Set rs = Me.RecordsetClone If rs.RecordCount = 0 Then MsgBox "لا توجد سجلات للإرسال إليها في هذا النموذج", vbInformation + vbMsgBoxRight, "" Exit Sub End If If MsgBox("هل أنت متأكد من إرسال إيميلات لجميع السجلات الحالية؟", vbQuestion + vbYesNo + vbMsgBoxRight, "تأكيد الإرسال") = vbNo Then Exit Sub counter = 0 rs.MoveFirst Do Until rs.EOF strTo = Nz(rs!Gmail, "") strMsg = Nz(rs!Fonda, "") If strTo <> "" Then result = SendSmartEmail(strTo, "تنبيه بريدي", strMsg) If result = "Success" Then counter = counter + 1 End If End If rs.MoveNext Loop MsgBox "تمت عملية الإرسال بنجاح" & vbCrLf & _ "عدد الإيميلات المرسلة: " & counter, vbInformation + vbMsgBoxRight, "" Set rs = Nothing وملاحظة بسيطة ، وهي تستطيع تغيير موضوع عنوان البريد الذي سيصل لأي شخص ترسل له ( بشكل منفرد ) بتغيير قيمة "رسالة تجريبية" داخل زر الإرسال . أو من خلال الزر المخصص للإرسال الجماعي بتغيير قيمة "تنبيه بريدي" ليكون هو العنوان لموضوع البريد . وهذا ملف تجريبي بعد الإضافات التي ذكرتها . فقط يرجى ملئ الجدول بالإيميل و كلمة المرور التي تتكون من 16 حرف فقط . Nouveau.zip الفكرة و المشاركة كانت تتبع الموضوع التالي هنا ، وتم فصلها لإفرادها وكي تعم الفائدة على من يمر باحثاً عن فكرة إرسال بريد من آكسيس دون قيود .4 points
-
وعليكم السلام ورحمة الله وبركاته الطريقة حدّد كل الجدول (أو النطاق الكبير اللي تشتغل فيه). من القائمة: اختر (تنسيق شرطي) ثم (قاعدة جديدة) ثم (استخدام صيغة لتحديد الخلايا المراد تنسيقها) اكتب الصيغة التالية: =ROW()=CELL("row") اختر اللون اللي تحبّه. اضغط (موافق) الأن كلما تكتب في أي خلية في السطر اضغط السهم لليمين أو اليسار وواصل الكتابة ـ يعني لاتنزل سطر جديد ولكن تابع الكتابة في نفس السطر تقبل تحياتي4 points
-
وعليكم السلام ورحمة الله وبركاته حسب فهمى لطلبك انك تقصد بالعمود الثالت العمود A يناء عليه اليك معادلة صعها بداية من D2 ثم اسحبها لاسفل او ضغها في عمود بداية من الصف2 =INDEX($B$2:$B$500;MATCH(A2; $C$2:$C$500; 0)) ارجو ان يكون في ردي ما يفيد تحياتي4 points
-
السلام عليكم السبب هو وجود مسافات قبل الارقام وهذا يحدث عادة عند نسح ارقام ناتجة عن معادلات الحل كل القيم تتحول إلى نصوص (CStr) وتُزال الفراغات (Trim) وهذا يضمن التطابق حتى لو كانت القيم أرقام أو نصوص أو ناتجة عن معادلات. اليك الكود المعدل Sub تحويل_اللجان_الى_اسماء_Turbo() Dim ws As Worksheet: Set ws = ActiveSheet Dim r As Long, c As Long Dim lastRowMain As Long, lastRowSearch As Long Dim رقم_اللجنة As String, اسم_اللجنة As String, اسم_المراقب As String Dim فارق_الاعمدة As Long: فارق_الاعمدة = 12 Dim cell As Range lastRowSearch = ws.Cells(ws.Rows.Count, "N").End(xlUp).Row ws.Range("P3:X" & lastRowSearch).ClearContents lastRowMain = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row lastRowSearch = ws.Cells(ws.Rows.Count, "N").End(xlUp).Row For r = 3 To lastRowMain اسم_المراقب = Trim(CStr(ws.Cells(r, "B").Value)) For c = 4 To 12 رقم_اللجنة = Trim(CStr(ws.Cells(r, c).Value)) If رقم_اللجنة <> "" Then For Each cell In ws.Range("C3:C" & lastRowMain) If Trim(CStr(cell.Value)) = رقم_اللجنة Then اسم_اللجنة = Trim(CStr(ws.Cells(cell.Row, "B").Value)) Dim صف_المراقب As Range For Each صف_المراقب In ws.Range("N3:N" & lastRowSearch) If Trim(CStr(صف_المراقب.Value)) = اسم_المراقب Then ws.Cells(صف_المراقب.Row, c + فارق_الاعمدة).Value = اسم_اللجنة Exit For End If Next صف_المراقب Exit For End If Next cell End If Next c Next r End Sub4 points
-
وعليكم السلام ورحمة الله وبركاته فكرة pdf انه يقوم بانشاء صفحة مؤقتة بها اسماء الموظفين وكل موظف قي ورقة ثم يصدرها الى pdf قم يحذف الورقة عدد الموظفين لديك حوالى 350 موظف بمعنى يتم انشاء حوالى 350 ورقة المقصود مما سبق دكره ان الكود سيأحد بعض الوقت لتنفيذ الامر ويعتمد الامر على مواصفات الجهاز بالنسبة لجهازي تطلب الامر دقيقة ونصف بمواصفات في حدود الجيدة اليك الملف مرتب الفنيين عن شهر يناير 2026 تعديل.xlsm4 points
-
4 points
-
السلام عليكم مشاركه مع اخى واستاذى محمد البرناوى اخى محمد حلك جميل ولكن بالنسبه للفقره الاول انت اختبرت المبلغ لو اقل ومع امثله الاستاذ الفاضل هو عاوز المبلغ اللى اكبر يتم طرحه يعنى مث ما هو موضح بالمثال بالاعلى 21000 هتكون 15000 *0.1 والباقى اللى هو 6000 *0.15 Option Compare Database Function calc(val As Double, Optional colVal = "") Const val_15 = 15000 Dim bak If colVal = 10 Or colVal = 0.1 Or colVal = "" Then colVal = 0.1 ElseIf colVal = 15 Or colVal = 0.15 Then colVal = 0.15 End If If val <= val_15 Then calc = val * colVal If val > val_15 Then bak = val - val_15 val = val_15 End If If colVal = 0.1 Then calc = val * colVal ElseIf colVal = 0.15 Then calc = bak * colVal Else calc = 0 End If End Function وتقبلوا مشاركتى ومرورى واحبكم فالله4 points
-
4 points
-
أهلاً بكم في انطلاقة سلسلتنا الجديدة "الفعاليات والتحديات الشهرية". في عالم قواعد البيانات ، المحترف الحقيقي ليس من يكتب مئات الأسطر من الأكواد ، بل هو "المعماري" الذي يبني قاعدة بيانات قوية ، ذكية ، وتحمي نفسها بنفسها ! تحدي اليوم سيعيدنا إلى الجذور ، إلى قوة محرك آكسيس الكامنة في جداوله . فهل أنت مستعد لخوض التجربة الأولى ؟؟ 📖 قصة التحدي :- طلب منك عزيزي المشارك ( مصنع تقني ) بناء نظام لإدارة شؤون الموظفين ، ولكن لديهم شروط صارمة جداً لمنع أي موظف مُدخِل بيانات من ارتكاب أخطاء . حيث أن الإدارة ترفض تماماً استخدام أكواد ( VBA ) ، وتريد أن تكون الحماية مزروعة ومتأصلة في قلب الجداول مباشرة ، لضمان أقصى درجات الأمان . 🛠️ المطلوب :- إنشاء جدول باسم tbl_Managers ، يحتوي على الحقول التالية :- اسم الموظف ( EmpName ) تاريخ الميلاد ( DOB ) تاريخ التعيين ( HireDate ) الدرجة الوظيفية ( JobGrade ) = (A أو B أو C) الراتب الأساسي ( Salary ) 🚫 شروط التحدي :- يجب عليك ضبط إعدادات الجدول (Property Sheet) ليقوم بالمهام التالية تلقائياً :- يُمنع الحفظ في حال مخالفة القوانين والأحكام ، حيث يُمنع تسجيل أي موظف عمره أقل من 18 عاماً ( بناءً على تاريخ ميلاده مقارنة بتاريخ اليوم ) . حماية التسلسل الزمني ، حيث يُمنع أن يكون تاريخ التعيين قبل تاريخ تأسيس المصنع ( 01/01/2020 ) . يُمنع أن يكون تاريخ التعيين في ( المستقبل ، أي بعد تاريخ اليوم الحالي ) . حماية هيكل الرواتب : يجب ربط الراتب بالدرجة الوظيفية كالتالي :- إذا كانت الدرجة A : الحد الأقصى للراتب هو 10,000 . إذا كانت الدرجة B : الحد الأقصى للراتب هو 7,000 . إذا كانت الدرجة C : الحد الأقصى للراتب هو 5,000 . الرسائل المخصصة ، بحيث عند وقوع أي خطأ ، يجب أن يظهر للمستخدم رسالة تنبيه واضحة باللغة العربية تشرح له سبب الرفض بالضبط . 🚫 قوانين المشاركة :- يُمنع منعاً باتاً استخدام أكواد VBA أو الـ Macros - الماكرو . الحل يجب أن يكمن في خصائص الجدول ( Table Properties ) فقط . ♻ كيف تشارك ؟ قم برفع ملف مرفق فقط . وتذكر أنك عزيزي المشارك تملك الحق في 3 محاولات لإجاباتك خلال التحدي الواحد فقط .3 points
-
اعرض الملف أداة تعميم تنسيق النماذج والتقارير {سلسلة الأدوات المساعدة المخصصة} الحقيقة أني أخذت الكثير من الوقت لإتخاذ القرار في طريقة عرض هذه الأداة ففي الأصل ماهي إلا خيار موجود ضمن خيارات الأكسس ولكنه خيار أكاد أجزم أن الكثير لايعلم عنه شيئاً وكل ماسأقوم به هو الإستفادة من هذا الخيار وتطويرة لإنشاء أداة تقوم بتعميم التنسيق على بقية النماذج وكما ذكرت فنظرا لأن هذا الخيار من الخيارات المهضوم حقها في الأكسس قررت أن أفصل الموضوع إلى مشاركتين الأولى لشرح الخيار وطريقة الإستفادة منه ومن خلال شرح هذا الخيار سنجد أنه سيتم تطبيق تنسيقات القالب على أي نموذج يتم إنشاؤه مع وجود القالب ولن تنعكس هذه التنسيقات على النماذج السابقة لذا ففي المشاركة الثانية سأقوم بالبناء على هذا الخيار لتطوير كود للقيام بتعميم التنسيقات الخاصة بالقالب على جميع النماذج حتى ولو تم إنشاؤها قبل إنشاء القالب مرفق لكم بهذا ملف مضغوط يحتوي على مستند وورد يحتوي على شرح لهذا الخيار وبعض التعليمات المفيدة الخاصة به وملف أكسس للتعرف على عمل الخيار وكما أنوه في كل مرة أرجو قراءة الشرح قبل فتح تطبيق أكسس حتى تتعرف بشكل أوضح على طريقة الإستفادة من خيار قوالب النماذج والتقارير تحياتي صاحب الملف منتصر الانسي تمت الاضافه 02/01/26 الاقسام قسم الأكسيس3 points
-
وعليكم السلام ورحمة الله وبركاته غن طريق كود صغييييير Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim ws As Worksheet Set ws = Me ws.Cells.Interior.ColorIndex = xlNone Target.EntireRow.Interior.Color = RGB(220, 230, 241) Target.Interior.Color = RGB(255, 255, 150) End Sub ملف كمثال تلوين صف وحلية.xlsb اذا اردت تغيير اللون اليك قائمة بالالوان أحمر فاتح: RGB(255, 200, 200) أخضر فاتح: RGB(200, 255, 200) أزرق فاتح: RGB(200, 220, 255) أصفر فاتح: RGB(255, 255, 150) برتقالي فاتح: RGB(255, 220, 180) رمادي فاتح: RGB(220, 220, 220) بنفسجي فاتح: RGB(230, 200, 255) سماوي: RGB(180, 240, 255) تحياتي3 points
-
السلام عليكم يجب على كل مبرمج ، سواء مبتدئ او محترف او يريد ان يبرمج ، ان يستعمل الذكاء الاصطناعي ليساعده في البرمجة بين الحين والآخر. الاُمي في هذا الزمان هو من لا يستعمل الذكاء الاصطناعي ، والذي يبدأ استعمال الذكاء الاصطناعي من اليوم فهو متأخر بضع سنين عن مبرمجين الغرب. المحترف: قد لا يحصل على كل كود يتمناه ، ولكن يمكنه الاستفادة بجزء من الكود او من الافكار التي يحصل عليها. قد لا يحصل على الكود الذي يستطيع به تحريك الكائنات في النموذج في وضع العرض ، ولكنه يستطيع الحصول على كود التأكد من وجود الانترنت ، او حساب عدد ملفات pdf الموجودة في مجلد الموظف. المبتدئ: ولأنه مبتدئ ، فطبيعي ان طلباته ستكون على مستوى يستطيع الذكاء الاصطناعي الرد عليها. الذي لا يعرف البرمجه ويريد ان يبرمج: اذا طلب من الذكاء الاصطناعي عمل شيء معين ، وبعد التجربة رأى ان الكود يعمل ، فقد حصل على مراده ، واذا لم يعمل ، فيستمر في طلبه وتجربته. وهذا الكود لن يكون مختلفا عن عمل الكثير والكثير المبرمجين المبتدئين الموجودين الان والتي برامجهم تملئ المكاتب بمئات المرات اكثر من برامج المحترفين ، وجزء كبير من الكود الذي يستعملوه هو عبارة عن نسخ/لصق ، ولا عيب في هذا مادام استطاع بالفعل ان يعمل برنامج يعمل بطريقة صحيحة. هناك اختلافات بين برامج الذكاء الاصطناعي ، وبين كل نسخة ، وبين كل تحديث. وبالتجربة تستطيع ان تعرف الانسب لك ، مثلا: هل استعمل ChatGPT 5.2 ، او استعمل Copilot والذي يستخدم ChatGPT 5.2 ؟ الجواب يأتي بالتجربة.3 points
-
السلام عليكم ورحمة الله وبركاته حل بالكود وان اضفت مواد احرى عدل النطاق في الكود Sub ProcessAndSumData() Dim wsB As Worksheet Set wsB = ThisWorkbook.Sheets("B") Application.ScreenUpdating = False With wsB .Range("B10:I12").ClearContents With .Range("B10:I10") .FormulaR1C1 = "=IFERROR(SUMPRODUCT((A!R3C1:R1828C1=R6C3) * (ISNUMBER(INDEX(A!R3:R1828,0,MATCH(R8C,A!R1,0)))) * (INDEX(A!R3:R1828,0,MATCH(R8C,A!R1,0))>=60)),""/"")" .Value = .Value End With With .Range("B11:I11") .FormulaR1C1 = "=IFNA(SUMPRODUCT((INDEX(A!R3:R1828,0,MATCH(R8C,A!R1,0))<60) * ISNUMBER(INDEX(A!R3:R1828,0,MATCH(R8C,A!R1,0))) * (A!R3C1:R1828C1=R6C3)),""/"")" .Value = .Value End With With .Range("B12:I12") .FormulaR1C1 = "=SUM(N(R[-2]C), N(R[-1]C))" .Value = .Value End With End With Application.ScreenUpdating = True End Sub لا تنس تفعيل الماكرو aa2.xlsb3 points
-
ربما يكون احد الاسباب وكما احبرتك في ردي الاحير باننى لست جازما وحصوصا ان الملف في مشاركتك الاولى يعمل لدي وكذلك حسب استاذتا Foksh ان الملف يعمل لديه وربما يكون مسار سطح المكتب هو السبب تم تعديل الكود وسيطلب منك مكان حفظ الملف احتر اي مكان جرب واعلمنى بالنتائج مرتب +عمولة السائقين (2).xlsm3 points
-
نعم الامر هكذا واضح وقمت بحذف التعليق السابق لعدم اهميته بعد ارفاق ملفك الاخير وبه التوضيح جرب الكود Sub تجميع() Dim ws As Worksheet Dim آخرصف As Long Dim c As Long, r As Long Dim صف_الاخراج As Long Set ws = ActiveSheet صف_الاخراج = 1 ws.Columns(16).ClearContents For c = 1 To 13 آخرصف = ws.Cells(ws.Rows.Count, c).End(xlUp).Row For r = 1 To آخرصف If ws.Cells(r, c).Value <> "" Then ws.Cells(صف_الاخراج, 16).Value = ws.Cells(r, c).Value صف_الاخراج = صف_الاخراج + 1 End If Next r Next c End Sub3 points
-
في اعلا النموذج لديك ضع دالة Sleep لانها غير موجودة لديك #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If3 points
-
3 points
-
3 points
-
وعليكم السلام ورحمة الله وبركاته أهلا بك أخي الحبيب الأن أصبحت الأمور ميسرة بالذكاء الأصطناعي كنا دائما في هذا المنتدى نطلق شعار لا تعطني سمكة ولكن علمني كيف أصطاد وبعد انتشار الذكاء الاصطناعي تحولت الأمور إلى أعطني سمكة وخلصني (أنا مشغول) لو تحب أن نعطيك سمكة أرفق ملفك هنا واشرح مطلوبك تقبل تحياتي3 points
-
العفو أخي الكريم .. يسعدنا أن تستفيد من المعلومة بشكل أكبر من الحلول الجاهزة التي ستتعرض لها مستقبلاً , جميع الجهود مشكورة لمن يحاول المساعدة . ولكن بنظري أن تصحيح المسار أفضل من السير في تعرج3 points
-
بحسب الصورة والذي فهمته منها أنه يجب أن يكون عندك 4 قواطر 1 بترول 2 بترول 1 ديزل 2 ديزل ويجب أن يكون القراءة الحالية لأي يوم تساوي السابقة لليوم الذي بعده لا يكون هناك فرق في العدادات والصورة تظهر مشكلة فرق في القاطرة 2 بترول دعني أشرح لك ( وأنت بالتأكيد فاهم شغلك تمام ولكن لازم نفهم نحن شغلك علشان نساعدك في حل المشكلة حسب الصورة تابع معي سلوك القاطرة (مثلا) 1 بترول في يوم 1/10/2025 السابق 500 والحالي 1500 القاطرة قبل تحركها كانت 500 وبعد ما وصلت 1500 (تمام) في يوم 4/10/2025 السابق 1500 والحالي 2800 ( تمام) القاطرة قبل تحركها كانت 1500 وبعد ما وصلت 2800 (تمام) لا حظ الأن أن الرقم 1500 كان الحالي في 1/10 وأصبح السابق في 4/10 والى الآن كل شيء معقول , ولكن ولكن ! =========== عند تطبيق نفس المنطق السابق على القاطرة 2 بترول يظهر خطأ في يوم 1/10/2025 السابق 250 والحالي 2500 القاطرة قبل تحركها كانت 250 وبعد ما وصلت 2500(تمام) في يوم 4/10/2025 السابق 2800 والحالي 5600( خطأ ) القاطرة قبل تحركها كانت 2800 وبعد ما وصلت 5600 (خطأ ) لا حظ الأن أن الرقم 2500 كان الحالي في 1/10 ولم يصبح السابق في 4/10 بل أصبح 2800 وهذا يدل على وجود فارق 300 (هنا المشكلة) تقبل تحياتي3 points
-
السلام عليكم حسب قهمي للكود الكود يتعامل مع العمود A والذي به ترقيم والمفترض التعامل مع الاسماء في العمود B اذا كان فهمي للامر صحيح اليك الكود المعدل والا قم بتوضيح الامر اكثر تصوري Sub Compare2() Dim lr As Long, i As Long, j As Long Dim strCol As String Dim WS As Worksheet: Set WS = Worksheets("Data") Dim hasMissing As Boolean: hasMissing = False Application.ScreenUpdating = False On Error Resume Next lr = WS.Columns("B").Find(What:="*", SearchDirection:=xlPrevious).Row On Error GoTo 0 If lr < 6 Then Application.ScreenUpdating = True Exit Sub End If For i = 6 To 18 strCol = Split((WS.Columns(i).Address(, 0)), ":")(0) Dim lastInCol As Long lastInCol = WS.Cells(WS.Rows.Count, strCol).End(xlUp).Row If lastInCol < 6 Then lastInCol = 6 For j = 6 To lr If WorksheetFunction.CountIf(WS.Range(strCol & "6:" & strCol & lastInCol + 500), WS.Range("B" & j)) = 0 Then With WS.Cells(WS.Rows.Count, strCol).End(xlUp).Offset(1) .Value = WS.Range("B" & j).Value End With hasMissing = True lastInCol = lastInCol + 1 End If Next j Next i Application.ScreenUpdating = True End Sub3 points
-
وعليكم السلام ورحمة الله وبركاته جرب الكود ويوضع في THISWORKBOOK Private Sub Workbook_Open() Dim ws As Worksheet Application.DisplayFullScreen = True Application.DisplayFormulaBar = False For Each ws In ThisWorkbook.Worksheets ws.Activate With ActiveWindow .DisplayHeadings = False .DisplayGridlines = False End With Next ws End Sub3 points
-
هلا اخي ابا بسملة ... لك وحشه من يعتذر ممن ... هل يعتذر الاخ من اخيه بل استفدنا من الردك ومرورك بالموضوع بارك الله فيك واحسن اليك .. جزاك الله خيرا3 points
-
3 points
-
السلام عليكم جرب الكود Sub تلوين_المكرر() Dim ws As Worksheet, rng As Range, cell As Range Dim dict As Object, lastRow As Long Dim r As Long, c As Long, key As String Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row If lastRow < 5 Then lastRow = 5 Set rng = ws.Range("A5:J" & lastRow) rng.Interior.ColorIndex = xlNone Application.ScreenUpdating = False For r = 5 To lastRow For c = 1 To 10 Set cell = ws.Cells(r, c) If Not IsError(cell.Value) And Len(cell.Value) > 0 Then key = Trim(cell.Value) Set dict = CreateObject("Scripting.Dictionary") For Each c2 In ws.Range(ws.Cells(r, 1), ws.Cells(r, 10)) If c2.Value = key Then dict(key) = dict(key) + 1 Next If dict(key) > 1 Then cell.Interior.Color = vbRed: GoTo NextCell ' التحقق عموديًا dict.RemoveAll For Each r2 In ws.Range(ws.Cells(5, c), ws.Cells(lastRow, c)) If r2.Value = key Then dict(key) = dict(key) + 1 Next If dict(key) > 1 Then cell.Interior.Color = vbRed End If NextCell: Next c Next r Application.ScreenUpdating = True End Sub3 points
-
و عليكم السلام ورحمة الله وبركاته __اصناف مشتريات - نسخة2.xlsx3 points
-
ولماذا لا نجمع بين مزايا كل حل كما بالمرفق هنا؟ ولكن لاأدري إذا ما كان ماكرو البيانات يندرج ضمن المحضورات المذكورة في التحدي Challange_01_03.accdb2 points
-
وعليكم السلام ورحمة الله وبركاته أهلا بك أخي أسمح لي أن أقول لك وبكل احترام وتواضع السبب هو : أنت كتبت في الكود وقة5 بدون راء والصحيح ورقة5 بحرف الراء2 points
-
2 points
-
وهذي مشاركتي المتواضعة 🙂 التحدي 1 - التعامل مع الجداول وخصائصها - موسى.accdb2 points
-
وعليكم السلااااااام ورحمة الله وبركاته .. وبما أنني من عشاق تصميم الألعاب في آكسيس .. وقد كان لي تجربة مع هذه اللعبة الجميلة ، وقد قمت بتضمينها ضمن برنامج إدارة النوادي الرياضية في هذا الموضوع هنا .. وكانت تجربتي بالشكل القديم التالي :- ولكن وبما أننا في 2026 ، فسأقوم بتطويرها بشكل أجمل ضمن هوايتي المتواضعة .😁.2 points
-
2 points
-
شكراً للجميع ... إستعنت بـ شات جي بي تي وإتضح إنه المشكلة كانت في إعدادات إكسل وتم إعادة تعيين الإعدادات وحُلت المشكلة2 points
-
2 points
-
حاولت بقدر المستطاع الموضوع صعب بدون اكواد جداول مصنع تقنى.accdb2 points
-
وعليكم السلام ورحمة الله وبركاته تم التجربة على اوفيس 2016 وتم تحديد حلايا والانتقال بين الصفحات لا يوجد تجمد والملف يعمل بسرعة ننتظر تجارب الزملاء2 points
-
وعليكم السلام ورحمة الله وبركاته كنت اتمنى دعم سؤالك بملف جرب التعديل التالي وان لم تعمل ارفق ملفا والمعادلة تعمل على اصدارات اكسل من 2013 وما فوق =IFNA(SUMPRODUCT((INDEX(A!$3:$1828;0;MATCH(H$8;A!$1:$1;0))<60)*ISNUMBER(INDEX(A!$3:$1828;0;MATCH(H$8;A!$1:$1;0)))*(A!$A$3:$A$1828=$C$6));"/")2 points
-
شكراً لك للإفادة بالنتيجة .. والحمد لله على نجاح المهمة ..2 points
-
اعتقد العمل ادناه ( نموذجي / مرن ) هذا ما امكنني الوصول اليه Private Sub SetRating(v As Integer) If Me.MyRating = v Then Me.MyRating = 0 Else Me.MyRating = v End If Me.Dirty = False End Sub Private Sub btnStar1_Click() SetRating 1 End Sub Private Sub btnStar2_Click() SetRating 2 End Sub Private Sub btnStar3_Click() SetRating 3 End Sub Private Sub btnStar4_Click() SetRating 4 End Sub Private Sub btnStar5_Click() SetRating 5 End Sub لتقييم النجوم2.rar2 points
-
وعليكم السلام ورحمة الله أنا معلم وتحولت إلى إداري على الحاسوب فكنت أعاني من هذا الأمر مهمتي هي العمل على الحاسوب وكل ما يلزم من أعمال المدرسة ومن ضمنها ادخال الدرجات للطلاب المعلم يسلمني الكشوفات وأنا بدوري أدخل الدرجات إلى النظام في البداية كنت متحمسا لهذا الشيء بسبب أن النظام كله هو من تصميمي ولكن ! مع مرور الوقت وجدت أن عملية الأدخال للدرجات فيها شيء من الصعوبة بسبب الأخطاء التي قد أرتكبها أنا من غير قصد مني ثم تظهر في نتيجة الطالب ويتم مراجعتي بعد ذلك لتعديلها فتداركت الموضوع حتى لا تتكرر الأخطاء في المرات القادمة وقمت بتطوير عملية الأدخال بعد المرحلةالاولى التقليدية كما يأتي : المرحلة الأولى : الطريقة التقليدية : كيبورد والضغط على الأزرار * في هذه المرحلة أي خطأ أنا أتحمله وبعدها فكرت التطوير وتقليل الاعتماد على الكيبورد وتقليل الضغط على الأزرار عندما أدخل الرقم 13 مثلا أحتاج للضغط على 3 أزرار : 1 و 3 و ENTER حتى يتنقل المؤشر للخلية التالية المرحلة الثانية : قمت بتصميم برنامج على الاكسل (لا أستخدم الكيبورد إطلاقا) يقوم بإظهار لوحة الدرجات على الشاشة وعن طريق الفارة (الماوس) أختار و أضغط على الدرجة المطلوبة فقط فيقوم البرنامج بادخال الدرجة للخلية وينزل المؤشر للأسفل تمهيدا لإدخال الدرجة الأخرى إذا 3 ضغطات في المرحلة الأولى = ضغطة واحدة من الماوس في المرحلة الثانية * وهذا أنجاز لكن في هذه المرحلة أيضا أنا أتحمل أي خطأ في الأدخال استمرت المرحلة الثانية عدة سنوات وطورت الفكرة إلى المرحلة الثالثة والنهائية وهي التي أعمل بها الآن المرحلة الثالثة : عملت كشوفات اكسل لكل صف ونزلتها في قروب واتساب الخاص بالمدرسة الذي يجمع كل المعلمين فكل معلم يحمل الكشف الخاص بصفه ومادته فقط ثم يعبي الدرجات ويرسل الكشوفات لي بالواتساب وأنا أقوم (عن طريق البرمجة وليس نسخ ولصق ) بإدراجها في النظام * وهنا أنهيت مسؤولتي وأصبح كل معلم هو المسؤول عن اخطائه إذا كان هناك طريقة أسهل من هذه فأرجو من الأخوة القراء أتحافنا بها فالجميع يريد الوصول لهدف واحد وهو تبسيط العمل تقبل تحياتي .2 points
-
راودتني هذه الفكرة فعلاً ، ولكن اتضح لي انها تقوم بعمل اختصار من المتصفح فقط وليس تطبيق مثبت فعلاً مع العلم انني على وشك ان اقوم بتنصيب ويندوز سيرفر 2022 على جهازي للتجربة الشاملة والحقيقية وليست كأفكار مبنية على معلومات قديمة .2 points
-
2 points
-
وعليكم السلام ورحمة الله وبركاته حسب طلبك في الرسائل الحاصة استاذ هذا هو طلبي لقد اعادة ملف الاكسيل لقد حاولت وضع الكود ولم اسطيع الاجابة على طلبك ارجع الى اول ملف في مشاركتك الاولى اسم الملف (امتداده) يتنهي xlsx ارجع الى الملف الذي ارفقت لك به الاجابه وبه الكود اسم الملف (امتداده) يتنهي xlsb لماذا قمت انا بتغيير امتداد الملف من xlsx الى xlsb ؟ لسبب بسيط وهو ان اي ملف اكسل يتنهي اسمه (امتداده) xlsx لا يمكن ان يحفظ كود في هذه النوعية من الملفات ماذا يحدث لو وضعت كوداً في ملف xlsx؟ إذا قمت بوضع كود داخل ملف xlsx ثم قمت بالحفظ: ستظهر لك رسالة تنبيه واضحة. إذا ضغطت "نعم" (Yes) للحفظ بصيغة xlsx فسيقوم إكسل بمسح الكود تماماً. عند فتح الملف مرة أخرى، لن تجد أي أثر للكود الذي كتبته. وملفك الاخير بنفس الامتداد xlsx فلن يتم حفظ الكود لذلك عند حفظ الملف وظهور رسالة التنبيه احتيار لا بدل نعم كما في الصور المرفقة اليك الملف وبه الكود بغد تحويله من xlsx الى xlsb وهو نفس الملف في احر مشاركة لي Employees.xlsb2 points
-
وعليكم السلام ورحمة الله وبركاته المشكلة الأساسية في الكود تكمن في طريقة التعامل مع تنسيق التاريخ. في VBA، عندما نستخدم SumIfs مع التواريخ، يفضل تمرير التاريخ كقيمة رقمية (Long) اذا كانت الكميات ارقام صثحيحة و Double بدلاً من Long تحسباً لوجود كسور في الكميات (إذا كانت الكمية تحتوي على فواصل عشرية ) ، لأن تحويله إلى نص (String) مثل "MM/dd/yyyy" قد يتسبب في عدم تطابق البيانات إذا كان إعداد التاريخ في الجهاز مختلفاً. جرب التعديل بالملف المرفق SUMIFS_VBA.xlsm2 points
-
2 points
-
2 points