• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Rij kopieren op voorwaarde (VBA)

Status
Niet open voor verdere reacties.

gvanwijk

Gebruiker
Lid geworden
3 mei 2018
Berichten
182
Ik wil graag een rij kopieren:
1. op een voorwaarde (zie bijlage)
2. naar de 1e vrije regel
3. van een ander tabblad

Zie voorbeeld. Welke VBA werkt hiervoor?
 

Bijlagen

  • Vraag kopieren.xlsx
    12,4 KB · Weergaven: 27
Ik zou liever gebruik maken van een draaitabel
 

Bijlagen

  • Vraag kopieren vs draaitabel.xlsm
    22,3 KB · Weergaven: 28
@ VenA
1.Bij die code wordt de volledige regel verplaatst, niet gekopieerd -> Hoe moet code aangepast worden (vervangen delete -> copy werkt niet)
2. Dat keuzescherm (userform) tussendoor kan vervallen -> welk deel kan weg? Alleen " UserForm1.Show" weghalen dan werkt code niet meer

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  If Not Intersect(Target, Sh.ListObjects(1).DataBodyRange.Columns(18)) Is Nothing And Target.Count = 1 Then
    Application.EnableEvents = False
    If LCase(Target) = "x" Then
      With Sh.ListObjects(1)
        ar = Sh.Cells(Target.Row, .Range.Cells(1).Column).Resize(, 18).Value
        UserForm1.Show
        .ListRows(Target.Row - .Range.Cells(1).Row).Delete
      End With
    End If
    Application.EnableEvents = True
  End If
End Sub
 
Als je geen tabellen gebruikt kan dit ook.
 

Bijlagen

  • Vraag kopieren (1).xlsm
    18,9 KB · Weergaven: 34
Yesss :thumb: Dat is precies de oplossing voor de vraag die ik stelde! Fijn, bedankt Emields!
 
Met tabellen
 

Bijlagen

  • Vraag kopieren .xlsb
    18,7 KB · Weergaven: 29
Zonder overbodige variabelen en onafhankelijk waar op het werkblad de tabel staat.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  With ListObjects(1)
    If Not Intersect(Target, .ListColumns(9).DataBodyRange) Is Nothing And Target.Count = 1 Then
      Application.EnableEvents = False
      If Target = "Betaald via kas" Then
        Sheets("Kasboek").ListObjects(1).ListRows.Add.Range.Resize(, 8) = Cells(Target.Row, .Range.Cells(1).Column).Resize(, 8).Value
        .ListRows(Target.Row - .Range.Cells(1).Row).Delete
      End If
      Application.EnableEvents = True
    End If
  End With
End Sub
 
verwijder de volgende regel uit de code van VenA, die regel is bedoeld om in de "oude" lijst de gegevens te verwijderen en ik den dat ze moeten blijven staan.

Code:
.ListRows(Target.Row - .Range.Cells(1).Row).Delete
 
Zoveel mogelijk in de materie van het listobject geschreven.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  With ListObjects(1)
    If Not Intersect(Target, .DataBodyRange.Columns(9)) Is Nothing And Target.Count = 1 Then
      Application.EnableEvents = False
      If Target = "Betaald via kas" Then
        Sheets("Kasboek").ListObjects(1).ListRows.Add.Range.Resize(, 8) = .ListRows(Target.Row - .HeaderRowRange.Row).Range.Value
       .ListRows(Target.Row - .HeaderRowRange.Row).Delete
      End If
      Application.EnableEvents = True
    End If
  End With
End Sub

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  With ListObjects(1)
    If Not Intersect(Target, .DataBodyRange.Columns(9)) Is Nothing And Target.Count = 1 Then
      Application.EnableEvents = False
      If Target = "Betaald via kas" Then
        with .ListRows(Target.Row - .HeaderRowRange.Row)
           Sheets("Kasboek").ListObjects(1).ListRows.Add.Range.Resize(, 8) = .Range.Value
           .Delete
        end with
      End If
      Application.EnableEvents = True
    End If
  End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan