Sub VeriToSablon()
    Dim wsVeri As Worksheet
    Dim wsSab As Worksheet
    Dim sonSatir As Long
    Dim i As Long
    Dim sablonBaslangic As Long
    Dim blokYuksekligi As Long
    Dim kayitSayisi As Long
    Dim musteriSutun As Integer, urunSutun As Integer, barkodSutun As Integer
    Dim siparisSutun As Integer, faturaSutun As Integer, fiyatSutun As Integer
    Dim kdvSutun As Integer, giderSutun As Integer, kullanımSutun As Integer
    Dim tarihSutun As Integer
    Dim musteriHucresi As String, tarihHucresi As String
    Dim urunHucresi As String, faturaHucresi As String, tutarHucresi As String
    Dim paperSize As Integer ' Makroda değiştirilebilir: A5=11, A4=1, A3=8 vb.
   
    On Error GoTo HataYakala
   
    ' Sayfa boyutu ayarı (makroda değiştir: A5 için 11, A4 için 1, A3 için 8 vb.)
    paperSize = 11 ' A5 boyutu (değiştirilebilir)
   
    ' Sayfaları ata
    Set wsVeri = ThisWorkbook.Sheets("VERI")
    Set wsSab = ThisWorkbook.Sheets("SABLON")
   
    ' Veri sayfasındaki son satırı bul (A sütunu baz alınarak, başlık satırı 1 varsayımı)
    sonSatir = wsVeri.Cells(wsVeri.Rows.Count, "A").End(xlUp).Row
   
    ' Şablon başlangıç satırı
    sablonBaslangic = 1
   
    ' Her şablon bloğunun yüksekliği (görüntüye göre ~21 satır, değiştirilebilir)
    blokYuksekligi = 21 ' A5 için blok yüksekliği, makroda değiştir
   
    ' Sütun genişlikleri (A'dan I'ya kadar, makroda her birini değiştirilebilir)
    Dim AGenislik As Single: AGenislik = 8 ' A sütunu genişliği (etiketler için)
    Dim BGenislik As Single: BGenislik = 25 ' B sütunu (veri için)
    Dim CGenislik As Single: CGenislik = 12 ' C sütunu (barkod veya ek veri için)
    Dim DGenislik As Single: DGenislik = 15 ' D sütunu (sipariş no için)
    Dim EGenislik As Single: EGenislik = 14 ' E sütunu (fatura no için)
    Dim FGenislik As Single: FGenislik = 12 ' F sütunu (tutar için)
    Dim GGenislik As Single: GGenislik = 10 ' G sütunu (KDV için)
    Dim HGenislik As Single: HGenislik = 11 ' H sütunu (gider için)
    Dim IGenislik As Single: IGenislik = 15 ' I sütunu (tarih için)
   
    ' VERI sütun numaraları (makroda değiştirilebilir)
    musteriSutun = 1 ' A: Müşteri
    urunSutun = 2 ' B: Ürün
    barkodSutun = 3 ' C: Barkod (kullanılmayabilir)
    siparisSutun = 4 ' D: Sipariş No
    faturaSutun = 5 ' E: Fatura No
    fiyatSutun = 6 ' F: Fiyat (tutar için kullanılabilir)
    kdvSutun = 7 ' G: KDV
    giderSutun = 8 ' H: Gider
    kullanımSutun = 9 ' I: Kullanım
    tarihSutun = 9 ' I: Pusula Tarihi (Düzeltme: J yerine I sütunu için 9 olarak değiştirildi)
   
    ' SABLON hücre pozisyonları (veri için, makroda değiştirilebilir)
    musteriHucresi = "B3" ' Müşteri verisi (A3 etiketi yanında)
    tarihHucresi = "I2" ' Tarih verisi (H2 etiketi yanında)
    urunHucresi = "B10" ' Ürün verisi
    faturaHucresi = "B11" ' Fatura No verisi
    tutarHucresi = "I19" ' Tutar verisi (H19 etiketi yanında)
   
    ' Mevcut şablon sayfasını temizle
    wsSab.Cells.Clear
   
    kayitSayisi = 0
   
    ' Her veri satırı için döngü (başlık satırını atla, 2'den başla)
    For i = 2 To sonSatir
        ' Filtrelenmiş satırları kontrol et: Sadece görünen satırları işle
        If wsVeri.Rows(i).Hidden = False Then
            ' Sabit etiketleri yaz (her blok için)
            wsSab.Range("A3").Offset(kayitSayisi * blokYuksekligi, 0).Value = "Müşteri Bilgileri:"
            wsSab.Range("A10").Offset(kayitSayisi * blokYuksekligi, 0).Value = "Ürün:"
            wsSab.Range("A11").Offset(kayitSayisi * blokYuksekligi, 0).Value = "Fatura No"
            wsSab.Range("H2").Offset(kayitSayisi * blokYuksekligi, 0).Value = "Tarih"
            wsSab.Range("H19").Offset(kayitSayisi * blokYuksekligi, 0).Value = "Tutar"
           
            ' Sayfa boyutu ölçüsünü yaz (her bloğun altına, A21'e)
            Dim sayfaOlcu As String
            If paperSize = 11 Then
                sayfaOlcu = "A5 Boyut: 14.8 x 21 cm"
            ElseIf paperSize = 1 Then
                sayfaOlcu = "A4 Boyut: 21 x 29.7 cm"
            ElseIf paperSize = 8 Then
                sayfaOlcu = "A3 Boyut: 29.7 x 42 cm"
            Else
                sayfaOlcu = "Özel Boyut"
            End If
            wsSab.Range("A21").Offset(kayitSayisi * blokYuksekligi, 0).Value = sayfaOlcu
           
            ' Veri doldurma: Sütunlara göre
            ' Müşteri
            wsSab.Range(musteriHucresi).Offset(kayitSayisi * blokYuksekligi, 0).Value = wsVeri.Cells(i, musteriSutun).Value
           
            ' Tarih (Pusula Tarihi) - Artık I sütunundan (satır i) doğru şekilde çekiliyor
            wsSab.Range(tarihHucresi).Offset(kayitSayisi * blokYuksekligi, 0).Value = wsVeri.Cells(i, tarihSutun).Value
            wsSab.Range(tarihHucresi).Offset(kayitSayisi * blokYuksekligi, 0).NumberFormat = "dd.mm.yyyy" ' Tarih formatı
           
            ' Ürün
            wsSab.Range(urunHucresi).Offset(kayitSayisi * blokYuksekligi, 0).Value = wsVeri.Cells(i, urunSutun).Value
            ' Eğer barkod eklemek istersen: wsSab.Range("B12").Offset(...).Value = wsVeri.Cells(i, barkodSutun).Value
           
            ' Fatura No
            wsSab.Range(faturaHucresi).Offset(kayitSayisi * blokYuksekligi, 0).Value = wsVeri.Cells(i, faturaSutun).Value
           
            ' Tutar (Fiyat sütunundan)
            wsSab.Range(tutarHucresi).Offset(kayitSayisi * blokYuksekligi, 0).Value = wsVeri.Cells(i, fiyatSutun).Value
            wsSab.Range(tutarHucresi).Offset(kayitSayisi * blokYuksekligi, 0).NumberFormat = "#,##0.00" ' Para formatı
           
            ' Diğer sütunlar (örneğin KDV, Gider eklemek istersen buraya ekle)
            ' wsSab.Range("B13").Offset(...).Value = wsVeri.Cells(i, kdvSutun).Value
           
            ' Kayıt sayısını artır
            kayitSayisi = kayitSayisi + 1
        End If
    Next i
   
    ' Sütun genişliklerini ayarla (A'dan I'ya kadar, A5 için optimize)
    wsSab.Columns("A").ColumnWidth = AGenislik
    wsSab.Columns("B").ColumnWidth = BGenislik
    wsSab.Columns("C").ColumnWidth = CGenislik
    wsSab.Columns("D").ColumnWidth = DGenislik
    wsSab.Columns("E").ColumnWidth = EGenislik
    wsSab.Columns("F").ColumnWidth = FGenislik
    wsSab.Columns("G").ColumnWidth = GGenislik
    wsSab.Columns("H").ColumnWidth = HGenislik
    wsSab.Columns("I").ColumnWidth = IGenislik
    ' J sütunu için: wsSab.Columns("J").AutoFit ' Otomatik ayarla (gerekirse ekle)
   
    ' Sayfa boyutunu makroda belirlenen değere ayarla
    With wsSab.PageSetup
        .PaperSize = paperSize ' Makroda değiştirilen değer (A5=11 vb.)
        .Orientation = xlPortrait
        .FitToPagesWide = 1
        .FitToPagesTall = kayitSayisi ' Her blok A5 yüksekliğinde, toplam sayfaya sığdır (veya False için uzun sayfa)
        .PrintArea = wsSab.Range("A1").Resize(kayitSayisi * blokYuksekligi + 1, 10).Address ' Ölçü satırı dahil +1 satır
        .LeftMargin = Application.InchesToPoints(0.2)
        .RightMargin = Application.InchesToPoints(0.2)
        .TopMargin = Application.InchesToPoints(0.4)
        .BottomMargin = Application.InchesToPoints(0.4)
        .HeaderMargin = Application.InchesToPoints(0.3)
        .FooterMargin = Application.InchesToPoints(0.3)
    End With
   
    Application.CutCopyMode = False
    MsgBox "Veriler SABLON'a aktarıldı! Sayfa boyutu: " & sayfaOlcu & ". Her satır için 1 blok. Toplam " & kayitSayisi & " kayıt."
    Exit Sub
   
HataYakala:
    MsgBox "Hata: " & Err.Description
End Sub