Menolak Inputan Data yang sama di Tanggal dan hari yang sama

  1. 2 bulan yang lalu
    Di sunting 2 bulan yang lalu oleh wawan setiawan

    Salam Kenal semuanya,,,sebelumya saya anggota baru di forum ini terima kasih bang admin sudah konfirmasi akun saya untuk bergabung,,,lsg aja deh saya punya masalah pada aplikasi yang akan saya buat letak permasalahannya adalah bagaimana jika inputan di userform menolak otomatis apabila kita input data nama yang sama atau dobel pada pemberangkatan hari dan tanggal yang sama,,mohon pencerahannya suhu,,,,terima kasih,,,

  2. Caton

    Sep 11 Terverifikasi Indonesia + 12.503 Poin

    @wawan setiawan ... Salam Kenal semuanya ...

    Salam kenal juga mas @wawan setiawan ...

    @wawan setiawan ... bagaimana jika inputan di userform menolak otomatis apabila kita input data nama yang sama atau dobel pada pemberangkatan hari dan tanggal yang sama ...

    UserForm? Ini bicara formula atau macro (VBA)? Kalau formula, bisa saja menggunakan Custom Data Validation dengan menggunakan fungsi COUNTIFS. Contohnya terlampir (coba input data pada kolom yang berwarna kuning, pada kolom pertama dahulu, baru kolom kedua, atau sebaliknya).

    Kalau pake VBA, mungkin nanti saya contohkan, atau bisa juga menunggu rekan-rekan lainnya memberikan masukan (kalau memang musti pake macro atau VBA).

    Demikian, semoga sesuai ...

  3. maaf maksud saya rumus macro vba,,, master dengan data base seperti itu bagaimana rumus untuk menolak data nama yang sama pada tanggal yang sama,,,mohon pencerahannya master karna saya udah mentok master,trima kasih,,

  4. Caton

    Sep 12 Terverifikasi Indonesia + 12.503 Poin
    Di sunting 2 bulan yang lalu oleh Caton

    @wawan setiawan ... maaf maksud saya rumus macro vba ...

    Nah khan ... (^_^)/

    Seharusnya diskusinya ini dimasukkan ke dalam kategori VBA dan Macro Excel, bukan Fungsi dan Rumus. Terlampir contoh sederhananya, dengan fungsi COUNTIFS juga, hanya saja melalui script VBA. Kalau tidak sesuai, silahkan diskusikan kembali.

    Maaf, satu hal lagi, tolong hapus diskusi Menolak Data Nama yang sama pada tgl,bln dan tahun yang sama yang barusan dibuat. Khan masalah yang sama sudah didiskusikan di sini! Tidak perlu lagi membuat duplikat diskusi. Caranya seperti berikut:

    -image-

    Sedangkan untuk mengubah kategori diskusi, cukup klik nama kategori pada diskusi ini, lalu pilih kategori yang sesuai.

    Demikian.

  5. oh Maaf maklum baru masuk forum bang,,

  6. Caton

    Sep 13 Terverifikasi Indonesia + 12.503 Poin

    @wawan setiawan oh Maaf maklum baru masuk forum bang,,

    Tidak masalah bang @wawan setiawan ... Tujuan saya hanya untuk mengingatkan agar jangan terlalu banyak diskusi yang duplikat. Itu saja ... :)

  7. oya bang contoh vba nya mana terkait menolak data sama untuk saya pelajari lagi,,mksh

  8. Caton

    Sep 13 Terverifikasi Indonesia + 12.503 Poin

    @wawan setiawan ... contoh vba nya mana ...

    Buka VBE (VisualBasic Editor). Klik ganda pada modul objek Sheet2 (dbase):

    Untitled.jpg

    Demikian.

  9. mf masterku code tsb berjalan apabila input data di userform? mksh

  10. Caton

    Sep 14 Terverifikasi Indonesia + 12.503 Poin

    @wawan setiawan ... masterku code tsb berjalan apabila input data di userform ...

    Oia... Maaf. Saya belum sempat bikin contoh scriptnya. Mungkin mas @manweljs_ bisa kasih contohnya ... :)

  11. manweljs_

    Sep 15 Terverifikasi + 5.713 Poin
    Di sunting 2 bulan yang lalu oleh manweljs_

    ...Saya belum sempat bikin contoh scriptnya. Mungkin mas @manweljs_ bisa kasih contohnya ... :)

    mas @Caton dan @wawan setiawan

    contoh userformnya mana? logikannya kan jika ada data ganda maka akan ada pemberitahuan saat pengguna menginput data di userform tersebut atau saat menekan tombol simpan atau sejenisnya

  12. Caton

    Sep 15 Terverifikasi Indonesia + 12.503 Poin

    @manweljs_ ... contoh userformnya mana ...

    Nah, itu harus ditanyakan kepada TS-nya. Saya bikin contohnya di objek Worksheet karena TS gak kasih contoh UserForm yang sedang dikerjakan ... :D Menurut saya sih bisa saja langsung diuji ke tabel datanya. Cuma sekarang belum sempat kasih contoh ... Silahkan mas @manweljs_ lanjutkan jika punya ide.

  13. manweljs_

    Sep 15 Terverifikasi + 5.713 Poin
    Di sunting 2 bulan yang lalu oleh manweljs_

    @Caton ...Menurut saya sih bisa saja langsung diuji ke tabel datanya...

    saya setuju, namun kan lebih baik kalau diuji dari userformnya

    @wawan setiawan terlampir contoh pengujian langsung dari userform dengan metode yang sama menggunakan COUNTIFS

  14. oh iya maaf lampirannya blm terkirim ,,,tp terima kasih sarannya para master excel akan saya coba

  15. 9 minggu lalu
    Di sunting 9 minggu lalu oleh wawan setiawan

    Maaf Baru saya lampirkan filenya,,,,mohon pencerahannya para master ku,,,,

  16. Maaf baru saya lampirkan barusan diatas file nya master,,,,mohon pencerannya ya masterku,,,

  17. Oya 1 lagi pertanyaannya master,,,saat klik tombol simpan kenapa langsung beralih ke sheets lain egga tetap di sheets dtbase awalnya sih normal mungkin krn otak atik masalah menolak data sama akhirnya berubah,,,tolong berubah pada code yang mana ya,,,terima kasih

  18. Caton

    Sep 16 Terverifikasi Indonesia + 12.503 Poin

    @wawan setiawan ... mohon pencerannya ya masterku ...

    Untuk pertanyaan pertama, yakni cara mencegah duplikasi input data, ada beberapa cara yang dapat dilakukan, di antaranya:

    [1]. Dengan menyusun daftar kata kunci yang diambil dari nilai kolom M, kolom N, kolom O dan kolom T (pada file yang mas lampirkan). Buat dahulu daftar kata kunci pada saat UserForm diloading dan simpan ke sebuah Array Variable. Untuk proses pencarian data, dapat dilakukan dengan 2 cara, yakni:

    — dengan melakukan pengulangan (Looping) dari mulai indeks pertama array sampai indeks terakhir. Jika data ditemukan, atur nilai variabel validasi menjadi FALSE (atau nilai lainnya sesuai alur proses) dan keluar dari pengulangan. Contoh script:

    ...
    Dim lIdx As Long, sKey As String
    
    Data_Validation = True
    sKey = Trim$(cbx_daritgl) & Ucase$(Trim$(cbx_daribln)) & Trim$(cbx_darithn) & Trim$(cbx_nama1)
    For lIdx = 0 To UBound(m_xDataKey)
        If sKey = m_xDataKey(lIdx) Then
            MsgBox "Data untuk Nama Pelaksana Perjalanan Dinas pada tanggal yang sama sudah ada!", _
                vbInformation, "Data Duplikat"            
            Data_Validation = False
            Exit For
        End If
    Next
    ...

    — dengan menggunakan fungsi MATCH dari objek WorksheetFunction. Contoh script:

    ...
    Dim lIdx As Long
    
    On Error Resume Next
    
    Err.Clear
    sKey = Trim$(cbx_daritgl) & UCase$(Trim$(cbx_daribln)) & Trim$(cbx_darithn) & Trim$(cbx_nama1)
    lIdx = WorksheetFunction.Match(sKey, m_xDataKey, 0) * 1
    If Err.Number = 0 Then
        MsgBox "Nama Pelaksana Perjalanan Dinas pada tanggal yang sama sudah ada!", _
            vbInformation, "Data Duplikat"
    Else
        Err.Clear
        On Error GoTo 0
    End If
    Data_Validation = (lIdx = 0)
    ...

    [2]. Dengan menggunakan fungsi COUNTIFS dari objek WorksheetFunction. Contoh script:

    ...
    Dim lRow As Long, lCount As Long
    Dim xlRange As Range
    
    lRow = fn_LastRow(Sheets("dtbase")) + 1
    Set xlRange = Sheets("dtbase").Range("M2:M" & lRow)
    
    On Error Resume Next
    lCount = WorksheetFunction.CountIfs( _
        xlRange, Trim$(cbx_daritgl), _
        xlRange.Offset(ColumnOffset:=1), Trim$(cbx_daribln), _
        xlRange.Offset(ColumnOffset:=2), Trim$(cbx_darithn), _
        xlRange.Offset(ColumnOffset:=7), Trim$(cbx_nama1))
    
    If lCount Then
        MsgBox "Nama Pelaksana Perjalanan Dinas pada tanggal yang sama sudah ada!", _
            vbInformation, "Data Duplikat"
    End If
    
    Err.Clear
    On Error GoTo 0
    Data_Validation = (lCount = 0)
    ...

    Kedua contoh di atas (dengan fungsi MATCH dan COUNTIFS) ada pada file terlampir, masing-masing pada form frmSPDA dan form frmSPDB. Pilih salah satu cara yang disukai lalu terapkan pada form frmSPD — saran saya, gunakan cara kedua (dengan fungsi COUNTIFS) karena terkait dengan penjelasan selanjutnya di bawah.

    Demikian untuk pertanyaan pertama.

  19. Caton

    Sep 16 Terverifikasi Indonesia + 12.503 Poin

    Sedangkan untuk pertanyaan yang disertakan dalam file terlampir:

    @wawan setiawan ... code seperti apa apabila kita input nama cbx_nama1, cbx_nama2, cbx_nama3, cbx_nama4 (ada di form page pengikut 1,2 3) dan hasil inputan dari userform di kolom 19, 28, 37, 46 yang berwarna merah dan jika kita input tgl (label dari tanggal) hasil dari userform di kolom 12, 13, 14 yang berwarna kuning apabila ada kesamaan inputan lsg menolak dan ada dikasih warning ...

    Saya pahami pertanyaan mas @wawan setiawan dengan logika sebagai berikut:

    Jika NAMA PELAKSANA pada tanggal yang dimasukkan sudah ada pada dataset, maka tampilkan peringatan. Jika belum ada pada dataset maka periksa apakah ada NAMA-NAMA PENGIKUT pada jadwal yang sama dengan tanggal yang dimasukkan. Jika ada, maka tampilkan peingatan. Jika tidak ada maka lanjutkan proses simpan.

    Untuk logika di atas, maka script validasi yang menggunakan fungsi COUNTIFS di atas dapat dikembangkan menjadi:

    ...
    '+-- Validasi data duplikat!
    Dim lIdx As Long, lRow As Long, lCount As Long
    Dim sName As String, sColAddr As String, sNameCells() As String
    Dim xlRange As Range, xlRange2 As Range
    
    '+-- Periksa: Apakah pada tanggal yang diinput sudah
    '+-- ada Nama Pelaksana yang sama.
    lRow = fn_LastRow(Sheets("dtbase")) + 1
    Set xlRange = Sheets("dtbase").Range("M2:M" & lRow)
    
    On Error Resume Next
    lCount = WorksheetFunction.CountIfs( _
        xlRange, Trim$(cbx_daritgl), _
        xlRange.Offset(ColumnOffset:=1), Trim$(cbx_daribln), _
        xlRange.Offset(ColumnOffset:=2), Trim$(cbx_darithn), _
        xlRange.Offset(ColumnOffset:=7), Trim$(cbx_nama1))
    
    If lCount Then
        MsgBox "Nama Pelaksana Perjalanan Dinas pada tanggal yang sama sudah ada!", _
            vbInformation, "Data Duplikat"
    Else
        '+-- Periksa: apakah nama-nama pengikut apakah sudah
        '+-- memiliki jadwal pada tanggal yang sama.
        sNameCells = Split("AC|AL|AU", "|")
        For lIdx = 2 To 4
            sName = Me.Controls("cbx_nama" & lIdx).Text
            If Len(sName) Then
                lCount = 0
                sColAddr = sNameCells(lIdx - 2)
                Set xlRange2 = Sheets("dtbase").Range(sColAddr & "2:" & sColAddr & lRow)
                lCount = WorksheetFunction.CountIfs( _
                    xlRange, Trim$(cbx_daritgl), _
                    xlRange.Offset(ColumnOffset:=1), Trim$(cbx_daribln), _
                    xlRange.Offset(ColumnOffset:=2), Trim$(cbx_darithn), _
                    xlRange2, sName)
                If lCount Then
                    MsgBox "Nama pengikut perjalanan pada tanggal yang sama sudah ada!", _
                        vbInformation, "Data Duplikat"
                    Me.Controls("cbx_nama" & lIdx).SetFocus
                    Exit For
                End If
            End If
        Next
    End If
    
    Err.Clear
    On Error GoTo 0
    Data_Validation = (lCount = 0)
    ...

    Contoh script di atas ada pada lampiran penjelasan saya sebelumnya di atas, yakni pada modul form frmSPDB.

    @wawan setiawan ... saat klik tombol simpan kenapa langsung beralih ke sheets lain egga tetap di sheets dtbase ...

    Pada bagian terakhir dari prosedur Sub cmdAdd_Click, tambahkan saja salah satu dari script berikut:

    Sub cmdAdd_Click()
    ...
        Sheets("dtbase").Activate
    End Sub

    atau

    Sub cmdAdd_Click()
    ...
        Sheet2.Activate
    End Sub

    Demikian, semoga bermanfaat.

  20. terima kasih master akan saya coba ,,, semoga master caton ditambah rezekinya,,,amin

 

atau Mendaftar untuk ikut berdiskusi!