kopieren rij naar ander tabblad

Status
Niet open voor verdere reacties.

leonhnoel

Gebruiker
Lid geworden
4 mei 2016
Berichten
58
Hi,

ik heb een bestand waarin voorraad wordt bijgehouden. Nu wil ik graag dat het gelogd wordt als er voorraad gebruikt.

Dit zou op een apart tabblad (met de volgende naam: "usage wk[weeknummer]") moeten worden weergegeven .

Ik zou graag:

  1. voor iedere rij een knop of link willen hebben zodat als je daar op drukt de hele rij gekopieerd wordt
  2. gecheckt wordt of er een tabblad bestaat met het huidige weeknummer
  3. deze aangemaakt wordt als dat niet het geval is
  4. de gegevens op het klembord vervolgens geplakt wordt in het juiste tabblad

Wat voor een link of knop kan ik gebruiken en hoe laat ik de macro checken om welke rij het gaat waar op geklikt is?
Hoe check ik of het tabblad van de huidige week bestaat?
 

Bijlagen

Het voor mij niet duidelijk wat er moet gebeuren, beschrijf duidelijke uitleg in je voorbeeld bestand
 
Kan je aangeven wat je niet begrijpt? Dan kan ik dat proberen beter uit te leggen.

Als goederen binnenkomen worden deze fysiek op een locatie neergezet. In dit bestand moeten vervolgens kolommen D, E, G en optioneel H door een medewerker ingevuld worden.
Zodra deze goederen verbruikt worden moet deze regel worden gekopieerd naar een ander tabblad en vervolgens de desbetreffende regel weer leeggemaakt (aangezien het niet meer op voorraad is).

Voor iedere week moet een apart tabblad zijn. Dus als er deze week goederen verbruikt worden moet de regel verplaatst worden naar tabblad "usage wk42".
Worden er volgende week weer goederen verbruikt dan moet de regel verplaatst naar een nieuw tabblad genaamd "usage wk43".
 
Over het verplaatsen van gegevens met bv een dubbelklik is voldoende te vinden en ook niet zo moeilijk. Maar waarom wil je alles in losse tabjes hebben? Je kan toch net zo goed een kolom extra gebruiken en daar de datum of het weeknummer in zetten? En wat als je op maandag de gegevens van de vrijdag ervoor gaat verwerken? Dan komen ze in de verkeerde week.
 
Ok. ik heb wel gezocht maar vond vooral oplossingen met worksheetchange etc. Ik ben op zoek naar een visuele knop of iets dergelijks waar door de desbetreffende persoon op gedrukt kan worden.

En ik zou het op losse tabjes willen hebben omdat er op basis van deze wekelijkse data inkooporders gemaakt dienen te worden. Door het op losse tabjes te zetten is het goed gescheiden.
 
Dit heb ik nu gemaakt, heeft iemand nog suggesties of tips?

Code:
Private Sub Worksheet_beforedoubleclick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

Dim LastRow As Long
Dim WKnumber

If Not Intersect(Target, Range("A:A")) Is Nothing Then
    
    WKnumber = WorksheetFunction.WeekNum(Now, vbMonday)
           
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "Usage WK" & WKnumber Then
            exists = True
        End If
    Next i

    If Not exists Then
        Worksheets.Add.Name = "Usage WK" & WKnumber
        With Sheets("Usage WK" & WKnumber)
            .Range("B2") = "Gang"
            .Range("C2") = "Locatie"
            .Range("D2") = "Type"
            .Range("E2") = "Item nr"
            .Range("F2") = "Omschrijving"
            .Range("G2") = "Saldo"
            .Range("H2") = "Opmerking"
            
            With .Range("B2:H2")
                .Interior.Color = 2952910
                .Font.FontStyle = "Bold"
                .Font.ColorIndex = 2
            End With
            
        End With
      
        Worksheets("sheet1").Select
        MsgBox "Tabblad aangemaakt en data gekopieërd!"
    Else: MsgBox "Data gekopieërd!"
    
    End If
    
    LastRow = Sheets("Usage WK" & WKnumber).Cells.SpecialCells(xlCellTypeLastCell).Row
            
    Range("B" & Target.Row & ":H" & Target.Row).Copy Sheets("Usage WK" & WKnumber).Range("B" & LastRow + 1 & ":H" & LastRow + 1)
    Range("D" & Target.Row & ":E" & Target.Row).Clear
    Range("G" & Target.Row & ":H" & Target.Row).Clear
        
End If

End Sub
 
Dit is wat je schreef

Als goederen binnenkomen worden deze fysiek op een locatie neergezet. In dit bestand moeten vervolgens kolommen D, E, G en optioneel H door een medewerker ingevuld worden.
Zodra deze goederen verbruikt worden moet deze regel worden gekopieerd naar een ander tabblad en vervolgens de desbetreffende regel weer leeggemaakt.

mijn vraag: vanaf wanneer mag deze overzet gebeuren, de macro doet alles naar u vraag, maar als saldo =20 en ik druk per ongeluk dubbelklik is alles omgezet
 
hi,

het overzetten gebeurd alleen bij een dubbelklik in kolom A. De kans dat dit per ongeluk gebeurd lijkt me niet zo groot.
De kans dat er dubbelgeklikt wordt op de verkeerde rij is groter, maar geen idee hoe ik een check hiervoor kan inbouwen.
 
Ja dat bedoel ik juist, maar vanaf welk moment moet dit mogelijk zijn
 
Het invullen van het eerste blad gebeurd wanneer een vrachtwagen gelost en ontvangen wordt.

Het overzetten gebeurd gaandeweg de week, op een ander moment dus, direct wanneer er een pallet verplaatst wordt.
 
Het lijkt op een soort voorraadbeheer maar is het dan net niet. Met deze opzet gaat het leuk worden als je een jaaroverzicht moet maken. De code kan wat eenvoudiger en met een controle dat de verplichte velden ingevuld moeten zijn.

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  With Target
    If .Column = 1 And .Row > 2 Then
      If Application.CountA(.Offset(, 3).Resize(, 4)) = 4 Then
        c00 = "Usage WK" & DatePart("ww", Date, 2, 2)
        If IsError(Evaluate("'" & c00 & "'!A1")) Then
          Sheets.Add(, Sheets(1)).Name = c00
          With Sheets(c00).Range("B2:H2")
            .Value = Split("Gang Locatie Type Itemnr Omschrijving Saldo Opmerkingen")
            .Interior.Color = 2952910
            .Font.FontStyle = "Bold"
            .Font.ColorIndex = 2
          End With
          Application.Goto Target
        End If
        .Offset(, 1).Resize(, 7).Copy Sheets(c00).Cells(Rows.Count, 2).End(xlUp).Offset(1)
        .Offset(, 3).Resize(, 5).SpecialCells(2).ClearContents
        Sheets(c00).Columns.AutoFit
       Else
        MsgBox "vul eerst alle gegevens in"
      End If
    End If
  End With
End Sub
 
Dank VenA voor het beoordelen van de code.

Kan je uitleggen wat hier gebeurd:

Code:
If Application.CountA(.Offset(, 3).Resize(, 4)) = 4 Then

en hier:

Code:
.Offset(, 3).Resize(, 5).SpecialCells(2).ClearContents

Dank!
 
Is allemaal in de help te vinden.

Offset is verschuiven. Resize is vergroten/verkleinen van een bereik. Application.CountA is tellen van gevulde cellen. Specialcells zijn speciale cellen.

In het eerste geval: als vanaf kolom A + 3 = kolom D +4 kolommen uitbreiden = bereik D:G alle cellen ingevuld zijn dan

In het tweede geval: maak alle cellen vanaf kolom A+3 + 5 kolommen uitbreiden = bereik D:H die constanten (specialcells(2)) bevatten leeg. Hiermee blijft de formule staan.

Zowel @JeanPaul28 als ik hebben vragen bij deze opzet dus waarom je dit met alle nadelen blijft doorzetten zal wel een reden hebben.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan