F

Çözüldü Makro Ile Otomatik Listeler Oluşturma

fledermaus

Site Üyesi
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhabalar,

Ekte paylaşmış olduğum dosyamda, ilk sayfanın G veya J sütunlarına ait başlıklar altına girilen benzersiz verilere göre çapraz ara yaparak ikinci sayfadan kişilere ait bilgiler otomatik olarak çekilmektedir.

Sonrasında ise, listelenen dosya bir buton yardımı ile sayfa ismi verilerek masa üstüne .xlsx olarak kayıt edilmektedir.

Benim burada farklı olarak eklemek istediğim;

Listede olmayan bir kişiye ait veriler manual olarak girildiğinde, dosyayı kapatırken "listede olmayan yeni kişileri kaydetmek istiyor musunuz" gibi bir uyarı alarak, dosyayı kapatmadan önce yeni girilen verilerin ikinci sayfadaki listeye otomatik olarak eklenmesidir.

Bunu yapmak mümkün müdür ?

Yardımları için herkese şimdiden teşekkür ederim.

Not: İlk sayfada herhangi bir satırdaki veriler silindiğinde makro hata mesajı alınmamalıdır.

Syg,
 

Ekli dosyalar

Moderatörün son düzenlenenleri:
@fledermaus

Bilgİsayarda değilim.

If WorksheetFunction.CountIf(s1.Columns(hdf), IIf(Cells(s, 7) <> "", Cells(s, 7).Value, Cells(s, 9).Value)) = 0 Then

şeklindeki kod kısmını aşağıdaki gibi değiştirip tekrar kontrol edin.

If WorksheetFunction.CountIf(s1.Columns(hdf), Cells(s, hdf)) = 0 Then


.
 
@fledermaus

Bilgİsayarda değilim.

If WorksheetFunction.CountIf(s1.Columns(hdf), IIf(Cells(s, 7) <> "", Cells(s, 7).Value, Cells(s, 9).Value)) = 0 Then

şeklindeki kod kısmını aşağıdaki gibi değiştirip tekrar kontrol edin.

If WorksheetFunction.CountIf(s1.Columns(hdf), Cells(s, hdf)) = 0 Then


.
Hocam Merhabalar,

Kodlar sorunsuz çalışıyorlar. Sadece aşağıdaki gibi yeni girdileri yazmak için satırları silmek istediğimde aşağıdaki gibi hata mesajı çıkıyor.


1650010995259.webp



1650011026585.webp



Syg,
 
Moderatörün son düzenlenenleri:
-- Worksheet_Change kodunun ilk satırını şöyle değiştirin,
If Target.Count > 1 Or Target.Column <> 7 And Target.Column <> 10 Or Target.Row = 1 Then Exit Sub
-- Aynı koddaki son = ..... satırını da silin (gereksiz olarak kalmış) .
 
-- Worksheet_Change kodunun ilk satırını şöyle değiştirin,
If Target.Count > 1 Or Target.Column <> 7 And Target.Column <> 10 Or Target.Row = 1 Then Exit Sub
-- Aynı koddaki son = ..... satırını da silin (gereksiz olarak kalmış) .

Hocam Merhaba,

"If Intersect(Target, Range("J2:J" & Rows.Count)) Is Nothing Then Exit Sub" satırını da yukarıdaki gibi değiştirmem gerekir mi ?


Syg,
 
14 numaralı cevapta verdiğim kodu kullanmıyor musunuz?
Orada verdiğim Worksheet_Change kodunda G ve J sütununa yönelik bir Intersect..... kod satırı hiç kullanılmıyor durumda zaten.
 
14 numaralı cevapta verdiğim kodu kullanmıyor musunuz?
Orada verdiğim Worksheet_Change kodunda G ve J sütununa yönelik bir Intersect..... kod satırı hiç kullanılmıyor durumda zaten.

Hocam Tekrar Merhaba,

#14 numaralı cevapta verdiğim kodu kullanmıyor musunuz?

Vermiş olduğunuz kod kullanıldı hocam.

#Orada verdiğim Worksheet_Change kodunda G ve J sütununa yönelik bir Intersect..... kod satırı hiç kullanılmıyor durumda zaten.

22 no 'lu mesajımda çıkan hata mesajı diğer kod içerisinde oluştu. Bu konuyla ilgili 24 no'lu cevabınıza istinaden sadece birini değiştirdim ancak yine hatayı alınca diğerini demi, değiştirmek gerekir diye sormuştum.

Kullanılan kodlar aşağıdaki gibidir. Siyah ile işaretlemiş olduklarım kodları söylemiş olduğunuz gibi değiştirdim ancak yine aynı hata mesajını aldım. Sadece G sütunu ve G ve J yi ayn ı anda revize ederekte denedim.

Dosyayı da ayrıca paylaştım hocam.

Saygılarımı sunarım.

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("G2:G" & Rows.Count)) Is Nothing Then GoTo 10
a = Target.Row
Set s1 = Sheets("List Data")
son = s1.Cells(Rows.Count, "G").End(3).Row
If Target = "" Then
Application.EnableEvents = False
Range("A" & a & ":L" & a).ClearContents
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(s1.Range("G1:G" & son), Target) > 0 Then
Application.EnableEvents = False
sat = WorksheetFunction.Match(Target, s1.Range("G1:G" & son), 0)
s1.Range("A" & sat & ":L" & sat).Copy: Cells(a, "A").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Target.Select
Application.EnableEvents = True
End If
10:
If Intersect(Target, Range("J2:J" & Rows.Count)) Is Nothing Then Exit Sub
a = Target.Row
Set s1 = Sheets("List Data")
son = s1.Cells(Rows.Count, "J").End(3).Row
If Target = "" Then
Application.EnableEvents = False
Range("A" & a & ":L" & a).ClearContents
Application.EnableEvents = True
ElseIf WorksheetFunction.CountIf(s1.Range("J1:J" & son), Target) > 0 Then
Application.EnableEvents = False
sat = WorksheetFunction.Match(Target, s1.Range("J1:J" & son), 0)
s1.Range("A" & sat & ":L" & sat).Copy: Cells(a, "A").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Target.Select
Application.EnableEvents = True
End If
End Sub
-------------------------------------------------------------------------------------------------------------------------
Private Sub CommandButton1_Click()
Dim soru As String
Set s1 = Sheets("List Data")
For s = 2 To Cells(Rows.Count, 1).End(3).Row
If Cells(s, 7) = Empty And Cells(s, 10) = Empty Then: eksik = eksik + 1: GoTo 10
If Cells(s, 7) <> "" Then hdf = 7
If Cells(s, 10) <> "" Then hdf = 10
eksik = Empty: sut = Array(1, 3, 4, 5, 6, 8, 9, 11, 12, hdf)
For u = 0 To UBound(sut)
If Cells(s, sut(u)) = "" Then: eksik = eksik + 1: Exit For
Next
10: If Not eksik = Empty Then
MsgBox "EKSİK BİLGİLER TAMAMLANMADAN devam edilemez!" & vbLf & _
"Eksiklik olan satır: " & s, vbCritical
Exit Sub
Else
If WorksheetFunction.CountIf(s1.Columns(hdf), Cells(s, hdf)) = 0 Then
say = say + 1: sat = s1.Cells(Rows.Count, 1).End(3).Row + 1
s1.Range("A" & sat & ":N" & sat).Value = Range("A" & s & ":N" & s).Value
End If
End If
Next
yol = ThisWorkbook.Path & "\"
soru = InputBox("Kaydedilecek Dosya Adını Yazın:")
If soru = Empty Then Exit Sub
isim = soru & ".xlsx"
ThisWorkbook.ActiveSheet.Copy
Application.DisplayAlerts = False
ActiveWorkbook.Close True, yol & isim
Application.DisplayAlerts = True
MsgBox IIf(say >= 1, say & " adet kişi listeye eklenerek,", "") & vbLf & _
yol & " dizinine, " & vbLf & isim & vbLf & "isimli belge kaydedildi.", vbInformation
Exit Sub
bitir:
MsgBox "Dosya seçilmediği için işlem sonlandırıldı"
End Sub
 

Ekli dosyalar

Ben kodu aşağıdaki gibi düzenlediğimde bir sorun/eksiklik görmüyorum.

Küçük değişiklik yaptığım nihai kod aşağıdaki gibi.
-- Listeye ekleme kararı verilirken; G ve J sütunu aynı anda doluysa J sütununa göre var/yok kararı verilir (yani öncelik sırası J sütununda).
Biri dolu, diğeri boşsa dolu olan sütuna göre karar verilir.
-- Liste sayfasından veri çağırma işleminde ise öncelik sırası G veya J sütunundan hangisi en son yazılıyorsa o sütuna göre karar verilir.
-- Listeye kayıtla ilgili karar verme için kullanılacak sütunun öncelik sırasını değiştirmek isterseniz ; düğme kodundaki
If Cells(s, 7) <> "" Then hdf = 7 satırı ile If Cells(s, 10) <> "" Then hdf = 10 satırının yerlerini değiştirin.

Denersiniz.

[REPLY]
VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(51 satır)
[/REPLY]
 
Ben kodu aşağıdaki gibi düzenlediğimde bir sorun/eksiklik görmüyorum.

Küçük değişiklik yaptığım nihai kod aşağıdaki gibi.
-- Listeye ekleme kararı verilirken; G ve J sütunu aynı anda doluysa J sütununa göre var/yok kararı verilir (yani öncelik sırası J sütununda).
Biri dolu, diğeri boşsa dolu olan sütuna göre karar verilir.
-- Liste sayfasından veri çağırma işleminde ise öncelik sırası G veya J sütunundan hangisi en son yazılıyorsa o sütuna göre karar verilir.
-- Listeye kayıtla ilgili karar verme için kullanılacak sütunun öncelik sırasını değiştirmek isterseniz ; düğme kodundaki
If Cells(s, 7) <> "" Then hdf = 7 satırı ile If Cells(s, 10) <> "" Then hdf = 10 satırının yerlerini değiştirin.

Denersiniz.

*** Hidden text: cannot be quoted. ***

Hocam Merhaba,

Aşağıdaki gibi bir hata mesajı çıkıyor. Ben mi bir yerde değişiklik yada yanlış yapıyorum bulamadım açıkçası.

Vermiş olduğunuz kodu aynı şekilde kopyalıyorum.


1650176146734.webp



Birde burada yanlış bilgilendirme yapmış olmayayım. Satırlardaki bilgileri kaldırmak istediğinizde G sütunundaki yada J sütunundaki verleri silmeniz yeterli oluyor yani tüm satır siliniyor bunda bir problem yok.

Ancak 22 ci mesajımdaki görselde ve aşağıdaki görselde de paylaşmış olduğum gibi hata mesajı tüm satırları tek seferde silmek istediğimde

ortaya çıkıyor.

1650177034113.webp



Syg,
 
Moderatörün son düzenlenenleri:
Hocam Merhaba,

Aşağıdaki gibi bir hata mesajı çıkıyor. Ben mi bir yerde değişiklik yada yanlış yapıyorum bulamadım açıkçası.

Vermiş olduğunuz kodu aynı şekilde kopyalıyorum.


1650176146734.webp


Birde burada yanlış bilgilendirme yapmış olmayayım. Satırlardaki bilgileri kaldırmak istediğinizde G sütunundaki yada J sütunundaki verleri silmeniz yeterli oluyor yani tüm satır siliniyor bunda bir problem yok.

Ancak 22 ci mesajımdaki görselde ve aşağıdaki görselde de paylaşmış olduğum gibi hata mesajı tüm satırları tek seferde silmek istediğimde

ortaya çıkıyor.

1650177034113.webp


Syg,

Ancak 22 ci mesajımdaki görselde ve aşağıdaki görselde de paylaşmış olduğum gibi hata mesajı "satırı, satırları yada satır, satırlarda geçen tüm bilgileri tek seferde" silmek istediğimde

ortaya çıkıyor.
 
Moderatörün son düzenlenenleri:
@fledermaus
Mevcut kodlara ek olarak yapıştırmışsınız.
Mevcut kodların tümünü silip bunların yerine son kod cevabımdaki kodları yapıştıracaktınız.

Hocam Merhaba,

Çok çok özür dilerim. 14 no'lu mesajınızdaki cevaba istinaden sadece (Buttoh1_Click) olan kısmı silin gibi algılamışım. Konu o yüzden gereksiz yere uzadı. Kusura bakmayın.

Kodu uyguladım fakat bu seferde G ve J Sütununda herhangi bir değeri silersen çekilen bilgiler silinmiyor/kaybolmuyor kalıyorlar.

Birde çok komplike ve gereksiz bir uğraşı gerektirir mi bilemiyorum ama G veya J sütununa değerler yazılıp veriler çekildikten sonra hücre içi kutucuk bir sonraki satırın ilk hücresine atabilir mi acaba ? Çokta gerekli değil açıkçası sadece mümkün ise ilgili kodu nasıl revize etmem gerekir ?

Konu, yanlış yorumladığım cevap yüzünden gereksiz uzadı. Daha fazla zamanınızı almadan, meşgul etmeden konuyu kapatmak istiyorum.


Saygılarımı sunarım,
 
Sadece Worksheet_Change kodunu şöyle değiştirip tekrar deneyin.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(14 satır)


Hocam Merhaba,

Çok çok sağ olun. Göstermiş olduğunuz sabır ve emekleriniz için ayrıca teşekkürü bir borç bilirim. Saygılarımı sunarım.

Forumdaşlara da yardımcı ve yol gösterici olması açısından,

Söz konusu tüm kodlar ile paylaşılan dosyada; (ikinci sayfanın G ve J sütunlarında benzersiz değerler oluşturmak kaydı ile)

1. G ve J sütunlarına girilecek benzersiz değerlerin bir sonucu olarak ikinci sayfada geçen veriler otomatik olarak çekilebiliyor,
2. Çekilen bu veriler buton yardımı ile dosya adı verilerek masaüstüne yeni bir dosya olarak otomatik kayıt edilebiliyor.
3. Sayfaya listede olmayan yeni bir değer girildiğinde masaüstüne otomatik kayıt yapılırken ikinci sayfadaki veri listesine otomatik olarak eklenebiliyor.


Herkese sevgi ve saygılarımla,
 
Üst