Sistem Absensi Dan Laporan Penggajian

Wednesday 1 March 2017

Sistem Absensi dan Laporan Penggajian

Pada Tutorial saya kali ini adalah membuat Sistem Absensi dan Laporan Penggajian dengan Macro Microsoft Excell. Tutorial ini bisa dikembangkan lagi dan digunakan di tempat kerja yang tidak mempunyai Software applikasi pengolahan Data. Rancangan sistem yang saya buat ini terdiri dari 4 Sesion :

Sesion # 1. Membuat Form Input Data Karyawan
Sesion # 2. Membuat Form Input Absensi Karyawan
Sesion # 3. Membuat Form Input Data Slip Gaji Karyawan
Sesion # 4. Membuat Template Laporan Absensi dan Laporan Penggajian

Sesion # 1. Membuat Form Input Data Karyawan


Form ini dirancang pada Sheet "Template" untuk menginput data karyawan dengan Proses Perintah Simpan, Cari, Edit dan Hapus data ke Sheet ("DataKaryawan") dan Sheet ("Status")




Berikut ini Tampilan Rancangan Form nya :


Pada Range ("AN7") Input Data "Agama" - DataValidation nya :
"ISLAM,KRISTEN,BUDHA,HINDU,KHATOLIK" tanpa tanda kutip


Pada Range ("AO7") Input Data "Jenis Kelamin" - DataValidation nya :
"PRIA,WANITA" tanpa tanda kutip

Pada Range ("AP7") Input Data "Status" - DataValidation nya :
"LAJANG,MENIKAH,DUDA,JANDA" tanpa tanda kutip

Pada Range ("AN9") Input Data "Jabatan" - DataValidation nya :
"OPERATOR,STAF,LEADER,SUPERVISOR,MANAGER"tanpa tanda kutip

Pada Range ("AO9") Input Data "Departemen" - DataValidation nya :
"PERSONALIA,PRODUKSI,GUDANG,AKUNTING,TEKNISI" tanpa tanda kuitp

Pada Sheet "Template" Buatlah Tabel bantu untuk proses penyimpana data, Terserah Anda  dimulai dari Range berapa, tetapi harus disebelah rancangan Form Input Data Karyawan, saya membuat nya pada Range ("AY4:BM4) untuk tabel bantu simpan data ke Sheet ("DataKaryawan") dan Range ( "AY7:BA7") untuk tabel bantu simpan data ke Sheet ("Status").


Buatlah Dynamic Name Manager dari tabel bantu tadi:
data_kwyn =OFFSET(Template!$AY$5,,,COUNTA(Customer!$AY$5:$AY$5),15)
status_karyawan =OFFSET(Template!$AY$8,,,COUNTA(Customer!$AY$8:$AY$8),3)

Berikut ini adalah Koding Module untuk Penomoran NIK secara Otomatis dan Clear Data :

Sub Clear_Data()
Dim Bersih As Range
Set Bersih = Worksheets("Template").Range("AM5:AP5,AM7:AQ7,AM9:AP9,AM11:AP11")
Bersih.Value = ""
If Worksheets("DataKaryawan").Range("A3").Value = "" Then
Worksheets("Template").Range("AM5").Value = Format(Date, "YYMMDD") & "/001"
Else
Worksheets("Template").Range("AM5").Value = Format(Date, "YYMMDD") & "/00" & Right(Worksheets("DataKaryawan").Cells(Rows.Count, 1).End(xlUp).Value, 2) + 1
End If 
End Sub

Berikut ini adalah Koding Module untuk Proses Perintah Simpan :

Sub Simpan_DtKaryawan()
On Error Resume Next
Dim KwnData As Range
Dim KwnStatus As Range
Dim KwnSrcdata As Range
Dim KwnSrcstatus As Range
Set KwnData = Worksheets("DataKaryawan").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Set KwnStatus = Worksheets("Status").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Application.ScreenUpdating = False
If Worksheets("Template").Range("AM5") = "" Then
MsgBox "Nik Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AN5") = "" Then
MsgBox "Nama Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AO5") = "" Then
MsgBox "Tgl.Mulai Kerja Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AP5") = "" Then
MsgBox "Alamat Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AM7") = "" Then
MsgBox "Tgl.Lahir Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AN7") = "" Then
MsgBox "Agama Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AO7") = "" Then
MsgBox "Jenis Kelamin Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AP7") = "" Then
MsgBox "Status Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AQ7") = "" Then
MsgBox "Jumlah Anak Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AM9") = "" Then
MsgBox "No.Kontak Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AN9") = "" Then
MsgBox "Jabatan Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AO9") = "" Then
MsgBox "Departemen Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AP9") = "" Then
MsgBox "Gaji Pokok Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AM11") = "" Then
MsgBox "TJ.Jabatan Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AN11") = "" Then
MsgBox "TJ.Anak Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AO11") = "" Then
MsgBox "TJ.Makan Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
ElseIf Worksheets("Template").Range("AP11") = "" Then
MsgBox "TJ.Transportasi Karyawan Masih Kosong", 64, "Data Karyawan"
Exit Sub
Else
Select Case MsgBox _
("Apakah Data Karyawan Sudah Benar ." _
& vbCrLf & "Cek Semua Sebelum di Proses", _
vbYesNo Or vbExclamation, "Apakah Anda Sudah Yakin?")
Case vbYes
Case vbNo
Exit Sub
End Select
Set KwnSrcdata = Worksheets("Template").Range("data_kwyn")
KwnSrcdata.Copy
KwnData.PasteSpecial xlPasteValues
Set KwnSrcstatus = Worksheets("Template").Range("status_karyawan")
KwnSrcstatus.Copy
KwnStatus.PasteSpecial xlPasteValues
Worksheets("Template").Select
Application.CutCopyMode = False
MsgBox "Data Karyawan Sudah di Simpan Pada Sheets DataKaryawan" _
& vbCrLf & "dan Status Karyawan Sudah di Simpan Pada Sheets Status: " & Worksheets("Template").Range("AM5"), 48, "Komfirmasi"
End If
Clear_Data
End Sub


Berikut ini adalah Koding Module untuk Cari Data :


Sub Cari_DtKaryawan()
On Error Resume Next
If Worksheets("Template").Range("AM5") = "" Then
MsgBox "Nik Karyawan Masih Kosong"
Exit Sub
End If
nik = Worksheets("Template").Range("AM5")
Set C = Worksheets("DataKaryawan").Range("A:A").Find(nik, LookIn:=xlValues)
Set D = Worksheets("Status").Range("A:A").Find(nik, LookIn:=xlValues)
If Not C And Not D Is Nothing Then
Baris1 = C.row
Baris2 = D.row
Worksheets("Template").Range("AN5").Value = Worksheets("DataKaryawan").Cells(Baris1, 2).Value
Worksheets("Template").Range("AO5").Value = Worksheets("DataKaryawan").Cells(Baris1, 3).Value
Worksheets("Template").Range("AP5").Value = Worksheets("DataKaryawan").Cells(Baris1, 4).Value
Worksheets("Template").Range("AM7").Value = Worksheets("DataKaryawan").Cells(Baris1, 5).Value
Worksheets("Template").Range("AN7").Value = Worksheets("DataKaryawan").Cells(Baris1, 6).Value
Worksheets("Template").Range("AO7").Value = Worksheets("DataKaryawan").Cells(Baris1, 7).Value
Worksheets("Template").Range("AM9").Value = Worksheets("DataKaryawan").Cells(Baris1, 8).Value
Worksheets("Template").Range("AN9").Value = Worksheets("DataKaryawan").Cells(Baris1, 9).Value
Worksheets("Template").Range("AO9").Value = Worksheets("DataKaryawan").Cells(Baris1, 10).Value
Worksheets("Template").Range("AP9").Value = Worksheets("DataKaryawan").Cells(Baris1, 11).Value
Worksheets("Template").Range("AM11").Value = Worksheets("DataKaryawan").Cells(Baris1, 12).Value
Worksheets("Template").Range("AN11").Value = Worksheets("DataKaryawan").Cells(Baris1, 13).Value
Worksheets("Template").Range("AO11").Value = Worksheets("DataKaryawan").Cells(Baris1, 14).Value
Worksheets("Template").Range("AP11").Value = Worksheets("DataKaryawan").Cells(Baris1, 15).Value
Worksheets("Template").Range("AP7").Value = Worksheets("Status").Cells(Baris2, 2).Value
Worksheets("Template").Range("AQ7").Value = Worksheets("Status").Cells(Baris2, 3).Value
Else
MsgBox "Nik Karyawan belum terdaftar" & vbCrLf & "Cek Kembali Nik Karyawan", 64, "Data Karyawan"
End If
End Sub


Berikut ini adalah Koding Module untuk Edit Data :


Sub Edit_DtKaryawan()
On Error Resume Next
    Dim C As Range
    Dim Baris As Long
With Worksheets("Template")
    If .Range("AN5").Value = "" And .Range("AO5").Value = "" And .Range("AP5").Value = "" Then
    MsgBox "Data Tidak Lengkap Untuk Di Edit...", 64, "Data Karyawan"
    Exit Sub
    End If
End With
    nik = Worksheets("Template").Range("AM5")
    If MsgBox(" Apakah Anda Yakin Edit Data : " & nik, vbYesNo + 48, "Komfirmasi") = vbYes Then
    Set C = Worksheets("DataKaryawan").Range("A:A").Find(nik, LookIn:=xlValues)
    Set D = Worksheets("Status").Range("A:A").Find(nik, LookIn:=xlValues)
    If Not C And Not D Is Nothing Then
    Baris1 = C.row
    Baris2 = D.row
     With Worksheets("DataKaryawan")
    .Cells(Baris1, 2).Value = Worksheets("Template").Range("AN5").Value
    .Cells(Baris1, 3).Value = Worksheets("Template").Range("AO5").Value
    .Cells(Baris1, 4).Value = Worksheets("Template").Range("AP5").Value
    .Cells(Baris1, 5).Value = Worksheets("Template").Range("AM7").Value
    .Cells(Baris1, 6).Value = Worksheets("Template").Range("AN7").Value
    .Cells(Baris1, 7).Value = Worksheets("Template").Range("AO7").Value
    .Cells(Baris1, 8).Value = Worksheets("Template").Range("AM9").Value
    .Cells(Baris1, 9).Value = Worksheets("Template").Range("AN9").Value
    .Cells(Baris1, 10).Value = Worksheets("Template").Range("AO9").Value
    .Cells(Baris1, 11).Value = Worksheets("Template").Range("AP9").Value
    .Cells(Baris1, 12).Value = Worksheets("Template").Range("AM11").Value
    .Cells(Baris1, 13).Value = Worksheets("Template").Range("AN11").Value
    .Cells(Baris1, 14).Value = Worksheets("Template").Range("AO11").Value
    .Cells(Baris1, 15).Value = Worksheets("Template").Range("AP11").Value
    End With
    With Worksheets("Status")
    .Cells(Baris2, 2).Value = Worksheets("Template").Range("AP7").Value
    .Cells(Baris2, 3).Value = Worksheets("Template").Range("AQ7").Value
    End With
    End If
    MsgBox "Data Telah DiRubah...", 64, "Data Karyawan"
    Else
    MsgBox "Data Batal di Edit", 64, "Data Karyawan"
    End If
Clear_Data
End Sub


Berikut ini adalah Koding Module untuk Hapus Data :


Sub Hapus_DtKaryawan()
On Error Resume Next
Application.ScreenUpdating = False
With Worksheets("Template")
    If .Range("AN5").Value = "" And .Range("AO5").Value = "" And .Range("AP5").Value = "" Then
    MsgBox "Data Tidak Lengkap Untuk Di Hapus...", 64, "Data Karyawan"
    Exit Sub
    End If
End With
If Worksheets("Template").Range("AM5") = "" Then
MsgBox "Tidak Ada Data Yg Akan Di Hapus"
Exit Sub
End If
nik = Worksheets("Template").Range("AM5")
Set C = Worksheets("DataKaryawan").Range("A:A").Find(nik, LookIn:=xlValues)
Set D = Worksheets("Status").Range("A:A").Find(nik, LookIn:=xlValues)
If Not C And Not D Is Nothing Then
Baris1 = C.row
Baris2 = D.row
cDelete = MsgBox("Apakah Anda Yakin Untuk Menghapus Data Karyawan: " & nik, vbYesNo + 48, "Komfirmasi")
    If cDelete = vbYes Then
    Worksheets("DataKaryawan").Cells(Baris1, 2).EntireRow.Delete
    Worksheets("Status").Cells(Baris2, 2).EntireRow.Delete
    MsgBox "Data Telah Di Hapus...", 64, "Data Karyawan"
    Else
    MsgBox "Data Batal di Hapus", 64, "Data Karyawan"
    End If
Else
MsgBox "Nik Karyawan belum Terdaftar Untuk Di Hapus" & vbCrLf & "Cek Kembali Nik Karyawan", 64, "Data Karyawan"
End If
Clear_Data
End Sub

Cara menghubungkan Koding Module ke tiap - tiap Tombol Perintah yang  dibuat :
Klik Kanan tombol perintah >> Assign_macro >> lalu pilih sub Koding Module sesuai dengan keterangan tombol perintah.



Demikian penjelasan untuk Sesion # 1 Pembuatan Form Input Data Karyawan, silahkan lanjutkan mempelajari tutorial ini pada Sesion # 2 Membuat Form Input Data Absensi.

Salam...,