sekiz kişiden sonrasında uyarı

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,268
Excel Vers. ve Dili
office 2003 tr + office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2024
Değerli arkadaşlar

Bir ders programı üzerinde uğraşıyorum , herşeyi bitti gibi ama son anda
bir günde bir Eğitmene 8 den fazla ders verilemeyeceği bana söylendi. Üstelik her gün için bir eğitmenin sınır ders sayısı değişken de olabiliyor.

Ekte haftalık bir ders programı üzerinde sınır sayı üstte , altta da dersler ve isimler yerleştirdim.

Her sütün için özgün çalışması sureti ile aynı isim bir sütunda sınır sayı + 1 yazılıp entera basınca nasıl bir makro gerekebilir ki ; bir msgbox ile " çok fazla ders" uyarısı verip 9cu kez yazılan ismi o hücreden silerek engelleyebilsin ve başka isim bulmaya itsin....
 

N.Ziya Hiçdurmaz

Özel Üye
Katılım
28 Nisan 2007
Mesajlar
2,214
Excel Vers. ve Dili
Office 2013 TR / 32 Bit
Yanıt

H sütunu için bir örnek yaptım inceleyiniz.
Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, [H6:H31]) Is Nothing Then Exit Sub
For I = 0 To 3
ISIM = Array("ahmet", "mehmet", "ali", "veli")
UYAR = WorksheetFunction.CountIf([H6:H31], ISIM(I))
If Target = ISIM(I) And UYAR > 8 Then
MsgBox "Aynı isimden 8 den fazla seçemezsiniz."
End If
Next
End Sub
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,268
Excel Vers. ve Dili
office 2003 tr + office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2024
Sayın Visual Basic For Applications,
Cevabınız ve gösterdiğiniz yol için çok teşekkür ederim. Sanki birşeyler eksik gibi. Kodlarınızı geri gönderdiğiniz örnek sayfada , ayrıca kendi çalışmamda da denedim , birkaç ilginç şey:
1-8 isme kadar tamam, normal olarak izin veriyor ama 9 ve 10 a da izin veriyor.
geri dönüp isme tıklayınca uyarı veriyor. Yani yazarken 9cuda farkına vardırıp
isim doldurmayı engellemiyor.
2-İsimleri silmeye başlayınca 9 8 7 6 silinse de 5e tıklayınca hala uyarı veriyor.
3-Kod sayfasında adımlamak için F8 yaptım , adımlamadı , dene tuşuna bastım
o da cevap vermedi ( her iki excel sayfasında da).

Bir sütunda 9cu'da durdurmadığı sürece tüm sütunlar doldurulacak ve
birdenbire (tam kaynağı kestirilemeyen) ve susmayan uyarılar başlayacak ve
ders tablosunu hazırlayan , neyin yanlış olduğunu bulamayacağından tüm
tablosunu silmek zorunda kalacak gibi.

Sizce nasıl bir sütunda 9cu aynı isim gelince kesin uyarı yükselttirebilir ve
yazımı (değişik isme zorlamak için ) engelleyebiliriz?
 

N.Ziya Hiçdurmaz

Özel Üye
Katılım
28 Nisan 2007
Mesajlar
2,214
Excel Vers. ve Dili
Office 2013 TR / 32 Bit
Yanıt

Kodu bununla değiştirip deneyiniz.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo hata
If Intersect(Target, [H6:H31]) Is Nothing Then Exit Sub
For I = 0 To 3
ISIM = Array("ahmet", "mehmet", "ali", "veli")
UYAR = WorksheetFunction.CountIf([H6:H31], ISIM(I))
If Target = ISIM(I) And UYAR > 8 Then
Target.Offset(0, 0) = ""
MsgBox "Aynı isimden 8 den fazla giremezsiniz."
End If
Next
hata:
End Sub
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,268
Excel Vers. ve Dili
office 2003 tr + office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2024
Sayın Visual Basic For Applications;
Bu sefer 1 sütun için sonuç harika , 9cu kez aynı isim seçildiğinde uyarı geliyor ve hücreyi silerek durduruyor.
Çok sevinerek bu sonucu diğer sütunlara da uygulamaya çalıştım yani ptesi salı çarşamba perşembe cuma ctesi ve pazar için.
Ne yaptımsa sonuçta fiyasko oldu , ne yaptımsa ikinci sütunda aynı sonucu alamadım, dolayısı ile sonrakilerde de alamayacağımı düşünmeye başlayınca size bir zahmet ricası daha yapmak istedim.
Bu bir haftalık ders programı ve her hafta sonunda diger hafta icin hazırlanıp Ankara'ya hatasız olarak bildirilmesi gerekiyor,tabi ki eğitmenlere de buna göre ders saati veriliyor.Bu sayfayı yaratabilmek için , uğraşan kişi kan ter içinde 4 saat klasik yöntemle mücadele ediyor ve sonuçta yine de hata yapıp düzeltme göndermek zorunda kalıyor.

Ne yaptımsa ambigious ( çifte isimlendirmeler) dan kurtulamadım, ilk kodu end sub ile bitirip digerine başlattım , olmadı...Birşeyleri ya anlamıyorum ya kaçırıyorum.

Ben verdiğiniz harika kodları ilk sütun/Ptesi ileyaptım ;çalıştı.... Sonraki ve her sütunu kendi içinde ve diğerlerinden bağımsız olarak yine 9cu aynı isimde durdurmayı nasıl başarabiliriz?
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,268
Excel Vers. ve Dili
office 2003 tr + office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2024
Sabah oldu yine bir sürü yol denedim olmadı..Herhalde göremediğim bir şey var bu kadar yoğunluktan sonra
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,268
Excel Vers. ve Dili
office 2003 tr + office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2024
Sayın Visual Basic For Applications,
Sevgili arkadaşlar,
Israrcı gibi görünmek de istemiyorum ama denediğim tüm yollar sonuç vermedi.
Sayın Visual Basic For Applications'un ikinci olarak verdiği kod dizisi (ki bunun için kendisine teşekkür ederim), dersprogramında 1 sütun için mükemmel çalıştı ancak 2 ,3 ve sonrasındakilerde çalıştıramadım.
Bir fikri olan destek olabilir mi ?
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,056
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki kodu deneyin. Değerlendirmeyi 2.satırdaki kriterlere göre yapmaktadır.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [b6:h65536]) Is Nothing Then Exit Sub
sut = Target.Column
If WorksheetFunction.CountIf(Columns(sut), Target) > Cells(2, sut) Then
MsgBox Target & " için limit dolmuştur", 48, "Uyarı !"
Target.Select
Target = ""
End If
End Sub
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,268
Excel Vers. ve Dili
office 2003 tr + office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2024
Sayın leventm;
Bütün sütunlarda ( asıl çalışmam ve örnek üzerinde) denedim , her ikisinde de mükemmel sonuç verdi . İkinci satırda olan limite bağlanarak çalışması ve bütün sütunlarda limiti bulunca engellemesi bir harika oldu.

Size sorunu çözmemdeki desteğiniz için çok teşekkür ederim , Sayın V.Basic for Applications'a da ayrıca teşekkür ederim

Bir şeyi farkettim , o da limit sayısına ders adı da giriyor ve 5 limitli bir hoca gibi ders adı da 5 kere aynı görünce limit dolmuştur diyor..Ama şu anda bu bir giderilmesi gereken problem değil.

Giderilmesi gereken son problem , "o saatte müsait olmayan" bir hocayı derse atamak tabloyu hazırlayan arkadaşımızın başını çok ağrıtması. Öyle hatalar oluyor ki o gün ve o saatte kent'te bulunmayan bir hocayı derse atamak bile olabiliyor. Bunu engellemenin yine benzer bir ders programı tablosunda mümkün olabileceğini düşündüm ve bir örneği ayrı bir başlık olarak

http://www.excel.web.tr/showthread.php?t=39889

açtım. Özetle , tabloda listboxtan ders seçilince altına o dersin kendi hocalarını getiren ikinci listbox açılıyor ki burada limitlediğimiz buydu.Seçilen hocanın da altına MÜSAİT yada MÜSAİT değil getirebilmek harika bir çözüm olacak. Bu linkteki örnekte hocaların haftalık müsait/müsait değil kartları da olduğunu göreceksiniz.
Saatler süren ve hata ile sonlanan elde ders programının bu şekilde kesin ve dogru denetim kazanabilmesi için fikirlerinizi yine almayı çok isterim.

Derin saygı ve tekrar teşekkürlerimle
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,056
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
......Bir şeyi farkettim , o da limit sayısına ders adı da giriyor ve 5 limitli bir hoca gibi ders adı da 5 kere aynı görünce limit dolmuştur diyor..Ama şu anda bu bir giderilmesi gereken problem değil....
Haklısınız bunu atlamışım. Kodu aşağıdaki ile değiştirerek deneyin. İsim ve ders adı farkını A sütununa yazılan ders saati bilgisine göre ayırmaktadır. Yani A sütununda ders saati yazıyorsa bunu pas geçmektedir.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, [b6:h65536]) Is Nothing Then Exit Sub
sut = Target.Column
If Cells(Target.Row, "a") <> "" Then Exit Sub
If WorksheetFunction.CountIf(Columns(sut), Target) > Cells(2, sut) Then
MsgBox Target & " i&#231;in limit dolmu&#351;tur", 48, "Uyar&#305; !"
Target.Select
Target = ""
End If
End Sub
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,268
Excel Vers. ve Dili
office 2003 tr + office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2024
Sayın leventm,
Gerekli değişikliği kendi çalışmama yapıp satırı ekledim , bütün gün sütunlarında da denedim .
Hiç sorun kalmadı , ders bağımsız (uyarı vermiyor) ,hoca bağımlı (limit+1) olunca uyarı veriyor.
Allah razı olsun , bilginiz ve yol göstermeniz bir eğitim kurumunun saatlerinin boşa gitmesini engelledi...
Bir de şu müsait/değil'i çözebilirsem programı , hazırlayan hocaya teslim edip içinden çıkarım.
Çok teşekkür ederim
 
Son düzenleme:
Üst