• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

izin takibi

ckarabacak

Altın Üye
Katılım
12 Ocak 2010
Mesajlar
369
Excel Vers. ve Dili
Excel 2010
Merhaba Arkadaşlar İyi Bayramlar Dilerim.

Ekte göndermiş olduğum dosyada "I" sütunundaki tarih değişikliğinde ve de "K" ve "M" sütununda sayı değişiminde hesaplama esnasında kasılma oluyor.

Makro yazılım hesaplatmalarında kasılma ve bekleme yapması yazılımda bir hata veya yazılıma başka fonksiyonmu ilave edilmesi gerekiyor bilemedim.

Yardımlarınızı rica ederim.
 

Ekli dosyalar

Son düzenleme:
Dosyanızda, belirttiğiniz sütunlarda değişiklik olduğunda çalışan bir makro var, bu makro her çalıştığında dolu satırların hepsini kontrol eden bir döngü içeriyor. Şu anda 1030 satır var, doğal olarak her değişiklikte 1030 satırın kontrol edilmesi uzun sürüyor.

Dosyanızı sayfada değişiklik olduğunda değil de siz istediğinizde manuel olarak çalışacak şekilde ayarlarsanız sadece makroyu çalıştırdığınızda biraz beklersiniz.

Bunun için sayfadaki change olayına bağlı kodları iptal edin, sayfaya bir düğme ekleyip hakediş tarih belirleme makrosunu bu düğmeye çalıştırın.
 
Merhaba yusuf44

sayfadaki otomatik hesaplama koduna isim bazında seçeneği eklenmesi halinde yalnızca o isme ait alanda hesaplama yapılmasını sağlayabilirmiyiz.

Bütün sayfayı taratmamış oluruz diye aklımdan geçti.

Yardımcı olursanız sevinirim
 
Bunu için "o isme ait alanı" bilmemiz ve excel'e öğretmemiz gerekir. "o isme ait alan" nasıl belirlenir?
 
Merhaba.

Belgeyi ve mevcut kodun yaptığı işlemi pek anlamadım ama, gördüğüm kadarıyla isimler sıralı.

İsimler sıralı olduğuna göre; mevcut kodu aşağıdakiyle değiştirerek kod'un çalışma alanı buna göre daraltılabilir sanırım.
.
Kod:
[B]Sub hakediş_tarihibelirleme()[/B]
[B][COLOR="Blue"]ilk[/COLOR][/B] = WorksheetFunction.Match(Cells(ActiveCell.Row, "F"), Range("F:F"), 0)
[B][COLOR="blue"]son[/COLOR][/B] = ilk + WorksheetFunction.CountIf(Range("F:F"), Cells(ActiveCell.Row, "F")) - 1

With Sheets("İZİN TAKİP LİSTESİ")
    For i = [B][COLOR="Blue"]ilk[/COLOR][/B] To [B][COLOR="blue"]son[/COLOR][/B]
[COLOR="Red"]        If WorksheetFunction.CountIf(.Range("F1:F" & i), .Cells(i, "F")) = 1 Then
        mv = 0
    Else[/COLOR]
        ay = DateSerial(Year(.Cells(i, "I")) + .Cells(i, "M"), Month(.Cells(i, "I")), Day(.Cells(i, "I")))
        mv = mv + .Cells(i, "K")
        .Cells(i, "L") = mv + ay
[COLOR="red"]    End If[/COLOR]
Next
End With
[B]End Sub[/B]
 
Baran bey merhaba

sorunu kısmen çözdünüz

daha önceki hakediş makro yazılımı ve hesaplama kodu ile çalışırken dosyada oluşan kasılma ((tarih ve sayı değişimlerinde hesaplama yaparken bekleme)) sizin göndermiş olduğunuz hakediş makrosu ile ortadan kalktı.

Ancak; dosyada da işaretlediğim alanlarda kişilerin ilk ve son satırlarında sayı değişikliği yapıldığında değişim gerçekleşmiyor. Sadece ara satırlarda oluyor.

“m” sütununda ki sayı değişimi “l” sütununda sadece tarih (yıl) değişimi yapması,

“k” sütununda ki sayı değişimi ise yine “l” sütununda tarih (yıl,ay.gün) değişimi yapması gerekiyor. (tabi sayı 365 ve üstünde ise “ yıl”, yoksa sadece “ay, gün” değişecek)

ilginiz ve yardımlarınız için teşekkür ederim.
 

Ekli dosyalar

İşlemi hala anlamış değilim ancak;
önceki cevabımda verdiğim kod'da kırmızı renklendirdiğim satırları ,
-- silerek veya
-- sol başlarına TEK TIRNAK işareti koyarak
dener misiniz?
.
 
izin takip

Baran bey merhaba

Belirttiğiniz tek tırnak işaretini (‘) gerekli yere yazdım olmadı ve de satırı sildim gene olmadı.

Sonuca gidebilmeniz açısından
Tablo ile ilgili açıklamalar ise şöyle;

“m” sütununda ki sayı değişimi “l” sütununda aynı kişiye ait sadece tarih (yıl) değişimi yapması gerekiyor; Sebebi ise izinlerin bölünerek kullanılması halinde hakedişin hangi yıla ait olduğunu belirlememek için

Örnek: Eğer kişi herhangi bir yıla ait iznini ilk 10 gün ve daha sonraki tarihte 6 gün kullanır ise “m” sütunundaki her aynı sayı o yıla ait bölünmüş olan iznin sadece “yılı”nı belirliyor.

“k” sütununda ki sayı değişimi ise yine “l” sütununda aynı kişiye ait tarih (yıl,ay.gün) değişimi yapması gerekiyor. (tabi sayı 365 ve üstünde ise “ yıl, ay, gün”, yoksa sadece “ay, gün” değişecek) Burada ise; kişi izin hakkediş süresine kadarki aralıkta ücretsiz izin kulanmış olması halinde, izin süresi kadar, izin hakediş tarihini belirlemek

Örnek : kişi herhangi bir yıl içinde kullandığı ücretsiz izin süresi 5 gün ise, ve de kişi iznini 1.1.17 de hakediyorsa 5 günlük ücretsiz izin nedeniyle 6.1.17 de hakediş tarihi oluşması gerektiğinden

Siz Zaten büyük bölümünü hallettiniz zaten (dosyadaki tarih ve sayı değişimi sırasındaki kasılma yok artık)
Sadece kişilerin ilk satırı ve son satırında “m” sütununa ve “k” sütununa verilen sayılar hakkediş tarihinde değişim sağlamıyor. Ara satırlarda sorun yok.
“”Dikkatimi çeken kişilere ait ilk ve son satırlarda sayı varsa ara satırlarda sayı ilavesi ve silinmesi ilk ve son satırları aktif hale getiriyor.””

İlginiz ve yardımlarınız için teşekkür ederim.
 

Ekli dosyalar

Sayın Suskun Merhaba

Sizin dosyayı daha önce inceledim. Oldukça profesyonel bir yazılım ve çok güzel bir çalışma olmuş

Ancak benim dosyadaki veriler izin takibi ve yıllık izin defterine kayıt için şimdilik yeterli oluyor bana Sizden ricam daha önce göndermiş olduğum dosya ve ifade etmeye çalıştığım açıklamalardaki verileri alabilmem için modül2 üzerinde düzenleme yaparsanız çok sevinirim .

İlginize çok teşekkür ederim.
 
Tekrar merhaba.

Gerçekten yapılan işlemi anlamış değilim.
Ancak bir de; belgede mevcut Worksheet_Change kodu'nu aşağıdakiyle değiştirerek dener misiniz?
.
Kod:
[B]Private Sub [COLOR="blue"]Worksheet_Change[/COLOR](ByVal Target As Range)[/B]
On Error Resume Next
sonsat = Cells(Rows.Count, "B").End(3).Row
alan = "I3:I" & sonsat & ",K3:K" & sonsat & ",M3:M" & sonsat
If Intersect(Target, Range(alan)) Is Nothing Then Exit Sub
    ilk = WorksheetFunction.Match(Cells(Target.Row, "F"), Range("F:F"), 0)
    son = ilk + WorksheetFunction.CountIf(Range("F:F"), Cells(Target.Row, "F")) - 1
With Sheets("İZİN TAKİP LİSTESİ")
    For i = ilk To son
        a = .Cells(i, "M")
        If WorksheetFunction.CountIf(.Range("F1:F" & i), .Cells(i, "F")) = 1 Then
            mv = 0
                End If
                    If WorksheetFunction.CountIf(.Range("F1:F" & i), .Cells(i, "F")) >= 1 Then
                    ay = DateSerial(Year(.Cells(i, "I")) + a, Month(.Cells(i, "I")), Day(.Cells(i, "I")))
                mv = mv + .Cells(i, "K")
            .Cells(i, "L") = mv + ay
        End If
    Next
End With
[B]End Sub[/B]
 
Sayın BARAN Merhaba

Tam düşündüğüm gibi oldu

Yaptığımız çalışmanın sonucu ve yansıması “YILLIK İZİN DEFTERİ” sayfasında görüldüğü gibi

Dosyanın bütünü ekte sunulmuştur.

Çok teşekkür ederim.
 

Ekli dosyalar

Geri
Üst