• DİKKAT

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

Eğitmen o saatte müsait mi değil mi?

  • Konbuyu başlatan Konbuyu başlatan cems
  • Başlangıç tarihi Başlangıç tarihi

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,581
Excel Vers. ve Dili
office 2010 tr 32bit
Sevgili arkadaşlar
Haftalık hazırlanan bir ders programında eğitmenler sözleşmeli ise haftanın her günü/saati değil bazı günlerin bazı saatlerinde kurumda bulunup branşı olan dersi veriyor.
Bu ders programı hazırlanırken tüm eğitmenlerin zaman kartlarına bakılıp bir günün bir saatinde müsaitse derse atama yapılıyor ve kendisine de bildiriliyor.
Ancak yorulan beyinler yine de hata yaparak eğitmenin gelmeyeceği güne ya da saate atama yapabiliyor. Bunu engelleyip kesin doğru bir cetvel çıkarabilmek için ;
ekteki örnekte:
Sayfa1 :sonuçta çıkması gereken ders programı
Ahmet : Eğitmen Ahmet'in ders verebileceği GÜNLER ve SAATLER
Mehmet : Eğitmen Mehmet'in ders verebileceği GÜNLER ve SAATLER
yer almakta ve eğitmen sayısı (dolayısı ile kartı ) 12 ila 19 arasında değişebilmektedir.

Sonuçta , ders programında "Örnek olarak" Eğitmen Ahmet'in pazartesi günü saat 09:00 dersi için (kendi kartına baktırarak) müsait yada müsait olmadığı bilgisini nasıl getirebiliriz?
Not: Bütün isimler uzun bir listeden sadece branş eğitmenLERinin listesini ayıklayıp gösteren ve seçtiren bir listbox ile gelmekte. Yani bir saat için 1 den fazla eğitmen şansı olabiliyor ve bu şekilde seçilebiliyor. Seçildiği anda müsait durumu da hemen altına gelirse , tutmak ya da başka eğitmeni doğru olarak atamak mümkün olacak.

Böyle bir " doğru veri" toplamayı başarabilmek için sizce nasıl bir makro yapılabilir ?
 
Bu program desteklerinizle bir şekilde oluşunca sanırım bir çok eğitim uğraşanının çok işine yarayacak
 
Sayın leventm
Siz bir harikasınız :) Bir excel üstadısınız , yanınızda ben herhalde acemi de degil bakıp duran er oluyorum:)

Örnekte mükemmel çalışıyor hiç sorunsuz tam olması beklenen gibi ama , asıl çalışmaya uyarlayınca

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [D9:J50]) Is Nothing Then Exit Sub
sut = Target.Column
If Cells(Target.Row, "b") <> "" Then Exit Sub
If WorksheetFunction.CountIf(Columns(sut), Target) > Cells(2, sut) Then
MsgBox Target & " için yasal limit dolmuştur..Lütfen başka atama yapınız..:!!", 48, "Uyarı !"
Target.Select
Target = ""
End If
End Sub


Private Sub Worksheet_Change2(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, [D9:J50]) Is Nothing Then Exit Sub
If Target.Row Mod 3 <> 1 Then Exit Sub
If Sheets("" & Target).Cells(Target.Row + 1, Target.Column) = "Müsait" Then Exit Sub
For a = 2 To Sheets.Count
If Sheets(a).Cells(Target.Row + 1, Target.Column) = "Müsait" Then deg = deg & Sheets(a).Name & Chr(10)
Next
MsgBox Target & " öğretmen müsait değildir" & Chr(10) & Chr(10) & "Müsait öğretmenler aşağıdaki gibidir." & Chr(10) & Chr(10) & deg, 48, "Uyarı !"
Target.Select
Target = ""
End Sub


İlk verdiği hata ambigious name , dolayısı ile ikincisinin ad sonuna 2 ekledim.
Bakması gereken aralığa [D9:J50] gösterdim ve (ders programının kopyası ile )bir hoca kartı yaratıp (bu şekilde listboxa gelen adlar kalıcı oldu) kart adına Eğitmen ahmet mehmet dedim.
Yine birşeyleri göremiyorum sanırım zira çalışmadı. Anladığım kadarı ile hoca müsaitse ses cıkarmıyor değilse msgbox yükseliyor ve müsait olanlara (listboxtaki alternatif hocalara) bakıp onları da söylüyor.

Target ; (listbox'tan seçilen isimlerin) bir alt hücresi ve her iki durumda da burayı boşaltıyor. Eğer boşaltmaz MÜSAİT yazarsa tam tablo kontrolü sağlanabilir ve print tuşuna bu hücreleri silmek için bir kod yazabilir ve bu sözcük olmadan baskı alabilirim .

Sizce çalışmamasının nedeni ; ambigious görmemesi için koyduğum 2 mi ya da hoca adını Eğitmen_ahmet_mehmet şeklinde yazmamış olmam mı?
örnek ile asıl çalışma önyüzündeki farklar
saat b sütununda ve 09:00 formatında ( kod içinde geçen a saat ise o sütun boş). Önemi varsa siz ders_programı yazmışsınız ben DERSPRG yazdım sayfa adı olarak.

Ne yapmamı önerirsiniz? Bugün bunu oluşturabilirsek , gelecek haftanın programı hatasız yapılabilmiş olacak. Çalışmayı özel bilgiler olduğundan buraya yükleyemem ama isterseniz size özel mail adresine gönderebilirim.
 
Bir şeyi daha farkettim , hoca kartlarında DERS ADLARINI getiren bütün listboxlara gerek yok , sadece bütün hoca karelerinde aynı hoca ismi ve altına da kolay seçim için MÜSAİT / MÜSAİT DEĞİL için listbox yapmak yeterli , yapıyorum şu an.
Kart adları ve kart içinde geçen ile ders programında seçilerek gelen isimlerin yazım tarzı : Eğitmen ahmet mehmetoğlu
Umarım sorun teşkil etmez bu şekilde...


Hala deneyerek aşmaya çalışıyorum , neticede sanırım üç ana problemim var:
1-Ambigious'tan kurtulmak
2-Ders adlarından bağımsız direk hoca kartında "o saat için" müsait olup olmadıgına bakıp
ders programında " o saat için" engel olmak ya da bırakmak..
3-İşlevi [D9:J50] karesi için yaptırabilmek , zira 4 saatte bir dinlenme olup saat düzeni kayınca düzgün sıralı bakması doğru olmayabilir. Ancak, ders programı ve bütün hoca kartları birebir aynı,
saatleri aynı sadece hoca kartlarında ders adları yok
 
Son düzenleme:
Ayn&#305; isimli iki prosed&#252;r olamaz, iki kodu a&#351;a&#287;&#305;daki gibi birle&#351;tirin.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, [D9:J50]) Is Nothing Then Exit Sub
sut = Target.Column
If Cells(Target.Row, "b") <> "" Then Exit Sub
If WorksheetFunction.CountIf(Columns(sut), Target) > Cells(2, sut) Then
MsgBox Target & " i&#231;in yasal limit dolmu&#351;tur..L&#252;tfen ba&#351;ka atama yap&#305;n&#305;z..:!!", 48, "Uyar&#305; !"
Target.Select
Target = ""
End If
If Target.Row Mod 3 <> 1 Then Exit Sub
If Sheets("" & Target).Cells(Target.Row + 1, Target.Column) = "M&#252;sait" Then Exit Sub
For a = 2 To Sheets.Count
If Sheets(a).Cells(Target.Row + 1, Target.Column) = "M&#252;sait" Then deg = deg & Sheets(a).Name & Chr(10)
Next
MsgBox Target & " &#246;&#287;retmen m&#252;sait de&#287;ildir" & Chr(10) & Chr(10) & "M&#252;sait &#246;&#287;retmenler a&#351;a&#287;&#305;daki gibidir." & Chr(10) & Chr(10) & deg, 48, "Uyar&#305; !"
Target.Select
Target = ""
End Sub
 
merhaba,
10 Sat&#305;r kodu s&#246;kemedim ya da kafam durdu art&#305;k.&#199;al&#305;&#351;mad&#305; yani

Kodlar&#305;n ilk k&#305;sm&#305;nda sorun yok , ambigious da demedi .Buraya kadar sorun yok. Ders program&#305; ve b&#252;t&#252;n hoca kartlar&#305;nda ilk yaz&#305; olan ,saatlerin bulundu&#287;u B s&#252;tunu oldu&#287;undan kodlar&#305; &#351;u &#351;ekilde denedim:

If Target.Row Mod 3 <> 1 Then Exit Sub
If Sheets("" & Target).Cells(Target.Row + 1, Target.Column) = "M&#220;SA&#304;T" Then Exit Sub
For a = 2 To Sheets.Count
If Sheets(b).Cells(Target.Row + 1, Target.Column) = "M&#220;SA&#304;T" Then deg = deg & Sheets(b).Name & Chr(10)
Next
MsgBox Target & " &#246;&#287;retmen m&#252;sait de&#287;ildir" & Chr(10) & Chr(10) & "M&#252;sait &#246;&#287;retmenler a&#351;a&#287;&#305;daki gibidir." & Chr(10) & Chr(10) & deg, 48, "Uyar&#305; !"
Target.Select
Target = ""
End Sub


Ders program&#305;nda...............hoca kart&#305;nda
> ilk ders ad&#305; d8'de...........buras&#305; bo&#351;alt&#305;ld&#305;
> ilk hoca ad&#305; d9'da...........d9'da
> ilk bo&#351;luk d10'da.........d10'da M&#220;SA&#304;T/M&#220;SA&#304;T DE&#286;&#304;L listboxu var.
her ikisinde de ilk saat b s&#252;tununda 09:00 format&#305;nda b8'de .
hatta a ya bak&#305;p saati gene bulsun diye a s&#252;tununa da 9 format&#305;nda a8e ve a&#351;a&#287;&#305; do&#287;ru s&#305;ralad&#305;m da.

Ayn&#305; stil 5 g&#252;n i&#231;in sa&#287;a ,ve g&#252;nd&#252;z+gece dersleri i&#231;in de a&#351;a&#287;&#305; giderek sonu&#231;ta hepsinde d8:j49 aras&#305;na yerle&#351;iyor.
Y&#305;llard&#305;r excel ile u&#287;ra&#351;t&#305;m ve &#351;u kodlamay&#305; &#231;&#246;zemedim ne yapt&#305;msa. Bilmedi&#287;im yada anlam&#305;n&#305; kavrayamad&#305;&#287;&#305;m &#351;ey mod 3<>1 k&#305;sm&#305;.
Sizi de s&#305;kmaktan &#231;ekiniyorum. Belki son bir inceleme daha yapma zahmetine katlan&#305;rsan&#305;z &#231;ok sevinirim.
Sayg&#305;lar
 
Son düzenleme:
Tekrar ba&#351;lad&#305;m bakal&#305;m i&#231;inden &#231;&#305;kabilecek miyim
 
Orijinal dosyan&#305;z&#305; isimleri tamamen de&#287;i&#351;tirerek eklerseniz &#231;ok daha h&#305;zl&#305; &#231;&#246;z&#252;m bulunabilir.
 
Orijinal &#231;al&#305;&#351;man&#305;n &#246;zel datas&#305; tamamen de&#287;i&#351;tirilmi&#351; olarak ekte g&#246;nderiyorum.
De&#287;i&#351;tirirken san&#305;r&#305;m SINIFPRG da olan 8+1 engelini de bir &#351;ekilde galiba bozdum.&#214;zetle ula&#351;mak gereken iki konu olarak;

a) 8+1 engeli ve ayn&#305; zamanda
b) Bir ders saatinde bir (se&#231;ilerek gelen) dersin (se&#231;ilerek gelen) hocas&#305;n&#305;n o saatte ders
vermeye m&#252;sait olup olmad&#305;&#287;&#305;n&#305; , saate ve hocan&#305;n kendi kart&#305;na bakarak , m&#252;saitse yazmak ;
m&#252;sait de&#287;ilse uyar&#305; al&#305;p kutuyu silmek..

Sizin MsgBox'unuz harika bir &#231;&#246;z&#252;m , bu hoca m&#252;sait de&#287;il ama &#351;unlar m&#252;sait demesi , bo&#351; denemeleri de s&#305;f&#305;rl&#305;yor.

Bir s&#252;r&#252; ba&#351;ka &#351;ey aras&#305;nda toparlayamad&#305;m bir t&#252;rl&#252;. Eminim g&#246;z &#246;n&#252;nde bir &#231;&#246;z&#252;m ama bir kere g&#246;rmedi mi g&#252;nlerce g&#246;rmeyebiliyor da insan o k&#252;&#231;&#252;k de&#287;i&#351;ikli&#287;i.
Sayfalarda kilitle kar&#351;&#305;la&#351;&#305;l&#305;rsa , &#351;ifre yok direkt bo&#351; olarak korumay&#305; kald&#305;r&#305;n.Kazara silinmemesi i&#231;in protect/unprotect d&#252;&#351;&#252;nm&#252;&#351;t&#252;m, ordan kalm&#305;&#351; olabilir.
&#304;nceler ve d&#252;zeltme konusunda yard&#305;m edebilirseniz &#231;ok sevinirim.
Sayg&#305;lar ve te&#351;ekk&#252;rlerimle
 
Son düzenleme:
A&#351;a&#287;&#305;daki kodu deneyin.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, [D9:J50]) Is Nothing Then Exit Sub
sut = Target.Column
If Cells(Target.Row, "b") <> "" Then Exit Sub
If WorksheetFunction.CountIf(Columns(sut), Target) > Cells(2, sut) Then
MsgBox Target & " i&#231;in yasal limit dolmu&#351;tur..L&#252;tfen ba&#351;ka atama yap&#305;n&#305;z..:!!", 48, "Uyar&#305; !"
Target.Select
Target = ""
End If
If Sheets("" & Target).Cells(Target.Row + 1, Target.Column) = "M&#220;SA&#304;T" Then Exit Sub
For a = 3 To Sheets.Count
If Sheets(a).Cells(Target.Row + 1, Target.Column) = "M&#220;SA&#304;T" Then deg = deg & Sheets(a).Name & Chr(10)
Next
MsgBox Target & " ;bu ders g&#252;n&#252; ve saati i&#231;in m&#252;sait de&#287;ildir" & Chr(10) & Chr(10) & "M&#252;sait &#246;&#287;retmenler a&#351;a&#287;&#305;daki gibidir.L&#252;tfen bu e&#287;itmenlerden atama yap&#305;n&#305;z..." & Chr(10) & Chr(10) & deg, 48, "Uyar&#305; !"
Target.Select
Target = ""
End Sub
 
Say&#305;n leventm
Ak&#351;am zaman bulamasam da sabah ilk i&#351; olarak d&#252;zenledi&#287;iniz kodu denedim ve ilk s&#252;tunda her iki konuda da m&#252;kemmel &#231;al&#305;&#351;t&#305;. &#304;&#351;yerinde t&#252;m tablo olarak deneme &#351;ans&#305;m olacak. Kodlara g&#246;z att&#305;m , ama sabah mahmurlu&#287;u herhalde yine hatam&#305; ke&#351;fedemedim.
Elleriniz dert g&#246;rmesin , 1 g&#252;nl&#252;k &#231;al&#305;&#351;ma sayenizde ( toplam) 20 dakikaya inmi&#351; oldu.
San&#305;r&#305;m e&#287;itim i&#231;inde olan bir&#231;ok arkada&#351;&#305;m&#305;z&#305;n da &#231;ok i&#351;ine yarayacak.
Allah sizden raz&#305; olsun cok tesekk&#252;r ederim
 
Say&#305;n leventm
Ana program&#305; haz&#305;rlad&#305;m ve t&#252;m hocalar&#305; yerlestirdim , daha &#246;nce farketmedi&#287;imiz bir&#351;ey oldu. Kodlar m&#252;kemmel &#231;al&#305;&#351;&#305;yor. Dikkatimizden ka&#231;an ; program (se&#231;ilen) dersin ( se&#231;ilerek gelen ) bran&#351; hocalar&#305;n&#305; de&#287;il , o g&#252;n o saatte ne kadar m&#252;sait hoca varsa hepsini getiriyor ve i&#231;lerinde ( se&#231;ilmi&#351; ) bran&#351; hocas&#305; da olmayabiliyor.
San&#305;r&#305;m yine ufak bir g&#246;zlem ve d&#252;zeltme daha gerekecek ...
Yard&#305;m edebilir misiniz tekrar? &#350;uanki kod d&#252;zeninde hasar yaratmaya &#231;ekindi&#287;im i&#231;in kopyalarda &#231;&#246;zmeye ben de &#231;al&#305;&#351;&#305;yorum ama bir &#252;stad&#305;n g&#246;zlemi daha da h&#305;zl&#305; olabilir

Sayg&#305;lar
 
A&#351;a&#287;&#305;daki kodu deneyin. Yaln&#305;z tam olarak deneyemedim. &#304;simlerin sonundaki -HS eklemeleri sorun &#231;&#305;kartacakt&#305;r.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, [D9:J50]) Is Nothing Then Exit Sub
sut = Target.Column
If Cells(Target.Row, "b") <> "" Then Exit Sub
If WorksheetFunction.CountIf(Columns(sut), Target) > Cells(2, sut) Then
MsgBox Target & " i&#231;in yasal limit dolmu&#351;tur..L&#252;tfen ba&#351;ka atama yap&#305;n&#305;z..:!!", 48, "Uyar&#305; !"
Target.Select
Target = ""
End If
If Sheets("" & Target).Cells(Target.Row + 1, Target.Column) = "M&#220;SA&#304;T" Then Exit Sub
sat = WorksheetFunction.Match(Target.Offset(-1, 0), Sheets("HOCALIST").[b:b], 0)
For a = 3 To Sheets.Count
If WorksheetFunction.CountIf(Sheets("HOCALIST").Rows(sat), "*" & Sheets(a).Name & "*") > 0 And Sheets(a).Cells(Target.Row + 1, Target.Column) = "M&#220;SA&#304;T" Then deg = deg & Sheets(a).Name & Chr(10)
Next
MsgBox Target & " ;bu ders g&#252;n&#252; ve saati i&#231;in m&#252;sait de&#287;ildir" & Chr(10) & Chr(10) & "M&#252;sait &#246;&#287;retmenler a&#351;a&#287;&#305;daki gibidir.L&#252;tfen bu e&#287;itmenlerden atama yap&#305;n&#305;z..." & Chr(10) & Chr(10) & deg, 48, "Uyar&#305; !"
Target.Select
Target = ""
End Sub
 
Say&#305;n leventm
Nedenini hen&#252;z kontrol edemedim kodlar&#305; okumaya &#231;al&#305;&#351;arak ama , bu en son kod tam bir kar&#305;&#351;&#305;kl&#305;k yaratt&#305;. Ptesi 9:00 ve onemli ders a icin ac&#305;lan alternatif hoca 1 (olmas&#305; gereken 4 yada 5) ve bu hocan&#305;n da bran&#351;&#305; de&#287;il.Diger b&#246;lgelerde de benzer kar&#305;&#351;&#305;kl&#305;k oldu , as&#305;l cal&#305;sma uzerinde de denedim ( 2o kadar hoca dizili ) sonu&#231; ayn&#305; oldu.
En az&#305;ndan bir &#246;nceki kod versiyonu ile ( bo&#351;ta kalan t&#252;m hocalardan se&#231;erek) devam edebilir miyim diye d&#252;&#351;&#252;n&#252;yorum , size daha fazla eziyete neden olmaktansa...
&#304;simlerde - HS lerin tamam&#305;n&#305; kald&#305;rd&#305;m, HS'le haftasonu anlam&#305;ndayd&#305; , zaten kartlar&#305;nda haftasonu saatlerinde m&#252;sait i&#351;lendiler.Kart adlar&#305;n&#305; da &#246;rn: Ahmet Mehmeto&#287;lu tarz&#305;nda a&#231;t&#305;m ( Ahmet_Mehmeto&#287;lu de&#287;il ) .HOCALIST teki hoca adlar&#305; bu &#351;ekilde normal , alt tiresiz.
Sadece bran&#351; hocalardan sectirmek , program&#305; haz&#305;rlayandan da program&#305;n sa&#287;l&#305;kl&#305;l&#305;&#287;&#305;ndan da emin olmay&#305; getirecekti ve m&#252;sait se&#231;enekler kesin do&#287;ru olacakt&#305;...
&#304;nceleyip d&#252;zeltmede yard&#305;ma devam edebilir misiniz demeye y&#252;z&#252;m varm&#305;yor art&#305;k
Derin sayg&#305;lar
 
Say&#305;n leventm

Problemi san&#305;r&#305;m buldum :
Biraz &#246;nce ders program&#305; ile t&#252;m hocalar&#305;n kartlar&#305;n&#305;n g&#252;n tarihi ayn&#305; yap&#305;nca hi&#231;bir sorun olmadan t&#252;m kareler do&#287;ru &#231;al&#305;&#351;t&#305; ve M&#220;SA&#304;T OLMAYAN bir hoca se&#231;ildi&#287;inde durdurup SADECE bran&#351; hocalar&#305;ndan M&#220;SA&#304;T olanlar&#305; msgbox &#252;zerinde g&#246;sterdi.
Uyar&#305;n&#305;z &#252;zerine -HS leri tamamen kald&#305;r&#305;p kart isimlerini de "Ahmet Mehmeto&#287;lu" format&#305;nda yazd&#305;m , hi&#231; sorun yok.

&#199;ok te&#351;ekk&#252;r ederim
 
başkalarınında işine yarayabilir, bitmiş hali hala elinizdeyse gönderebilirmisiniz
 
Geri
Üst