اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

كود مفيد جدا للاستاذ ياسر


إذهب إلى أفضل إجابة Solved by علي فاهم,

الردود الموصى بها

جزاكم الله خيرا

هذا الكود الرائع نريده ينسخ بعد اخر صف به بيانات .. لايمسح بيانات بعد اذنكم

 'هذا الكود للمحترم ياسر العربي
 ' الهدف من الكود هو نسخ صف الى صفوف تحته بالعدد المطلوب
 'وقبل النسخ يتم مسح البيانات القديمه
 'تاريخ الانشاء 30/7/2017
 'تم التعديل على الكود بواسطه المحترم ياسر خليل لوجود متطلبات جديده
'=*=*=*=*=*=*=*=*=*=*=*=*=*=*
Private Sub CommandButton1_Click()
    Dim ws      As Worksheet
    Dim sh      As Worksheet
    Dim lr      As Long
    Dim lc      As Long
    Dim c       As Long
    
    Set ws = Sheets("بيانات الطلبة")
    c = ws.Range("C2").Value
    
    If TextBox1.Text = ws.Range("F1") Then
        Me.Hide
        TextBox1.Text = ""
        MsgBox "كلمة المرور صحيحة و سيتم تنفيذ المطلوب", 64
        
        Application.ScreenUpdating = False
        Application.Calculation = xlManual
        
 'اذا كان عدد المتقدمين اقل من اتنين يتم ايقاف الكود ولا يكمل
            If ws.Range("C2") < 2 Then
                Exit Sub
            End If
            
            For Each sh In Sheets(Array("بيانات الطلبة", "إنجاز1", "تحريرى ف 1", "تحريرى ف 2", "أعمال السنة", "كشف الدور الثاني", "رصد الترم الثانى", "كشف ناجح"))
                lr = IIf(LastOccupiedRowNum(sh) = 7, 7, LastOccupiedRowNum(sh))
                lc = LastOccupiedColNum(sh)
                
       'حذف البيانات الموجودة في النطاق المحدد
        sh.Range("A8").Resize(Rows.Count - 7, lc).Clear
                       
'نسخ الصف السابع لكل شيت من حيث عدد الاعمدة الى العدد المحدد بعدد المتقدمين
    sh.Range("A7").Resize(1, lc).AutoFill Destination:=sh.Range("A7").Resize(c, lc)
            Next sh
            
            Application.Goto ws.Range("A1")
        Application.Calculation = xlAutomatic
        Application.ScreenUpdating = True
        Unload Me
    Else
        MsgBox "عفواً كلمة المرور خاطئه و لن يتم تنفيذ المطلوب", vbExclamation
        TextBox1.Text = ""
        TextBox1.SetFocus
    End If
End Sub

Public Function LastOccupiedRowNum(Sheet As Worksheet) As Long
    Dim lng As Long
    
    If Application.WorksheetFunction.CountA(Sheet.Cells) <> 0 Then
        With Sheet
            lng = .Cells.Find(What:="*", After:=.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
        End With
    Else
        lng = 1
    End If
    
    LastOccupiedRowNum = lng
End Function

Public Function LastOccupiedColNum(Sheet As Worksheet) As Long
    Dim lng As Long
    
    If Application.WorksheetFunction.CountA(Sheet.Cells) <> 0 Then
        With Sheet
            lng = .Cells.Find(What:="*", After:=.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
        End With
    Else
        lng = 1
    End If
    
    LastOccupiedColNum = lng
End Function
'==================================
Private Sub UserForm_Click()

End Sub

لايوجد له ثغره روعه

رابط هذا التعليق
شارك

اوهذا الكود الرائع ولكن مشكله المسح التي تلافاها استاذ ياسر خليل  في كوده السابق

نريده بنسخ بعد الصفوف الموجوده فعلا ولايمسح

 'هذا الكود للمحترم ياسر العربي
 ' الهدف من الكود هو نسخ صف الى صفوف تحته بالعدد المطلوب
 'وقبل النسخ يتم مسح البيانات القديمه
 'تاريخ الانشاء 30/7/2017
'=*=*=*=*=*=*=*=*=*=*=*=*=*=*
Private Sub CommandButton1_Click()
    Dim sh As Worksheet, lr As Long, str As String
    If TextBox1.Text = Sheets("بيانات الطلبة").Range("F1") Then
        Me.Hide
        TextBox1.Text = ""
        MsgBox "كلمة المرور صحيحة و سيتم تنفيذ المطلوب"
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        'اذا كان عدد المتقدمين اقل من اتنين يتم ايقاف الكود ولا يكمل
        If Sheets("بيانات الطلبة").Cells(2, 3) < 2 Then
            Exit Sub
        End If
        '=*=*=*=*=*=*
            'On Error Resume Next
 For Each sh In Sheets(Array("بيانات الطلبة", "إنجاز1", "تحريرى ف 1", "تحريرى ف 2", "أعمال السنة", "كشف الدور الثاني", "كشف ناجح"))

            lr = sh.Range("B" & sh.Range("b10000").End(xlUp).Row).Row
            sh.Activate
            ' str المتغير دا يتم تخزين اسم العمود الاخير فيه للعمل عليه
            'يتم الذهاب الى اخر عمود بالاعتماد على الصف السادس  ويتم استخلاص اسم العمود من اسم النطاق
   str = Split(sh.Range("XFD7").End(xlToLeft).Address, "$")(1)
            'حذف البيانات الموجودة في النطاق المحدد
            sh.Range("A8:" & str & lr + 7).Clear
            '   نسخ الصف السابع لكل شيت من حيث عدد الاعمدة الى العدد المحدد بعدد المتقدمين
            sh.Range("a7:" & str & 7).AutoFill Destination:=Range("a7:" & str & [    'بيانات الطلبة'!C2] + 6)
        Next
      Sheets("بيانات الطلبة").Select
    Range("A4").Select

        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
        Unload Me
    Else
        MsgBox "عفوا كلمة المرور خاطئة و لن يتم تنفيذ المطلوب"
        TextBox1.Text = ""
        TextBox1.SetFocus
    End If
End Sub

Private Sub Label1_Click()

End Sub

Private Sub UserForm_Click()

End Sub

 

 

اي الكودين .. بعد اذنكم وشكرا مقدما لحضراتكم

رابط هذا التعليق
شارك

إذا كنت لا تريد المسح قم بإزالة هذا السطر فقط

sh.Range("A8:" & str & lr + 7).Clear

أما إذا كان المطلوب غير ذلك فيرجى إرفاق ملف موضحاً فيه شكل النتائج المتوقعة

  • Like 1
رابط هذا التعليق
شارك

الاستاذ ياسر

شكر ا جزيلا لك

الملف به زرين الزر الاول لينسخ صفوف بعدد الطلبه الاجمالي

والزر التاني نريده ينسخ بعد هذه الصفوف الموجوده اصلا

هايكون للطالب المحول  الينا .. لازم يوضع اسمه في اخر الصفوف

 

نسخ صفوف بعد الصفوف الموجوده.rar

رابط هذا التعليق
شارك

مثال عدد طلاب الصف الدراسي 200 طالب

ضغطنا الزر فنسخ صفوف بعدد 200 .. بعد اسبوع جاء الي المدرسه طالب محول .. مطلوب اضافته للمدرسه فيكون عدد طلاب المدرسه 201

الطالب المحول + الطلاب المنقولون

 

رابط هذا التعليق
شارك

في ١٣‏/٨‏/٢٠١٧ at 05:55, ياسر خليل أبو البراء said:

إذا كنت لا تريد المسح قم بإزالة هذا السطر فقط


sh.Range("A8:" & str & lr + 7).Clear

أما إذا كان المطلوب غير ذلك فيرجى إرفاق ملف موضحاً فيه شكل النتائج المتوقعة

ويتبقى سطر بدايه نسخ الصفوف مختلف .. ممكن ينسخ بعد 100 صف او ينسخ بعد 200 صف

نرجو الحل لو سمحت

رابط هذا التعليق
شارك

ليس لدي فكرة عن المطلوب ولو كان لدي ما ترددت في المشاركة .. ربما يفهم غيري المطلوب ويشارك في الموضوع إن شاء الله

رابط هذا التعليق
شارك

الكود الاول الذي تفضل به استاذ ياسر العربي وتكرم استاذ ياسر خليل باضافه فيه ليتناسب والمطلوب .. ماذا يفعل ؟

يمسح كل بيانات الصفحات ابتداء من الصف التاني بعد الترويسه .. تمام

الكود الذي يطلبه المعلمون الان

هو نفس الكود في عمله ولكن لايمسح اي بيانات

لاننا سنحافظ عليها

وهي بيانات الطلاب ..

بعد مده من الزمان سياتي طالب محول

المطلوب اضافه صف او العدد الجديد من الصفوف تحت الصفوف الموجوده

ولايمسح  اي بيانات سابقه .. ادعو الله ان اكون وفقت في شرح المطلوب

رابط هذا التعليق
شارك

إذاً في الكود الموجود يتم مسح السطر المسئول عن المسح .. حيث يقوم بعملية النسخ بشكل طبيعي أي يتم حذف سطر المسح فقط (هذا حسب ما فهمت من كلامك) ، ويمكنك التجربة ومشاهدة النتائج .. وإذا لم تكن النتائج هي المطلوبة ضع صورة لشكل النتائج المتوقعة ليسهل فهم المطلوب ..

 

  • Like 1
رابط هذا التعليق
شارك

استاذ ياسر

حتى تزداد الرؤيه

وضعت عدد الطلاب 5 ونفذت الكود الاول نسخ 5 صفوف .. تمام

كتبت بعد ذلك عدد الطلاب المحولين 2 ونفذت الكود التاني بعد ازاله المسح

ماذا حدث .. ظلت اعداد الصفوف 5 ولم تزد ليه لانه تم النسخ من الصف الذي يلي العناوين

المفروض كان العدد يبقى 7

جزاك الله خيرا

 

رابط هذا التعليق
شارك

هلا أرفقت آخر نسخة من الملف والكود ومطبق فيه ما قمت بعمله .. وما هي الخلية المرتبطة بعدد صفوف النسخ لأني أنسى الموضوعات ، وربما لا أتذكر .. فذكرني بتفاصيل الملف مرة أخرى .. وما هي أوراق العمل المطلوب العمل عليها وما هي أوراق العمل المطلوب استثنائها ؟

رابط هذا التعليق
شارك

بعد اذنك اخي قصي

هذا هو الملف

به زر اصفر به الكود المعدل من طرفك اخي استاذ ياسر

ويعمل جيدا

الزر الاخر لايعمل

اكتب في Q1 الرقم 2 واضغط الزر المفروض يزيد صفين  لايحدث ذلك

 

نسخ صفوف بعد الصفوف الموجوده.rar

رابط هذا التعليق
شارك

جربوا الكود التالي عله يفي بالغرض 

Private Sub CommandButton1_Click()
    Dim ws      As Worksheet
    Dim sh      As Worksheet
    Dim lr      As Long
    Dim lc      As Long
    Dim c       As Long

    Set ws = Sheets("بيانات الطلبة")
    c = ws.Range("Q1").Value

    If TextBox1.Text = ws.Range("F1") Then
        Me.Hide: TextBox1.Text = ""
        MsgBox "كلمة المرور صحيحة و سيتم تنفيذ المطلوب", 64

        Application.ScreenUpdating = False
        Application.Calculation = xlManual
            If ws.Range("Q1") < 2 Then Exit Sub
    
            For Each sh In Sheets(Array("بيانات الطلبة", "إنجاز1", "تحريرى ف 1", "تحريرى ف 2", "أعمال السنة", "كشف ناجح", "الحاله", "كنترول شيت", "رصد الترم الثانى", "كنترول شيت (2)", "رصد الترم الأول", "كشف الدور الثاني"))
                lr = IIf(LastRowColumn(sh, "R") = 9, 9, LastRowColumn(sh, "R"))
                lc = LastRowColumn(sh, "C")
                sh.Range("A" & lr).Resize(1, lc).AutoFill Destination:=sh.Range("A" & lr).Resize(c + 1, lc)
            Next sh
            
            Application.Goto ws.Range("A1")
        Application.Calculation = xlAutomatic
        Application.ScreenUpdating = True
        
        Unload Me
    Else
        MsgBox "عفواً كلمة المرور خاطئه و لن يتم تنفيذ المطلوب", vbExclamation
        TextBox1.Text = ""
        TextBox1.SetFocus
    End If
End Sub

Function LastRowColumn(ws As Worksheet, rc As String) As Long
    Dim lng As Long

    If Application.WorksheetFunction.CountA(ws.Cells) <> 0 Then
        With ws
            If UCase(rc) = "R" Then
                lng = .Cells.Find(What:="*", After:=.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
            ElseIf UCase(rc) = "C" Then
                lng = .Cells.Find(What:="*", After:=.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
            End If
        End With
    Else
        lng = 1
    End If

    LastRowColumn = lng
End Function

 

  • Like 1
رابط هذا التعليق
شارك

استاذ ياسر

اشكرك وادعو الله ان يجزيك  خيرا

الحل متميز

=======

عندي سؤال

نحن ناخد الصف الذي يلي العنوان وننسخ زيه

هل يمكن ان يكون هذا الصف فوق مثلا الصف الاول دائما ونخفي هذا الصف

لماذا ؟ 

لان الكود الاخير لكم نجح نجاحا عظيما ولكنه ياتي ببيانات الطالب الاخير ويكررها ... فلو نسخنا صف بيانات مكانه مش في الجدول هايكون حل عظمه

والراي لكم في فكره حل

استاذ ياسر

اشكرك وادعو الله ان يجزيك  خيرا

الحل متميز

=======

عندي سؤال

نحن ناخد الصف الذي يلي العنوان وننسخ زيه

هل يمكن ان يكون هذا الصف فوق مثلا الصف الاول دائما ونخفي هذا الصف

لماذا ؟ 

لان الكود الاخير لكم نجح نجاحا عظيما ولكنه ياتي ببيانات الطالب الاخير ويكررها ... فلو نسخنا صف بيانات مكانه مش في الجدول هايكون حل عظمه

والراي لكم في فكره حل

استاذ ياسر

اشكرك وادعو الله ان يجزيك  خيرا

الحل متميز

=======

عندي سؤال

نحن ناخد الصف الذي يلي العنوان وننسخ زيه

هل يمكن ان يكون هذا الصف فوق مثلا الصف الاول دائما ونخفي هذا الصف

لماذا ؟ 

لان الكود الاخير لكم نجح نجاحا عظيما ولكنه ياتي ببيانات الطالب الاخير ويكررها ... فلو نسخنا صف بيانات مكانه مش في الجدول هايكون حل عظمه

والراي لكم في فكره حل

رابط هذا التعليق
شارك

جرب إضافة السطرين التاليين

                On Error Resume Next
                sh.Range("A" & lr + 1).Resize(c, lc).SpecialCells(xlCellTypeConstants).ClearContents

بعد هذا السطر في الكود

sh.Range("A" & lr).Resize(1, lc).AutoFill Destination:=sh.Range("A" & lr).Resize(c + 1, lc)

 

  • Like 2
رابط هذا التعليق
شارك

  • أفضل إجابة

روعه اضافه صف اوصفوف بعد بيانات الطلاب للاستاذ ياسر خليل

Private Sub CommandButton1_Click()
    Dim ws      As Worksheet
    Dim sh      As Worksheet
    Dim lr      As Long
    Dim lc      As Long
    Dim c       As Long

    Set ws = Sheets("بيانات الطلبة")
    c = ws.Range("Q1").Value

    If TextBox1.Text = ws.Range("F1") Then
        Me.Hide: TextBox1.Text = ""
        MsgBox "كلمة المرور صحيحة و سيتم تنفيذ المطلوب", 64

        Application.ScreenUpdating = False
        Application.Calculation = xlManual
            If ws.Range("Q1") < 1 Then Exit Sub
    
            For Each sh In Sheets(Array("بيانات الطلبة", "إنجاز1", "تحريرى ف 1", "تحريرى ف 2", "أعمال السنة", "كشف ناجح", "الحاله", "كنترول شيت", "رصد الترم الثانى", "كنترول شيت (2)", "رصد الترم الأول", "كشف الدور الثاني"))
                lr = IIf(LastRowColumn(sh, "R") = 9, 9, LastRowColumn(sh, "R"))
                lc = LastRowColumn(sh, "C")
  sh.Range("A" & lr).Resize(1, lc).AutoFill Destination:=sh.Range("A" & lr).Resize(c + 1, lc)
    On Error Resume Next
  sh.Range("A" & lr + 1).Resize(c, lc).SpecialCells(xlCellTypeConstants).ClearContents
            Next sh
            
            Application.Goto ws.Range("A1")
        Application.Calculation = xlAutomatic
        Application.ScreenUpdating = True
        
        Unload Me
    Else
        MsgBox "عفواً كلمة المرور خاطئه و لن يتم تنفيذ المطلوب", vbExclamation
        TextBox1.Text = ""
        TextBox1.SetFocus
    End If
End Sub

Function LastRowColumn(ws As Worksheet, rc As String) As Long
    Dim lng As Long

    If Application.WorksheetFunction.CountA(ws.Cells) <> 0 Then
        With ws
            If UCase(rc) = "R" Then
                lng = .Cells.Find(What:="*", After:=.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
            ElseIf UCase(rc) = "C" Then
                lng = .Cells.Find(What:="*", After:=.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
            End If
        End With
    Else
        lng = 1
    End If

    LastRowColumn = lng
End Function

Private Sub UserForm_Click()

End Sub

لو شويه شرح في الكود لان فيه جديد علينا

رابط هذا التعليق
شارك

أعتذر أخي الكريم عن عدم الشرح فليس لدي من الوقت ما يكفي لذلك ... ربما يتقدم أحد الأخوة ويقوم بالشرح

أو قم بدراسة الكود واسأل فقط عن سطر أو أكثر من الكود لأن الكود يحتاج فيما لا يقل عن ساعتين لشرحه بشكل كامل .. وهذا غير متوفر 

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information