Çözüldü Müşteri sepete otomatik veri aktarma

Epakambalaj

Normal Üye
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Hayırlı Günler Üstadlarım.

F - K - M - U Sütunlarına ürün miktarı girdiğimizde, Müşteri sepetine Ürün Miktarı ve sağındaki Ürünün kendisini otomatik olarak almamız mümkün müdür?

Örneğin F4'e "1" yazdığımızda A7'ye aynı veriyi ve B7'ye de G4'teki veriyi almak istiyoruz.

Aynı mantıkla 33 satır - 33 satır alt alta tekrarlanmasını istiyoruz. Bu şekilde alt alta 150 sepetten (4950'ye kadar) oluşuyor.

Örnek dosyadan daha rahat anlaşılır inşallah
Şimdiden çok teşekkür ediyorum.
 

Ekli dosyalar

Benim gördüğüm belgede TEK sayfa var. Sayfa2 yok.
Bu nedenle sonradan yazdığınız şeyi anlayaladım. Aşağıda belirttiğim değişikliği yaptıktan sonra yeni bir örnek belge ekleyip,
Sayfa2 ile ilgili işlemi tekrar açıklarsanız iyi olur.

Cevabım bir önceki mesajınızla (D32'ye veri yazınca, C32'ye tarih yazma) ilgili.
Ayrıca; bu istek dışında kodda ufak değişiklik de yaptığım için bütün kodu vereyim.
Mevcut kodu bütünüyle silip, yerine aşağıdakini yapıştırın.

VBA:
You must log in to view content
(51 satır)
 
Benim gördüğüm belgede TEK sayfa var. Sayfa2 yok.
Bu nedenle sonradan yazdığınız şeyi anlayaladım. Aşağıda belirttiğim değişikliği yaptıktan sonra yeni bir örnek belge ekleyip,
Sayfa2 ile ilgili işlemi tekrar açıklarsanız iyi olur.

Cevabım bir önceki mesajınızla (D32'ye veri yazınca, C32'ye tarih yazma) ilgili.
Ayrıca; bu istek dışında kodda ufak değişiklik de yaptığım için bütün kodu vereyim.
Mevcut kodu bütünüyle silip, yerine aşağıdakini yapıştırın.

VBA:
You must log in to view content
(55 satır)
 
Üstadım örnek dosyada belirttiğimiz şekilde,
G1 hücresine ürün yazdığımızda, sarı dolgulu hücrelere, BE listesindeki sıralamasına göre çekmemiz mümkün müdür?

Ör:
G2 de "40x80 siyah battal poşet" varken
G1 e "küçük renkli poşet" yazdığımızda, G2'ye bu yazıılacak, "40x80 siyah battal poşet" G3e kayacak.

"40x80 siyah battal poşet" ile beraber F-I-H-J hücreleri de beraber kaymalıdır ki, değerler çakışması oluşmasın.
 

Ekli dosyalar

Önce şu Sayfa 1 tamamlansın, Sayfa 2 sonraki mesele.
Kodu Sayfa1'e uyarladım demişsiniz ama yanlış yapmışsınız.
Kodun, sağa doğru olan alan genişlemesini de içine alması için bir önceki cevapta (21 numaralı cevap)
verdiğim kodu güncelledim, sayfayı yenileyerek 21 numaralı cevaptaki yeni halini kullanın.

O kısıma tamam dedikten sonra diğer istek/sorun neyse ona bakılsın.
Ayrıca ısrarla "kod birleştirme" diyorsunuz.
Ben de diyorum ki; böyle demeyin, şurada şu olunca burada bu olsun gibi yapılması gereken işlemi tarif edin.
Tarif ederken de anlamlı, gerçek verilere/sayfa yapısına uygun hücre söyleyin (örneğin G1'e diyorsunuz ama G1 BAŞLIK alanı).

.
 
Önce şu Sayfa 1 tamamlansın, Sayfa 2 sonraki mesele.
Kodu Sayfa1'e uyarladım demişsiniz ama yanlış yapmışsınız.
Kodun, sağa doğru olan alan genişlemesini de içine alması için bir önceki cevapta (21 numaralı cevap)
verdiğim kodu güncelledim, sayfayı yenileyerek 21 numaralı cevaptaki yeni halini kullanın.

O kısıma tamam dedikten sonra diğer istek/sorun neyse ona bakılsın.
Ayrıca ısrarla "kod birleştirme" diyorsunuz.
Ben de diyorum ki; böyle demeyin, şurada şu olunca burada bu olsun gibi yapılması gereken işlemi tarif edin.
Tarif ederken de anlamlı, gerçek verilere/sayfa yapısına uygun hücre söyleyin (örneğin G1'e diyorsunuz ama G1 BAŞLIK alanı).
 
Peki hocam sırayla gidelim.
G1 hücresine ürün girdiğimizde,
G2 hücresine G1 deki ürünü, I2'ye BG2 deki satış fiyatını, ,J2'ye BF2 deki Geliş fiyatını, almak istiyoruz.

G1 e tekrar ürün girdiğimizde, BE listesindeki sıralamaya göre, sarı dolgulu alanlara ürünleri geliş ve satış fiyatlarını kaydırmak istiyoruz.

Ör:
G2 de "40x80 siyah battal poşet" varken
G1 e "küçük renkli poşet" yazdığımızda, G2'ye bu yazıılacak, "40x80 siyah battal poşet" G3e kayacak.

"40x80 siyah battal poşet" ile beraber F-I-H-J hücreleri de beraber kaymalıdır ki, değerler çakışması oluşmasın.
 

Ekli dosyalar

Yani siz, sarı zeminli hücrelerdeki VERİ DOĞRULAMA (açılır liste) özelliğini iptal edip,
sadece 1'inci satırdaki G1, L1, Q1, ......, AU1, AZ1 hücrelerini, sarı alanlara veri aktarma işlemi yapmak için kullanmak,
daha alt satırlardaki başlık satırları için ise işlem yapılmadan ilk 32 satırdaki değişimlerin 4950'nci satıra kadar da
formüller veya makro ile birebir yansımasını istiyorsunuz doğru mudur?
Veri girişinin de BOŞLUKSUZ ve her seferinde yeni girilen ürünün en üstte olacak şekilde aşağı kaydırılmasını istiyorsunuz.
-- Tabi diyelim G1'de bu işlem 32 kez yapıldı ve alan doldu o zaman ne olacak?
-- Daha evvel girilmiş ürünler varken MİKTAR yazılmasıyla beraber SEPETe ekleme işlemi yapıldıkta sonra (F sütununda sayı var ve bu ürün sepette) G1'e veri girerseniz ne olacak? Bu durum, isteğinizin imkansız hale gelmesi anlamına gelebilir.
-- BE sütunundaki BOŞ/SIFIR/A, B, Ç gibi tek harf hücrelerinin anlamı/işlevi nedir?
-- Cevabınızdaki "BE listesindeki sıraya göre" derken neyi kastediyorsunuz?
G1 hücresinde diyelim önce BE93'deki "kalın jumbo canhm. (10'lu)" seçtiniz. BE sütunundaki sırayla demenizin bu bakımdan anlamı nedir?

SEPETlerin tümü BOŞ iken yukardaki veri giriş yöntemi isteniyorsa da; bu isteğinizin kodlanması, biraz farklı ve tasarlanması zor olabilir.

.
 
Yani siz, sarı zeminli hücrelerdeki VERİ DOĞRULAMA (açılır liste) özelliğini iptal edip,
sadece 1'inci satırdaki G1, L1, Q1, ......, AU1, AZ1 hücrelerini, sarı alanlara veri aktarma işlemi yapmak için kullanmak,
daha alt satırlardaki başlık satırları için ise işlem yapılmadan ilk 32 satırdaki değişimlerin 4950'nci satıra kadar da
formüller veya makro ile birebir yansımasını istiyorsunuz doğru mudur?
Veri girişinin de BOŞLUKSUZ ve her seferinde yeni girilen ürünün en üstte olacak şekilde aşağı kaydırılmasını istiyorsunuz.
-- Tabi diyelim G1'de bu işlem 32 kez yapıldı ve alan doldu o zaman ne olacak?
-- Daha evvel girilmiş ürünler varken MİKTAR yazılmasıyla beraber SEPETe ekleme işlemi yapıldıkta sonra (F sütununda sayı var ve bu ürün sepette) G1'e veri girerseniz ne olacak? Bu durum, isteğinizin imkansız hale gelmesi anlamına gelebilir.
-- BE sütunundaki BOŞ/SIFIR/A, B, Ç gibi tek harf hücrelerinin anlamı/işlevi nedir?
-- Cevabınızdaki "BE listesindeki sıraya göre" derken neyi kastediyorsunuz?
G1 hücresinde diyelim önce BE93'deki "kalın jumbo canhm. (10'lu)" seçtiniz. BE sütunundaki sırayla demenizin bu bakımdan anlamı nedir?

SEPETlerin tümü BOŞ iken yukardaki veri giriş yöntemi isteniyorsa da; bu isteğinizin kodlanması, biraz farklı ve tasarlanması zor olabilir.

.
+ G33 dolduğunda, L1 den (aynı mantıkla AZ33'e kadar) devam edecek hocam.

-- Daha evvel girilmiş ürünler varken MİKTAR yazılmasıyla beraber SEPETe ekleme işlemi yapıldıkta sonra (F sütununda sayı var ve bu ürün sepette) G1'e veri girerseniz ne olacak? Bu durum, isteğinizin imkansız hale gelmesi anlamına gelebilir.
+ G1'e veri girdiğimizde, alt satırlarda kayan ürün isimleriyle beraber, ürün miktarı ve ürün fiyatları da beraber kayarsa sorun çözülür mü acaba hocam?


-- BE sütunundaki BOŞ/SIFIR/A, B, Ç gibi tek harf hücrelerinin anlamı/işlevi nedir?
+ Sıradan yazılar hocam, herhangi bir değerleri yok.

-- Cevabınızdaki "BE listesindeki sıraya göre" derken neyi kastediyorsunuz?
+ Hocam her müşterinin kullandığı ürün listesi farklılık oluşturduğu için, sıfır tabloya farklı zamanlarda çeşitli veriler girince ürünü bulmamız zaman kaybı oluşturuyor.
Ör. "orta çöp poşeti" G19'a kaydedilmiş iken, 10 fiş kadar sonra "büyük çöp poşeti"ni Q24'te bulana kadar zaman kaybı oluşuyor.
"orta çöp poşeti" G19'da ise, "büyük çöp poşeti"ni ne G20 de görmek istiyoruz.

BE listesinde ürünler sistematik şekilde olduğu için, orayı baz almamız zaman kazandıracaktır.

Tekrar örnek faydalı olursa,

G2 de BE38
G3 de BE15
G4 de BE95
G5 de BE8
şeklinde olan verileri

G2 de BE8
G3 de BE15
G4 de BE38
G5 de BE95
olarak almak istiyoruz.
Beraberinde, hazırda yanında olan verileri (F-H-I-J) de kaydırmak istiyoruz.
Kayan veriler BE listesinden çekilmeyecek. Hazırda olan (boş veya dolu) hücreler ne varsa kayacak.
 
Yani siz, sarı zeminli hücrelerdeki VERİ DOĞRULAMA (açılır liste) özelliğini iptal edip,
sadece 1'inci satırdaki G1, L1, Q1, ......, AU1, AZ1 hücrelerini, sarı alanlara veri aktarma işlemi yapmak için kullanmak,
daha alt satırlardaki başlık satırları için ise işlem yapılmadan ilk 32 satırdaki değişimlerin 4950'nci satıra kadar da
formüller veya makro ile birebir yansımasını istiyorsunuz doğru mudur?
Veri girişinin de BOŞLUKSUZ ve her seferinde yeni girilen ürünün en üstte olacak şekilde aşağı kaydırılmasını istiyorsunuz.
-- Tabi diyelim G1'de bu işlem 32 kez yapıldı ve alan doldu o zaman ne olacak?
-- Daha evvel girilmiş ürünler varken MİKTAR yazılmasıyla beraber SEPETe ekleme işlemi yapıldıkta sonra (F sütununda sayı var ve bu ürün sepette) G1'e veri girerseniz ne olacak? Bu durum, isteğinizin imkansız hale gelmesi anlamına gelebilir.
-- BE sütunundaki BOŞ/SIFIR/A, B, Ç gibi tek harf hücrelerinin anlamı/işlevi nedir?
-- Cevabınızdaki "BE listesindeki sıraya göre" derken neyi kastediyorsunuz?
G1 hücresinde diyelim önce BE93'deki "kalın jumbo canhm. (10'lu)" seçtiniz. BE sütunundaki sırayla demenizin bu bakımdan anlamı nedir?

SEPETlerin tümü BOŞ iken yukardaki veri giriş yöntemi isteniyorsa da; bu isteğinizin kodlanması, biraz farklı ve tasarlanması zor olabilir.

.
iyi günler hocam, aynen tarif ettiğiniz gibi sarı hücrelerdeki veri doğrulama özelliği iptal olacak.
veri doğrulama sadece G1-G34 şeklinde her sayfanın ilk hücresinde olması yeterli olacaktır.

yardımcı olmanız mümkün müdür hocam?
 
Değerli hocam, kod sorununu deneme yanılma yöntemiyle aşağıdaki şekilde çözdük :)

Rehberlik ve kılavuzluk ettiğiniz çok teşekkür ederim.

Public secim

Private Sub Worksheet_Change(ByVal Target As Range)
If ((Target.Row - 1) Mod 33) = 0 Or Target.Row > 4950 Then Exit Sub 'BAŞLIK ve SON SATIR
If ((Target.Row - 1) Mod 33) = 31 And Target.Column = 4 Then 'İSKONTO
Cells(Target.Row, 3).NumberFormat = "dd mmm": Cells(Target.Row, 3).ClearContents
If Target.Value <> 0 Then Cells(Target.Row, 3) = Date
Exit Sub
End If

If Target.Column = 6 Then
Application.ScreenUpdating = False
Columns("BE:BE").Select
Selection.Find(What:=Target.Offset(0, 1).Value, LookIn:=xlValues).Select
Target.Cells(1, 1).Offset(0, 3).Value = Range(ActiveCell.Address).Offset(0, 3).Value
Target.Cells(1, 1).Offset(0, 4).Value = Range(ActiveCell.Address).Offset(0, 1).Value
Target.Offset(0, 0).Select
Application.ScreenUpdating = True
End If

If Target.Column = 11 Then
Application.ScreenUpdating = False
Columns("BE:BE").Select
Selection.Find(What:=Target.Offset(0, 1).Value, LookIn:=xlValues).Select
Target.Cells(1, 1).Offset(0, 3).Value = Range(ActiveCell.Address).Offset(0, 3).Value
Target.Cells(1, 1).Offset(0, 4).Value = Range(ActiveCell.Address).Offset(0, 1).Value
Target.Offset(0, 0).Select
Application.ScreenUpdating = True
End If

If Target.Column = 16 Then
Application.ScreenUpdating = False
Columns("BE:BE").Select
Selection.Find(What:=Target.Offset(0, 1).Value, LookIn:=xlValues).Select
Target.Cells(1, 1).Offset(0, 3).Value = Range(ActiveCell.Address).Offset(0, 3).Value
Target.Cells(1, 1).Offset(0, 4).Value = Range(ActiveCell.Address).Offset(0, 1).Value
Target.Offset(0, 0).Select
Application.ScreenUpdating = True
End If

If Target.Column = 21 Then
Application.ScreenUpdating = False
Columns("BE:BE").Select
Selection.Find(What:=Target.Offset(0, 1).Value, LookIn:=xlValues).Select
Target.Cells(1, 1).Offset(0, 3).Value = Range(ActiveCell.Address).Offset(0, 3).Value
Target.Cells(1, 1).Offset(0, 4).Value = Range(ActiveCell.Address).Offset(0, 1).Value
Target.Offset(0, 0).Select
Application.ScreenUpdating = True
End If

If Target.Column = 26 Then
Application.ScreenUpdating = False
Columns("BE:BE").Select
Selection.Find(What:=Target.Offset(0, 1).Value, LookIn:=xlValues).Select
Target.Cells(1, 1).Offset(0, 3).Value = Range(ActiveCell.Address).Offset(0, 3).Value
Target.Cells(1, 1).Offset(0, 4).Value = Range(ActiveCell.Address).Offset(0, 1).Value
Target.Offset(0, 0).Select
Application.ScreenUpdating = True
End If

If Target.Column = 31 Then
Application.ScreenUpdating = False
Columns("BE:BE").Select
Selection.Find(What:=Target.Offset(0, 1).Value, LookIn:=xlValues).Select
Target.Cells(1, 1).Offset(0, 3).Value = Range(ActiveCell.Address).Offset(0, 3).Value
Target.Cells(1, 1).Offset(0, 4).Value = Range(ActiveCell.Address).Offset(0, 1).Value
Target.Offset(0, 0).Select
Application.ScreenUpdating = True
End If

If Target.Column = 36 Then
Application.ScreenUpdating = False
Columns("BE:BE").Select
Selection.Find(What:=Target.Offset(0, 1).Value, LookIn:=xlValues).Select
Target.Cells(1, 1).Offset(0, 3).Value = Range(ActiveCell.Address).Offset(0, 3).Value
Target.Cells(1, 1).Offset(0, 4).Value = Range(ActiveCell.Address).Offset(0, 1).Value
Target.Offset(0, 0).Select
Application.ScreenUpdating = True
End If

If Target.Column = 41 Then
Application.ScreenUpdating = False
Columns("BE:BE").Select
Selection.Find(What:=Target.Offset(0, 1).Value, LookIn:=xlValues).Select
Target.Cells(1, 1).Offset(0, 3).Value = Range(ActiveCell.Address).Offset(0, 3).Value
Target.Cells(1, 1).Offset(0, 4).Value = Range(ActiveCell.Address).Offset(0, 1).Value
Target.Offset(0, 0).Select
Application.ScreenUpdating = True
End If

If Target.Column = 46 Then
Application.ScreenUpdating = False
Columns("BE:BE").Select
Selection.Find(What:=Target.Offset(0, 1).Value, LookIn:=xlValues).Select
Target.Cells(1, 1).Offset(0, 3).Value = Range(ActiveCell.Address).Offset(0, 3).Value
Target.Cells(1, 1).Offset(0, 4).Value = Range(ActiveCell.Address).Offset(0, 1).Value
Target.Offset(0, 0).Select
Application.ScreenUpdating = True
End If

If Target.Column = 51 Then
Application.ScreenUpdating = False
Columns("BE:BE").Select
Selection.Find(What:=Target.Offset(0, 1).Value, LookIn:=xlValues).Select
Target.Cells(1, 1).Offset(0, 3).Value = Range(ActiveCell.Address).Offset(0, 3).Value
Target.Cells(1, 1).Offset(0, 4).Value = Range(ActiveCell.Address).Offset(0, 1).Value
Target.Offset(0, 0).Select
Application.ScreenUpdating = True
End If


If ((Target.Column - 1) Mod 5) <> 0 Or Target.Column > 51 Then Exit Sub ' MİKTAR SÜTUNLARI
Application.EnableEvents = False
ilk = Int(Target.Row / 34) * 33 + 7: son = ilk + 21
If Target.Offset(0, 1) = "" Or Target.Offset(0, 1) = 0 Then
MsgBox "ÖNCE ÜRÜN SEÇİMİ YAPINIZ !", vbCritical
Target.ClearContents: GoTo 10
End If
bul = 0
For s = ilk To son
bak = Cells(s, 2)
If bak = secim Then: bul = s: Exit For
Next
If bul > 0 And Target = Empty Then
Range("A" & bul & ":D" & bul).ClearContents
Range("A" & bul).Resize(son - bul, 4) = Range("A" & bul + 1 & ":D" & son).Value
Range("A" & son & ":D" & son).ClearContents
If bul = ilk And Cells(ilk, 1) = "" Then Cells(ilk - 2, 1).ClearContents: Cells(ilk - 2, 2).ClearContents
GoTo 10
ElseIf bul > 0 And Not Target = Empty Then
Cells(bul, 1) = Target.Value: Cells(bul, 3) = Target.Offset(0, 2)
Cells(bul, 4) = Target.Value * Cells(bul, 3): GoTo 10
End If
If ((Target.Column - 1) Mod 5) = 0 And Not IsNumeric(Target.Value) Then
MsgBox "SADECE SAYI YAZILABİLİR", vbCritical
Target.ClearContents: Target.Activate
ElseIf WorksheetFunction.CountBlank(Range("A" & ilk & ":A" & son)) = 0 Then
MsgBox "SEPET DOLDU ! SONRAKİ SAYFADAN DEVAM EDİNİZ !", vbCritical
Target.ClearContents: Target.Activate: GoTo 10
Else
XD = Cells(son + 1, 1).End(3).Row + 1
If ilk = XD Then: Cells(ilk - 2, 1).NumberFormat = "h:mm": Cells(ilk - 2, 1) = Time: Cells(ilk - 2, 2) = Date
Cells(XD, 1) = Target.Value: Cells(XD, 2) = Target.Offset(0, 1)
Cells(XD, 3) = Target.Offset(0, 2): Cells(XD, 4) = Target.Offset(0, 2) * Target.Value
End If
10: Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column < 6 Or Target.Column > 51 Or Target.Row > 4950 Or ((Target.Column - 1) Mod 5) <> 0 Then Exit Sub
If Selection.Count > 1 Then Exit Sub
secim = Target.Offset(0, 1)
End Sub
 
Gayet normal, 1'inci satırdaki bir hücreye yazdığınızda da sepete eklemez.
Çünkü tablo yapınızı değiştirmişsiniz. Önceden her sepet alanının 1'inci satırı başlık satırıydı ve kod da ona göre hazırlanmıştı.
Emin değilim ama, mevcut koddaki Target.Row - 1 kısımlarını Target.Row şeklinde değiştirerek deneyin.

Bu şekilde olmazsa, tüm emeğin bir anlamda ÇÖP olduğu anlamı çıkar ve en baştan bakmak, en baştan kodlamak gerekecek demektir.

.
 
Gayet normal, 1'inci satırdaki bir hücreye yazdığınızda da sepete eklemez.
Çünkü tablo yapınızı değiştirmişsiniz. Önceden her sepet alanının 1'inci satırı başlık satırıydı ve kod da ona göre hazırlanmıştı.
Emin değilim ama, mevcut koddaki Target.Row - 1 kısımlarını Target.Row şeklinde değiştirerek deneyin.

Bu şekilde olmazsa, tüm emeğin bir anlamda ÇÖP olduğu anlamı çıkar ve en baştan bakmak, en baştan kodlamak gerekecek demektir.

.
hocam bu dediğinizi yaptım. 1 satır güzel çalışıyor. teşekkür ederim.

bundan bağımısz olarak ilk attığınız ve devamında attığınız tüm kodların, f33 ve yanındaki sıraların tamamı 2. sepete ilave yapıyordu.
bunun düzeltilmesi mümkünse iyi olur. mümkün değilse tarzanlama usülu olarak yeni bir yöntem ile hazırladığınız kodu kullanacağız.
 
Hayırlı Akşamlar @Ömer BARAN Hocam,
Müşteri sepetine (kg, lt, bd ...) şeklinde ilave yaptık.
Kodları uyarlamaya çalıştık. Tam beceremedik.
Yardımcı olabilir misiniz?

H sütununa rakam girdiğimizde, I sütununu baz alarak müşteri listesine eklediği için, J sütunundaki farklı ürünleri sepete ilave edemiyoruz.

Şimdiden çok teşekkür ediyorum.
 

Ekli dosyalar

Üst