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

نجوم المشاركات

  1. ياسر خليل أبو البراء

    ياسر خليل أبو البراء

    المشرفين السابقين


    • نقاط

      12

    • Posts

      13165


  2. الجموعي

    الجموعي

    الخبراء


    • نقاط

      4

    • Posts

      703


  3. عبدالرحمن هاشم

    عبدالرحمن هاشم

    المشرفين السابقين


    • نقاط

      3

    • Posts

      820


  4. الصـقر

    الصـقر

    الخبراء


    • نقاط

      3

    • Posts

      1836


Popular Content

Showing content with the highest reputation on 11/26/14 in all areas

  1. السلام عليكم ورحمة الله تعالى وبركاته أقدم لكم فورم ترحيل بسيط بشرط إكمال باقي البيانات طريقة عمل الفورم: عند الضغط على زر ترحيل سيتحول ليبل الخلية الفارغة إلى لون الأحمر وهكذا إلا إذا أكملت باقي البيانات يتم الترحيل بنجاح فورم ترحيل بشرط إكمال باقي البيانات.rar
    3 points
  2. السلام عليكم جرب هذا Private Sub TextBox1_Change() On Error GoTo 1 Me.TextBox1.BackColor = Val(Me.TextBox1) 1 End Sub تحياتي
    2 points
  3. الحلقة الخامسة **************** السلام عليكم ورحمة الله وبركاته نستكمل حلقاتنا للي متابعين .. وللي مش متابعين بردو! هنتكلم النهاردة عن النطاقات في VBA وطرق تحديدها ... نبدأ الأول نعرف معنى كلمة نطاق : هل النطاق مجموعة خلايا متجاورة (جنب بعض) ولا مجموعة خلايا غير متجاورة (خلايا زعلانة ومتخاصمة فبعيد عن بعض) ؟ أعتقد إن فيه كتير فاهمين كلمة نطاق غلط .. أولا نطاق بالانجليزي Range والنطاق في الإكسيل بيكون مطاطي (مرن) بيشمل مجموعة كبيرة من المفاهيم :: الخلية الواحدة اسمها نطاق .. واحد يقولي يعني A1 دي نطااااااااااق .. إنت كدا خليت الخلية تاخد أكبر من حجمها هي مجرد خلية ، أرد وأقوله .. الخلية نطاق ومجموعة الخلايا المتجاورة نطاق ، ومجموعة الخلايا الغير متجاورة نطاق ، والصف الواحد نطاق ، ومجموعة صفوف نطاق ، والعمود الواحد نطاق ، ومجموعة أعمدة نطاق .. بس خلاااص (الحاجة الوحيدة اللي لا تصلح إنك تحدد نطاق في أكتر من ورقة عمل .. يعني الشغل كله في تحديد النطاقات بيكون في ورقة واحدة .. بمعنى آخر ميجيش واحد ويقول عايز أحدد مجموعة خلايا في الورقة الأولى + مجموعة خلايا في الورقة التانية دي لسه بيل جيتس معلمهاش) جميل لحد دلوقتي يبقا كدا اتعرفنا على لفظ نطاق ..طيب كلنا عارفين إننا عشان نقدر ننفذ أمر معين لازم الأول نحدد النطاق اللي هيتم التنفيذ عليه .. مينفعش أقول مثلا نسق الخلايا ولونها وخلي حجمها 14 - طبيعي إن اللي بيفكر كدا يبقا فاهم إن الكمبيوتر بيسمعه وعارف عايز ايه ، مفيش خلاف إننا لما بنتعامل مع الكمبيوتر مننساش إننا بنتعامل مع آلة ، يعني مهما كانت درجة تفوقها فهي غبية ، والغباء هنا صفة مش مذمومة ، الغباء اللي أقصده إنه لازم تمشي خطوات منطقية ومنطقية جدا عشان تقدر تحقق هدفك .. فأول خطوة دايما للتعامل غالبا بتكون تحديد النطاق اللي هشتغل عليه .. عشان كدا هافرد الشرح عن تحديد الخلايا والنطاقات بشكل تفصيلي .. ادعوا لي ربنا يوفقني في توصيل المعلومة) نبدأ على بركة الله .. واحد هيقولي : كل دي بداية دا إنت هتطلع عنينا ، على ما نعرف المعلومة (بس أحب أوضح إن الأمور لما تكون مفهومة تمام الفهم والإدراك ، دا بيسهل عملية التعلم بشكل كبير ؛ عشان كدا متستغربوش إني برغي كتير .. الهدف في النهاية توصيل المعلومة بأسلوب غير تقليدي) بصراحة أنا مش مرتب هشرح إزاي الموضوع نظرا لأن فيه معلومات كتير وخايف تتوهوا مني .. بس دلوقتي خطرت لي فكرة إننا نقسم الموضوع ، ونتعامل مع جزئية جزئية أول جزئية هنتكلم عليها الخلية المفردة (الخلية : زي ما إحنا عارفين عبارة عن التقاء الصف مع العمود ..معلومة قديمة .. والصف بيكون عبارة عن رقم ، والعمود عبارة عن اسم حرف .. بردو معلومة قديمة .. والخلية لما بنسميها بتكون عبارة عن اسم العمود وبعديها رقم الصف .. بردو معلومة قديمة!!) (شكلي كدا معنديش معلومة جديدة أديهالكم النهاردة !!) مثال : لو قلنا الصف الرابع والعمود الخامس ، هنعبر عنه إزاي ؟ نحسبها : نبدأ الأول بالعمود (نظرا لأن العمود رأسي وأنا رأسي مشغولة بالفكرة) ، العمود الخامس دا فين .. عشان نعرف يبقا لازم ناخد درس إنجليزي الأول ونركز على الحروف (أصلي معلم إنجليزي وعايز أسوق لنفسي دروس) ..نبدأ نقول مع بعض : A و B و C و D و E (بس خلاص وصلنا للحرف الخامس يبقا العمود الهدف هو العمود E .. بلغة البرمجة Target.Column=5 .. محدش يدقق أوي في الجملة دي ، بعدين هنعرفها ، دا كان حرف العمود ، والرقم مش محتاج نحسبه لأن الصف الهدف هو الرابع .. بلغة البرمجة Target.Row=4 (بكدا تكون عنوان الخلية الهدف هي الخلية E4 .. وبلغة البرمجة Target.Address=$E$4 السؤال الأول : كيف يمكن تحديد الخلية E4 في محرر الأكواد ؟ الإجابة : الإجابات متنوعة ، نشوف كل الطرق عشان نتعلم ... أول طريقة : استخدام الخاصية Range >> نطبق على الخلية E4 مثلا Range("E4").Select هنا لازم بعد الخاصية Range بنفتح قوس ) وبعد القوس قوس تنصيص " وبعدين عنوان الخلية .. وزي ما اتعودنا القفلة يا رجالة ... كدا إحنا أشرنا للخلية E4 ، ونقول لمحرر الأكواد حددها بكلمة Select تاني طريقة : استخدام الخاصية Cells ، ودي مختلفة شوية Cells(4, 5).Select هنا بنفتح قوس بعد الخاصية Cells وبنستخدم أرقام (رقم الصف الأول ، وبعدين رقم العمود) ودي شرحناها بالتفصيل وعرفنا إن رقم الصف 4 ، ورقم العمود E هيكون رقم 5 ، ونفس القصة بعد الإشارة للخلية الهدف نقول لمحرر الأكواد حددها بكلمة Select تالت طريقة زي تاني طريقة ..إننا نستخدم Cells بردو (إزاي دي ؟؟!!) Cells(4, "E").Select هنا لو موضوع رقم العمود دا مضايقك ، ولا يهمك هنشوف لك بديل ، ممكن تكتب اسم العمود بس مننساش أقواس التنصيص !! رابع طريقة : طريقة الباشمهندس طارق محمود (أنا سميتها كدا لأنها المفضلة عند الباشمهندس طارق) [E4].Select ويا ريت نعرف كل الطرق ، لأن كل طريقة وليها استخدامها في مواقف معينة .. دي بتيجي مع الخبرة .. نقطة أخيرة قبل ما ننتقل للجزئية التانية .. افتراضيا الشغل بالشكل ده على ActiveSheet يعني كل الأسطر اللي كتبناها ممكن نضيف قبل كل سطر كلمة ActiveSheet متبوعة بنقطة (عشان لما نبدأ نتعامل مع أكتر من ورقة نخلي بالنا .. بس لو شيلناها بيفهم محرر الأكواد إننا بنتعامل مع المصنف النشط الورقة النشطة) @ انتهى الجزء الأول@ السؤال التاني : كيف يمكن تحديد النطاق A1:C10 في محرر الأكواد؟ الإجابة : أجب بنفسك (ارحموني شوية كله عليا لوحدي ، أنا تعبت!!) Range("A1:C10").Select هنا استخدمنا الخاصية Range (واحد هيسأل هي Range خاصية ولا كائن .. أقولك هي كائن وخاصية ، هي من ضمن خواص ورقة العمل ، وفي نفس الوقت كائن (يعني ممكن نقول تابع ومتبوع) ...هنا عشان نحدد نطاق الموضوع في منتهى البساطة بنحدد أول خلية في النطاق وآخر خلية في النطاق (لما نجرب نحدد بالماوس الخلية A1 وبعدين نضغط Shift من لوحة المفاتيح ونحدد الخلية C10 هنلاقي النطاق اللي ما بين الخليتين تم تحديده بالكامل ، أنا قلت الحتة دي ليه ؟ ؛ عشان أوصلكم معلومة إننا كل اللي بيهمنا عشان نحدد نطاق بدايته ونهايته ..... نلاحظ إننا فصلنا بين البداية والنهاية بالعلامة دي : طريقة تانية : Range("A1", "C10").Select زيها بس الفصل بين البداية والنهاية بيكون بفاصلة .. وهنا لاحظ الاختلاف بنفسك (مش كل حاجة لازم نشرحها بالتفصيل .. فيه ناس بدأت تحس بالملل والرتابة ) طريقة تالتة : اننا نستخدم Range و Cells مع بعض Range(Cells(1, 1), Cells(10, 3)).Select واحد هيبص للسطر اللي فات ويقولي ايه الكلكعة دي إنت كنت ماشي زي الفل والأمور واضحة ..مالها بقت ضلمة ليه كدا ؟؟ يا حاج سعد ولا ضلمة ولا حاجة إنت بس ركز كد .. الخاصية Range بيكون وراها قوسين بين القوسين بداية ونهاية .. البداية Cells(1, 1) اللي هي مرادف الخلية A1 والنهاية Cells(10, 3) اللي هي الخلية C10 بكدا نكون حددنا البداية والنهاية داخل الخاصية Range ...أظن الأمور كدا بقت واضحة يا شوقي !! طريقة رابعة إننا نسمي النطاق في ورقة العمل .. وطبعا دي أمرها بسيط ..داخل ورقة العمل بحدد A1:C10 وأسميها عن طريق وضع الماوس في صندوق الاسم ونكتب اسم وليكن Officena Range("Officena").Select ومننساش إن Officena دي اسم للنطاق ، والاسم نص ، والنص يؤكل إذاً الجبن يؤكل ..أعتذر (سرحت في الفلسفة : الخوف جبن والجبن يؤكل إذاً الخوف يؤكل ..دا منطق فاسد) أما المنطق بتاعنا مش فاسد الحمد لله ... الاسم نص والنص يوضع بين أقواس تنصيص. خامس طريقة (طريقة باشمهندس المنتدى .. من أحب الناس لقلبي) [A1:C10].Select @انتهى الجزء الثاني@ الجزء الثالث عن طريقة تحديد خلايا أو نطاق في ورقة عمل أخرى داخل المصنف .. ودي بسيطة بس ركزوا لأنها مختلفة شوية أد كدا (طبعا محدش شايف ايدي والحمد لله ، لأنكم لو شفتوا ايدي هتدعوا عليا !!..) Application.Goto Sheets(3).Range("A1:C10") الخاصية Goto دي مش خاصية يا متنورين ، دي Method لأنها حدث أو فعل (نسينا ..كله يراجع تاني ، وإلا مش هكمل ) معناها( اذهب إلى ) ، وبعدين مسافة ، وبنحدد المكان اللي هيروحله محرر الأكواد .. نخلي بالنا هنا مستخدمناش Select والله يا أبطال مستخدمناها ، ولو استخدمناها محرر الأكواد هيفضحنا برسالة خطأ الـ Method هنا اللي اسمها Goto أغنت عن الـ Method اللي اسمها Select .. لأنه ببساطة مينفعش فعلين في نفس الوقت .. هو دا النظام إذا كان عاجبكم ... مينفعش حدثين مع بعض يا إما Select يا إما Goto طيب نجرب نستعمل Select ونشيل Goto اللي إحنا مش متعودين عليها كدا نجرب ، وإحنا واقفين في الشيت رقم واحد وننفذ السطر التالي Sheets(3).Range("A1:C10").Select شكلها صح ، لكن للأسف غلط ..لأننا دلوقتي بنتعامل مع ورقة عمل تانية ، بالتالي لازم عشان نعمل سطر زي ده ، وميكونش فيه رسالة خطأ ، لازم ولابد وحتما إننا ننشط ورقة العمل اللي هنشتغل عليها بـ Method اسمها Activate (نشط) Sheets(3).Activate Sheets(3).Range("A1:C10").Select كدا نتلاشى رسالة الخطأ ، والحمد لله ..خلاصة الكلام إننا لو استخدمنا Select أثناء التعامل مع ورقة عمل أخرى ، يبقا لازم ننشط ورقة العمل (نديها منشطات عشان متهنجش مننا .. ممكن نستعين بالأستاذ الغالي اللي غايب عننا رجب جاويش) وحتى النطاقات المسماة زي النطاق اللي سميناه من بدري باسم Officena لو أنا في ورقة عمل تانية ، مش هينفع أستخدم Select معاها بردو .. فالأفضل في التعامل مع أوراق العمل الأخرى استخدام Goto Application.Goto Range("Officena") @انتهى الجزء التالت@ وانتهت الحلقة .. مش عارف إذا كنت استوفيت الموضوع النهاردة بالتفصيل ولا لا .. بس عموما لو حد عنده إضافات بالنسبة لتحديد النطاقات يفيدنا بيها .. أنا قلت اللي عندي ، قولوا إنتو اللي عندكو (بارك الله فيكم على حسن المتابعة ، وإلى لقاء مع حلقة جديدة ومعلومات جديدة ..أستودعكم الله) الواجب : متروك لكم حرية عمل مصنف ، وتنوع فيه الطرق المختلفة للتحديد .. كان معكم على الهواء تحديداً في الكرسي الأخير من الصف الأخير في قاعة أوفيسنا .. قاعة أوفيسنا.الصف الأخير.الكرسي الأخير.تحديد(أبو البراء) دمتم في رعاية الله
    2 points
  4. السلام عليكم ورحمة الله وبركاته كيف حالكم إخواني الكرام في المنتدى الغالي؟ لقيت نفسي نفسي (نفسي الأولى غير التانية ..) نفسي الأولى يعني أنا - وأعوذ بالله من كلمة أنا - ، ونفسي التانية يعني حاجة أتمنى أعملها .. المهم لقيت نفسي أعمل حاجة مختلفة .. بشكل مختلف .. بأسلوب مختلف يكون فيه عنصر التشويق والإثارة والبساطة مجتمعين في نفس الوقت. كتير مننا أول ما يسمع كلمة البرمجة والأكواد يتخض وكأن الموضوع مستحيل ...أبدا كل الحكاية إننا بنبدأ غلط مش بناخد الخطوات الصحيحة لتعلم البرمجة. لو عايز تتعلم البرمجة ونفسك بجد تبدأ تتمكن فيها خليك معايا ، هنقضيها رغي شوية وهزار شويتين ، وجد مش كتير ... ايه رأيكم؟ نبدأ على بركة الله .. أول حاجة بعد ما تنصب الأوفيس وتفتح الإكسيل تلاقي اللي انت عايزه مش موجود طيب نظهره إزاي ؟؟ ببساطة فيه زر أوفيس فوق شمال هتضغط عليه وتضغط Excel Options هتلاقي نافذة فيها خيار اسمه Show Developer tab in the Ribbon يعني إظهار التبويب ، وهتلاقي جنبه مربع تحط فيه علامة صح مبروك الخطوة الأولى واحد هيقولي عندك اقف أول خطوة فشلت فيها ..هقوله ربنا ما يحرمنا من الفشل لأن الفشل أول طريق النجاح .. هقولك لو ملقتش اللي بحكي عليه يبقا اصدار الأوفيس مختلف أنا شغال على 2007 ، وحضرتك على 2010 أو 2013 (بالنسبة ل 2003 والله ما أنا معبره كفاية عليه لحد كدا) ... بالنسبة لـ 2010 و 2013 بيكون من قائمة File ثم Options ثم من القايمة الشمال فيه Customize Ribbon وفي الناحية اليمين هتلاقي قائمة بالتبويبات وجنب كل تبويب علامة صح اللي يعجبك علم عليه صح واللي ميعجبكش ارميه في الزبالة... المهم هتلاقي التبويب اللي هيفتح لنا الباب لعالم البرمجة .. دا كان المفتاح للدخول نخش لتاني حاجة المفتاح عشان يفتح معاك لازم تحط عليه شوية زيت ، يعني لازم تضبط إعدادات الماكرو عشان الأكواد تشتغل معاك تمام من التبويب الجديد انقر على Macor Security هيفتح معاك نافذة بتختار منها آخر خيار Enable all macros وبتعلم علامة صح على الخيار اللي جنبه مربع Trust access to VBA الحمد لله خلصنا من النقطة الأولى والتانية ... ننتقل لنقطة جديدة : هيظهر التبويب في الآخر .. جمد قلبك واشرب ديو وافتح الباب لمحرر الأكواد اضغط على Visual Basic من التبويب المذكور أو لو بتحب تتعامل مع الكيبورد اضغط Alt + F11 كدا الباب الحمد لله فتح .. لو أول مرة تدخل على محرر الأكواد متتخضش واحدة واحدة هبندا نتعلم كل اللي موجود .. المهم محدش يستعجلني عشان أنا مستعجل النافذة دي اسمها نافذة المشروع Project window يعني الإكسيل بيتعامل مع المصنف إنه مشروع .. والمشروع مكون من 3 شيتات اللي بنسميهم أوراق العمل Sheet1 و Sheet2 و Sheet3 بس في 2013 الحمد لله بيكون الوضع الافتراضي شيت واحد بس (أصلي بتخنق من حتة 3 شيتات ع الفاضي بحس إن الملف كبير ع الفاضي وكل اللي يلزمني للعمل بشكل مبدئي هو شيت ولما أحب أضيف جديد مش هيكون أمر صعب) المهم مع أوراك العمل بنلاقي الكائن المسمى بالمصنف WorkBook ودا اللي بيحوي التعابين كلها أقصد الأكواد .. طيب محدش سألني ايه المنطقة الرمادي دي ومالها ضلمة ليه كدا؟ أنا أقولك عشان إنت تنورها .. اضغط دبل كليك على Sheet1 مثلا في نافذة المشروع هتلاقيها نورت والحمد لله استعداد لبداية الاحتفال بس فيه نقطة الأكواد لو اتكتبت هنا هتأثر على الورقة دي بس ... في الحتة اللي نورت الصق الكود اللي جاي ده وأفضل تكتبه بايدك عشان أنا شايف ايدك بتترعش وخايف .. قلت لك جمد قلبك الموضوع بسيط نبدأ بكود كدا سهل ولذيذ Sub Hello_Officena() MsgBox "Hello Officena!" End Sub أول كلمة Sub يعني ابدأ صب اللي عندك .. لا غلط .. معناها إجراء فرعي Subroutine يعني بينفذ مهمة محددة. وفي آخر الكود End Sub عشان القفلة (لو فاكرين شعبان عبد الرحيم بيقول ايه في الآخر بس خلاص دي القفلة بتاعته) هنا بقا دي القفلة بتاعت الإجراء الفرعي.. طيب ايه Hello_Officena دا اسم الإجراء ودا له قواعد أول حاجة مينفعش يبدأ برقم 77Hello_Officena ولا ينفع يكون فيه مسافة زي كدا Hello Officena بس ممكن لو حبينا بدل المسافة بحط Underscore اللي هي بتيجي بـ Shift + العلامة اللي على يمين الصفر اللي في الأرقام اللي فوق مش الأرقام اللي ف لوحة الأرقام .. وبردو فيه حاجات محرمة في اسم الإجراء زي علامة # أو $ أو % أو & أو % أو النقطة أو الفاصلة أو أو .. بقولكم ايه كفاية كلام عن اسم الإجراء .. لو كان فيه حاجة غلط في الاسم هيطلع لك رسالة خطأ تعرف إن فيه حاجة مش مظبوطة!! طيب السطر اللي في النص دا هو دا الكود .. الإجراء أو المهمة المراد تنفيذها .. بتبدأ بكلمة MsgBox ودي اختصار للكلمة Message Box أي صندوق الاسم ..... والله انا سرحت بس مش همسح اللي بكتبه خلي الكلام يكون تلقائي .. ودي بنكتب وراها الرسالة اللي عايزين نظهرها .. وطبعا فيه مسافة بعد الكلمة والكلام اللي هو الرسالة دا نص فنحطه بين أقواس تنصيص " " .. واحد برق لي عينه بيقولي بتتعمل إزاي دي قول لأقتلك .. هقوله حاضر يا باشا هقولك دي بتيجي إزاي .. اضغط على Shift وبعدين حرف الطاء بس خلاص .. طبعا أقواس التنصيص في أول النص وفي آخره مهو لازم القفلة. نجرب نشغل الكود إزاي .. فيه أكتر من طريقة يا إما تضغط على مثلث لونه أخضر فوق في شريط الأدوات الموجود في محرر الأكواد .. مش عاجبك شكل المثلث الأخضر خلاص روح لقائمة Run واضغط أول أمر .. لو انت تلميذ ذكي هتعرف الطريقة التالتة من التانية .. هسيبكم تقولوها إنتو ..مش عارفين !! طيب هقول أنا وخلاص اضغط على F5 من لوحة المفاتيح بس بشرط يكون مؤشر الماوس واقف في الكود.. لما نشغل الكود دا اللي هيظهر لي وبكدا أكون وصلتكم وفتحت لكم الباب .. لو عايزين نكمل قولوا كمل مش عايزين .. يبقا كفاية لحد كدا ويا كود ما يقربش منك حد .. ونعمل بالمثل الفلاحي اللي بيقول : ابعد عن الكود وادعي عليه! والسلام عليكم سبحانك اللهم وبحمدك .. نشهد أن لا إله إلا أنت ..نستغفرك ونتوب إليك كان معكم على الهواء مباشرة أخوكم أبو البراء من ملعب أوفيسنا .. إلى اللقاء مع مباراة جديدة وأهداف جديدة وشيقة دمتم بود ====================================== ====================================== السلام عليكم نرجوا وضع ردود الشكر والاعجاب على الرابط ادناه هنا ====================================== ======================================
    1 point
  5. اضافة الى ماتفضل به أستاذ حسين بالامكان أن نضع هذا الكود فى حدث عند الفتح Docmd.maximize انتهى...
    1 point
  6. البراعة فى استعمالدالة instr هى ما لفت نظرى فى ها الموضوع شكرا على هه الإبداعات أستاذ رمهان
    1 point
  7. يبدو انك لم تفهم اك اقصده في المشاركة السابقة ! اخي بدل كلمت "مسلم" في الاستعلام اكتب الرقم 1 .
    1 point
  8. تعجبني ردودك دائما اخي عبدالرحمن !!
    1 point
  9. اخي الكريم اذهب الى الجداول الرئيسية للقيم المنسدله واكتب الرقم . فمثلا للمسلم اكتب 1 وللمسيحي 2 وهكذا. وكذلك الفصول افتح الجدول الخاص بالفصول واكتب الرقم الخاص بكل فصل.
    1 point
  10. قم بإدراج موديول جديد وأضف فيه التالي Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long Sub ChaingeLanguage(KBLang As String) Dim pwszKLID As String Select Case KBLang Case "Arabic" pwszKLID = "00000401" Case "English" pwszKLID = "00000409" End Select LoadKeyboardLayout pwszKLID, 1 End Sub دمت بخير
    1 point
  11. بعد اذن فاكهة المنتدى (بس مش فاكهة بتتاكل ) هههههههههههههه استاذى الكبير / ياسر خليل شعلة نشاط المنتدى ( اللون الاحمر اللى بتحبه) مش حرمك من شئ بعد اذنك هقدم شرح بسيط فى سلسة افتح الباب واهرب من الشباك هههههههههههههههههه طبعا عمرى ما هعرف اشرح بنفس اسلوبك الرائع والجذاب اللى بيتسم بخفة ظلك ولكن هحاول اقلدك نبدء بسم الله وللامانه العلمية هذه الصورالمرفقه من مواقع اجنبية لان تصميمها اصعب وياخد وقت فقمت بنسخها والشرح عليها فقط اولا كيفية التعامل مع الخلايا من خلال Rang لو عايزين نعمل كود ونقول b3 = 2 يكون الكود كالتالى ()sub yasser Range("b3").Value = 2 end sub طبعا زر commandButton1 كما هو موضح بالصورة يتم ادراجه من شريط القوائم DeveloPer ثم insert ثم الضغط على اول زر فوق بالقائمة على اليسار ورسمة على ورقة العمل ستظهر لك قائمة وبها كل الاكواد اللى عملتها بالملف وطبعا منها yasser وهو الكود السابق اللى تم عمله فمجرد الضغط على هذا الزر سيتم تنفيذ الكود كما هو موضح بالصورة طيب لو واحد قال انا عايز اعمل عدة خلايا تساوى 2 مش خلية واحده بمعنى عايز A1=5 & A2=5 & A3 = 5 &A4=5 اوك نرجع للكود السابق ونعدله كالتالى ()sub yasser Range("A1:A4").Value = 5 end sub لو رجعنا الى ورقة العمل وقمنا بالضغط على زر commandButton1 سنجد التالى كما هو موضح بالصورة واحد شاطر يقولى انا مش عايز الخلايا ورا بعض هو انتى هتضحك عليا هقوله طيب انتى عايز ايه هيقولى الخلايا اللى انا عايزها هى A1:A2 & B3:C4 = 10 هقول طيب أهدى عليا تعالى نرجع بقى نعدل بالكود بتاعنا ()sub yasser Range("A1:A2,B3:C4").Value = 10 end sub لو رجعنا الى ورقة العمل وقمنا بالضغط على زر commandButton1 سنجد التالى كما هو موضح بالصورة ثانيا/ كيفية التعامل مع الخلايا من خلال cells فى الكود الاول فوق ()sub yasser Range("b3").Value = 2 end sub لو حبينا نستخدم cells بدلا من Range يكون الكود كالتالى ()sub yasser Cells(3, 2).Value = 2 end sub طبعا واحد هيقولى انا تايهة ايه اللى بتعمله ده هقول براحه شوية ومتستعجلش على رزقك الخلية B3 فى اى صف واحد هيقولى فى الصف 3 طيب وفى اى عمود واحد هيقولى فى العمود 2 اذن(رقم العمود , رقم الصف)Cells ثالثا/ كيفية التعامل مع الخلايا من خلال Range& cells فى الكود الثانى فوق ()sub yasser Range("A1:A4").Value = 5 end sub واحد هيقولى ينهار اسووووووووووووووووح ايه ده ودى هتتعمل ازاى بقى هقوله براحه شوى الكود اهوو يا عم و لا تزعل ()sub yasser Range(Cells(1, 1), Cells(4, 1)).Value = 5 end sub الخلية A1 تقع فى اى صف واى عمود تقع فى العمود 1 والصف 1 أذن ( Cells(1, 1 الخلية A4 تقع فى اى صف واى عمود تقع فى العمود 1 والصف 4 أذن ( Cells(4, 1 طيب لما نستخدم Range يكون الكود كالتالى Range(Cells(1, 1), Cells(4, 1)).Value = 5 ارجوا ان اكون وفقت فى الشرح طبعا الشرح بالكتابة صعبه جدا الله يكون بالعون يا استاذ ياسر ويجعله فى ميزان حسناتكم انا كنت مفكر الموضوع سهل لكن لا يا عم توبه هههههههههههه مش مستغنى عن صوابعى الى اللقاء بحلقه اخرى من حلقات افتح الباب واهرب من الشباك اخرج فاكهة المنتدى / ياسر خليل
    1 point
  12. الحلقة السادسة ************ أهلا بكم إخواني الأحباب مع حلقة جديدة ، والحلقة دي استكمال لحلقة المتغيرات .. كنا اتكلمنا عن نوعين من المتغيرين باستفاضة (3 مرات على ما الكلمة اتكتبت معايا ) ..اتكلمنا عن النوع Integer ودا بيكون للأرقام الصحيحة ، والنوع String ودا بيكون للقيم النصية. نكمل رغي عن المتغيرات عشان نخلص منها ونخلص عليها .. بداية أحب أعرفكم بدالة في VBA اسمها CINT ..الدالة دي وظيفتها إنها بتحول أي قيمة لعدد صحيح من النوع Integer (ودي اختصار Convert Integer..الحرف الأول من Convert وأول 3 حروف من Integer) >> الكلام مش هيفيد بقدر التطبيق :: نجرب المثال التالي Dim LValue As Integer LValue = CInt(8.45) MsgBox LValue لو نفذنا الكود هنلاقي إن القيمة أصبحت 8 .. طيب نغير الرقم إلى 8.5 ونشوف النتيجة بردو نفس القيمة 8 .. طيب نغير الرقم ونخليه 8.6 خلي بالك متتوقعش 8 ، القيمة بقت 9 (تسعى في الخير) الملاحظات المستفادة : إن الكسر لو أقل من أو يساوي 0.5 .. القيمة بتتقرب لتحت ، أما لو الكسر أكبر من 0.5 يبقا يتقرب لفوق ..(يعني الدالة دي ممكن نستفيد منها في أمور تانية .. زي التقريب) جرب القيمة 8.50001 .. جربتو : أكيد لا نازلين قراية وخلاص .. اللي جرب هيتأكد من إن : لو هفوة مفيش تفاهم!! نراجع مرة تانية المتغير Integer بمثال عملي : Dim nRowCount As Integer nRowCount = Rows.Count MsgBox nRowCount أولاً عايزين نتعلم شيء مهم جداً وإحنا لسه في البداية : إننا لما نيجي نسمي متغير يا ريت يكون الاسم وصفي (يعني كل المتغيرات عندي هسميها وصفي ..شكلك بتعزه يا أستاذ ...طيب ما نسميه شوقي أو مراد ..لازم وصفي ) .. يا جدعان انتو فهمتوني غلط أنا أقصد بكلمة وصفي إنه يوصف الاسم بشكل كويس .. يعني مثلا نشوف نوع المتغير نلاقيه Integer فنقوم في أول الاسم نحط مثلا n عشان يوضح لأي حد يقرا الكود إنه Interger ، وبعد الحرف الدلالي n نكتب اسم للمتغير يكون دال عليه .. أنا مثلا هعد الصفوف فاقوم أكتب RowCount .. يبقا في النهاية اسم المتغير nRowCount ...طبعا اللي بقوله ده مش الزامي ..دي عادة حسنة بيتبعها المبرمجون المحترفون ..مش الاقي ناس تكتب mghy حاجة كدا ملهاش دلالة على اسم المتغير ...!! السطر التاني وضعنا قيمة للمتغير وهي Rows.Count وطبعا كلمة Count دي Method بمعنى (عد) ، ودي وظيفتها إنها تعد بس تعد ايه .. تعد الصفوف Rows واحد يقولي طيب ممكن أعد الأعمدة أقوله أيوا Columns.Count مفيش مشكلة .. واحد يقولي يعني ممكن أعد الخلايا في نطاق معين زي A1:C5 ، بردو مفيش مشكلة Range(Cells(1, 1), Cells(5, 3)).Count المهم خلينا في السطر التالت (محدش يخرجني برا الموضوع) .. مش محتاج شرح ..إظهار قيمة عدد الصفوف في رسالة ننفذ الكود (رسالة خطأ .. ميهمكش من الفشل .!! ) واحد هيسألني طيب الغلطة فين ..كل حاجة زي الفل .. المحرر دا بيستعبط ! أنا مش هشتغل على المحرر دا تاني سلااام .. هرد عليه وأقوله اصبر بس كل الحكاية إننا بنتعامل بقواعد وقوانين ..أنا لما عرفت المتغير حددت نوعه بـ Integer ودا بيكون للأرقام الصحيحة ما بين 32, 767 و القيمة السالبة -32, 768 يعني ببساطة بيتعامل مع الأرقام دي وبس ..ميقدرش يتعامل مع أكبر من كدا .. طيب ايه الحل ؟ ايه البديل ؟ البديل المتغير Long دا بيتعامل مع الأرقام الصحيحة بردو ، بس ما بين 2,147,483,647 -2,147,483,648 طيب نرجع للكود بتاعنا ..عدد الصفوف في إكسيل 2007 مثلا يساوي 1048576 ، والمتغير Integer قلنا إن صحته على أده ، فيقوم المتغير Long ييجي ويشيل.. يبقا كل اللي هنغيره كلمة واحدة عشان الامور تمشي تمام (نشيل Integer ونحط Long) يعني ممكن الكود يكون بالشكل ده (لاحظوا أنا هغير البادئة في اسم المتغير إلى L اختصار Long) Dim LRowCount As Long LRowCount = Rows.Count MsgBox LRowCount بكدا نكون اتعرفنا على Integer و Long في حالة التعامل مع الأعداد الصحيحة. ننتقل لجزئية جديدة .. التعامل مع الأرقام اللي فيها كسور عشرية.. مش هنطول في الكلام ، هناخد باختصار مثال عملي عشان نفهم الدنيا ماشية إزاي Dim FloatingPoint As Single FloatingPoint = 10 / 3 MsgBox FloatingPoint طيب نغير كلمة Single بكلمة Double ونلاحظ الفرق..!! مش هشرح الفرق لكن هقول إن اللي فهم الفرق بين Integer و Long ، هيفهم الفرق بين Single و Double ... حازم رفع ايده وقالي لأ يا باشا اشرحها بردو (حاضر يا عم حازم حازم هنشرحها عشان نأكد المعلومة بس مش أكتر ) لما استعملنا النوع Single نلاحظ إن عدد الأرقام العشرية 6 بس ، أما Double فنلاقي إن اللي على يمين العلامة 14 رقم (جرب الكود مرة كدا ومرة كدا وعد بنفسك (فيه ناس هتكسل)) نقطع على الجماعة المدرسين اللي بدوا رياضيات ، ونقول إن مساحة الدائرة = ط نق2 ، والله مش عارف إذا كان صح ولا غلط عموما القيمة ط = 22/7 ، ودي موجودة في الإكسيل باسم Pi ، يعني لو كتبنا في خلية =PI() هيديني قيمة الـ ط ... المهم نستفيد في المثال التالي معلومة جديدة (إننا ممكن سنتخدم بعض الدوال الموجودة في الإكسيل ونطبقها في الـ VBA) Dim FloatingPoint As Single FloatingPoint = WorksheetFunction.Pi MsgBox FloatingPoint نخلي بالنا إننا وضعنا قيمة للمتغير واستخدمنا WorksheetFunction عشان أقول لمحرر الأكواد إننا هنستخدم دالة ، وبعدين نقطة Period وبعدين اسم الدالة هنا Pi ومفيش أقواس (دا الاختلاف ..لما استخدمناها في ورقة العمل كان لازم أقواس أما هنا فلا يتم استخدامها .. نجرب مرة المتغير Single ومرة المتغير Double ..(أي خدمة يا حازم حازم .. منستغناش عن خدماتك يا متسر ياسر ياسر ) نكمل كلام عن المتغيرات عشان نخلص منها : نتكلم عن المتغير التقيل Variant ودا بنستخدمه لما نكون مش عارفين نحدد القيمة هل هي رقم ولا نص ولا كائن Object ولا ولا (ولى زمن الجهل وأقبل زمن التعلم) .. فبنستخدمها ..بس نخلي بالنا إنها بتستهلك مساحة من الذاكرة فكثرة استخدامها بتخلي التعامل مع الأكواد يكون بطيء .. المتغير اللذيذ Boolean ودا يا أبيض يا أسود .. يا صح يا غلط .. يا True يا False .. يا 1 يا صفر بتكون القيمة المخرجة إحدى قميتين فقط Dim bOfficena As Boolean MsgBox bOfficena هنا حددنا نوع المتغير بـ Boolean .. لما ننفذ الكود هنلاقي رسالة فيها False (نفهم من كدا إن الاختيار الافتراضي هو False) يعني مش زينا بنفترض حسن النية ، لا دا ماشي بمبدأ المتهم مجرم حتى تثبت براءته ، فهنا وضع القيمة False للمتغير .. نجرب نضع القيمة صفر Dim bOfficena As Boolean bOfficena = 0 MsgBox bOfficena هنلاقي نفس الناتج اللي فات False ..!! نغير شوية ونخلي القيمة أي قيمة غير الصفر ، هتلاقي الناتج True فيه متغيرات تانية زي Date للتعامل مع التواريخ ، والمتغير Currency للتعامل مع العملات وبكدا كفاية أوي على المتغيرات .. المهم في الموضوع الفكرة تكون وصلت .. للمزيد من الشروحات يرجى الإطلاع على الدورة الرائعة التي يقوم بها أخونا محمود الشريف (كلنا بنكمل بعض ..دا شعارنا في المنتدى ..أنا بس مجرد واحد معاه مفاتيح ..هديكم نسخة منها عشان تعرفوا تفتحوا الباب يا أحباب) كان معكم صانع المفاتيح Keys Maker أخوكم أبو البراء وإلى لقاء في حلقة جديدة من حلقات افتح الباب واهرب من الشباك .. دمتم بود .. تقبلوا حبي وأشواقي وتحياتي القلبية
    1 point
  13. بعد إذن الاستاذ إضافة لدرس الحلقة الخامسة درس مصور أول خطوة نقوم بها إنشاء موديل جديد ثاني نكتب الكود التالي في الموديل Sub تحديد() End Sub نرجع للصفحة نقوم بإدراج زر تحكم ثم نقوم بتعين ماكرو ندخل على الموديل ثم نقو بإضافة الاسطر التالية Sub تحديد() Range("E4").Select End Sub Sub تحديد() Range("Officena").Select End Sub وهكذا مع بقية الكودات أتمنى الشرح المصور ان ينال إعجابكم دمتم في رعاية الله وحفظه
    1 point
  14. جر ب باستخدام الجدول المحوري وتحصل على افضل نتائج مع الاحترام للجميع m-m.rar
    1 point
  15. الحمد لله .. بس متحرمناش من شموعك يا أخ محمد مهمة جدا الشموع (إنت عندك عيد ميلاد النهاردة ولا ايه!!)
    1 point
  16. استاذى الفاضل طبعا حضرتك كبير وانا تلميذك وشكرا على مرورك العطر شكرا على التنويه وكنت اتمنى احد الاعضاء الجدد هو من يطلب ذلك عموما بعد اذن حضرتك اشرح الدالة وهى iferror هذه الداله تتكون من جزئين الجزء الاول وهو القيمة وطبعا فى مثلنا هذا هو (0;2;A1:c5!الطلبه;VLOOKUP(A1= الجزء الثانى وهو النتيجة فى حاله عدم وجود القيمة المطلوبة ويكون شكل الداله كالاتى (الرقم فى حاله عدم وجود قيمة ;القيمة المطلوبه)if error= لو حبينا نطبق الداله على المثال السابق ("" ;(0;2;A1:c5!الطلبه;iferror(VLooKup(A1 = الرقم فى حالة عدم وجود القيمة هنا "" وذلك يعنى ادينى فاضى قيمة فارغه ويمكن ايضا (0 ;(0;2;A1:c5!الطلبه;iferror(VLooKup(A1 = الرقم فى حالة عدم وجود القيمة هنا 0 وذلك يعنى ادينى 0 بالخلية
    1 point
  17. متابعة جيدة مستر حسام بارك الله فيك وجزيت خيرا على تقديم المساعدة (هو دا الشغل ..الله ينور عليك .. بالنسبة لكشكول الواجب لسه إنت مجبتوش لحد دلوقتي ..كدا هاخك غياب )
    1 point
  18. السلام عليكم عمل رائع ولكن انتى مصعبة الموضوع ليه على نفسك كاتبه ارقام الاعمده فوق ليه طيب متكملى الداله وتكتبى العمود فى الجزء الثالث منها وبعدين تكملى الجزء الرابع وهو 0 أو 1 مطابقه تامه او غير تامه لكن بشكل عام برافو عليكى وبخصوص كود التفقيط طبعا رائع
    1 point
  19. السلام عليكم و رحمة الله وبركاته الأخ ابو الذهب و الأخ الحبيب ياسر خليل ابدعتما جزاكم الله خيرا
    1 point
  20. أخي الفاضل المشكلة أن طريقة إعداد النموذج الفرعي خطأ وأهمها السعر لأنك جعلته مربع تحرير وسرد (كود صنف) فبالتالي هو ينقل القيمة وهي كود الصنف ويجب أولا أن تحيط علمك بأنه يجب أن تكون مسميات الحقول بالإنجليزية لتجنب الأخطاء عند كتابة الأكواد ويمكنك من خصائص الحقل في التسمية بأن تكتبه بالعربي عموما.. قمت بتغيير في الجداول ووضعت حقل آخر للسعر في تفاصيل الفاتورة ومهمته هو عند جلب سعر صنف من جدول الأصناف يمكن التعديل عليه دون التعديل في جميع الفواتير لأنك لو قمت بتعديل أسعار الأصناف في جدول الأصناف سيتم التعديل في جميع الفواتير السابقة والجديدة وهذه مهمة جدا ستحتاجها مستقبلا وتعديل شيئاً آخر بطريقة بسيطة لتأخذ فكرة وهي عند اختيار الوحدة (كيلو) يتم الحساب × 1 وللطن × 1000 طبعا تعديل هذه الفكرة للاستزادة فهناك من يفعلها بالاستعلام تحياتي مشكلة فى النموذج الفرعى Edit.rar
    1 point
  21. من المفترض أنه إذا وجد الماء بطل التيمم .. فالأستاذ الكبير عبد الله باقشير لا يمكن مضاهته بأي حال من الأحوال ولكن إثراء للموضوع تفضل أخي محمد Private Sub TextBox1_Change() Select Case Me.TextBox1.Value Case Is < 2 Me.TextBox1.BackColor = &H80FF80 Case 2 To 4 Me.TextBox1.BackColor = &H80FFFF Case Is > 4 Me.TextBox1.BackColor = &HFF End Select End Sub
    1 point
  22. استاذنا الفاضل ومعلمنا القدير عبدالرحمن هاشم بص فى حجات فى اللى انت قلتها هنا انا مش فاهمها انا حديث عهد على البرمجه بوجه عام وعلى الاكسس بوجه خاص امممممممم بس كل الموضوع انا بفضل ربنا سبحانه وتعالى بأحاول احلل الحاجه وافهم طبعا ده بفضل ربنا اولا ثم شرح اساتذتنا الكرام فى المنتدى انا لانى مش مبرمج اصلا انا بس نفذت طلب استاذنا ابو آلاء زى ما طلب مجرد نقل انا عارف انا ما نقلتش كوبى وبيست فى تعديلات عملتها ومش عملتها لانى مبرمج وفاهم انا باعمل ايه لا ابدا والله الفضل الاول لله سبحانه وتعالى اولا واخيرا انا بس حللت الشغل النموذج الاصلى وفهمت الدنيا ماشية ازاى وعدلت واضفت على نموذج استاذ ابو الاء وبعدين اخدت الفورم بتاع السيرش كوبى حتى بدون تنقيح او تعديل لان الوقت ضيق يا ادوب انام لى ساعه قبل الشغل طبعا انت معلم قدير وانا اتعلم منك الكثير جزاك الله عنا انت وكل القائمين على امر المنتدى كل الخير أخي الكريم زادك الله بسطة في العلم والخير وشكرا لتقديرك وذوقك الرفيع.. أنا مجرد تلميذ في هذا المنتدى الكريم والمنتديات الأخرى لمعلمينا الأجلاء الأفاضل جزاهم الله كل خير والشكر والحمد أولا وأخيرا لله عز وجل لتسخيره لنا هؤلاء المعلمين الأفاضل لتعليمنا ولو لاحظت أنني ذكرت اسم صاحب الدالة (استاذنا الفاضل "أكسسنا") لأنه واجب عليا ذكر كل من تعلمت منه حرف وقمت بما قمت أنت به كـ(استزادة) بطريقة أخرى وعلى الله الأجر والثواب لنوصل ما توصلنا له من معلمينا ولا نوقفه عندنا مهما تعلمنا سنظل لهم تلاميذ.. فجزاهم الله كل خير خالص تحياتي لكم جميعا :)
    1 point
  23. جميل أخي الحبيب أبو ذهب ولإثراء الموضوع هذا ملف فيه شرح وافي لمثل طلبك VBA DIR Function.rar
    1 point
  24. السلام عليكم مع شكري وتقديري للأستاذ حسام فهذه محاولة مني كي أُفيد كما استفد من هذا الموقع الرائع. أرجو الاطلاع على هذه المحاولة والتعقيب عليها إن احتاجت للتعديل. الأخت ريتال بعد التحية. هذه محاولة بسيطة مني علها تكون المطلوب لما تريدينه.وهي ليست بالأكواد ولكن بالمعادلات فيما عدا كود التفقيط وهو حتى الألف أو أكثر لست أذكر فهو ما استخدمه في برنامجي للشهادات المدرسية الخاص بي. وفيها شرح مبسط. إجابة نموذج.rar
    1 point
  25. بارك الله فيك أخي حسام وجزيت خيرا ..بس بلاش تقلد خليك مستقل ههههه
    1 point
  26. عند عدم وجود اسم الطالب في صفحة الفصل تاتي بالخطأ #N/A كيف يمكن ازله هذا الخطأ
    1 point
  27. اخى ياسر الملف يعمل بنجاح الا اذا كنت لم افهم ماذا تريد بالتحديد مثلا قم بتغير السطرالاتى فى شيت مصروفات النقل 11-11-2014 20 سيلكون النفل الى 11-11-2014 30 سيلكون النفل ثم اذهب الى شيت المجموع ستجد ان الرقم تغير من 130الى 140 تقبل تحياتى
    1 point
  28. الأخ الفاضل حسام الحل لم يعجبني لأن فيه أعمدة مساعدة تفضل الحل بدون أعمدة مساعدة Milkana.rar
    1 point
  29. أخى الفاضل راجع الملف المرفق ... لربما به طلبك تحياتي Fill Combo.rar
    1 point
  30. مبدئيا أنا مش شايف قاعدة بيانات يستند العمل إليها بشكل واضح يرجى عمل ورقة بيانات بالبيانات الخام بأي عدد من الأعمدة لأي عدد من الصفوف حتى يسهل على الأعضاء مساعدتك يعني لازم قاعدة بيانات ...! ومن خلالها يبدأ التعامل مع الملف بشكل احترافي .. وإخراج التقارير بالصورة المرغوبة ...
    1 point
  31. أخي الكريم مبدئيا طبقا لما تعلمناه من الإخوة الخبراء بأن الفواتير عبارة عن جدول رئيسي به رقم الفاتورة وتاريخها وجدول آخر لتفاصيل الفاتورة ومن الأفضل أخي الكريم أن تجعل المسميات في الحقول بدون مسافات حتى لا تعيقك في كتابة الأكواد عموما تفضل هذا التعديل جربه وبإذن الله سأقدم العون ما دام أتيح لي مما تعلمته من الخبراء جزاهم الله عنا كل خير سؤال.. هل توجد مثلا (أصناف) سيتم إدراجها ليتم عليها تطبيق الحسابات الضريبية؟؟ role-edit.rar
    1 point
  32. بسم الله ما شاء الله إخوانى فى الله من أحببنى فى الفورم وبسط لى التعامل مع الفورم وتعاملت معه عبر المنتدى أستاذى القدير // ضاحى الغريب ومن جعلنى أعشق الفورم وحركاتها وتعرفت عليه من خلال إبداعاته أستاذى القدير // شوقى ربيع بارك الله فيكم وزادكم الله من فضله ومن علمه وآدام الله عليكم نعمتى الصبر والعطاء مجهود مشترك أكثر من رائع وليس التلميذ من يقيم أعمال أساتذته بل يفتخر بروائع أعمالهم رافعا رأسه الى السماء أنه تتلمذ ومازال تلميذا بمدارسهم على أيدى عمالقة ومبدعين شائت أقدار المولى عز وجل أن يجتمعوا بمنتديات أوفيسنا حتى تكون منارة لبث أشعه العلم لمن يريد أن يتعلم منهم ويستفاد من مدارسهم وخبراتهم وعلى رأسهم العلامه القدير // عبد الله باقشير جزاكم الله خير الخير أنتم وكل من تعلمت منه حرفا فى هذا المجال حفظكم رب العالمين من شرور خلقه أجمعين بسر حفظه لكتابه الحكيم وتقبلوا منى وافر الاحترام والتقدير
    1 point
  33. أعتقد أن السؤال مقلوب لكن نفس المعادلة تنفع في الحالتين تفضل المرفق Book11_2.rar
    1 point
×
×
  • اضف...

Important Information