• 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.

Een bereik kopieren en als waarden plakken met VBA

Status
Niet open voor verdere reacties.

ewaldmauritz

Gebruiker
Lid geworden
19 okt 2011
Berichten
87
Ik ben bezig met het maken van een urenplanning. Deze is bijna klaar, maar er zijn nog twee onopgeloste vragen. De eerste stel ik in dit topic. De volgende vraag open ik binnenkort een ander topic voor.

Mijn planning bestaat uit een tabblad 'Planning' waar de uren vooraf worden ingepland. En een ander tabblad waar de werkelijk gemaakt uren worden bijgehouden. Nu zou ik graag willen de dat werkelijk gemaakte uren middels een VBA knop overgezet kunnen worden naar het tabblad met de vooraf ingevulde planning.
Hiervoor laat ik de werkelijk gemaakte uren van een betreffende week middels horizontaal.zoeken overzetten naar het tabblad planning. Nu zou ik deze waarden graag willen kopieren en plakken (als waarden) in de planning bij de desbetreffende week.

Ik stel me het als volgt voor:
Er staat op het werkblad een knop met de naam 'Uren kopieren'. Druk ik op de knop dan worden de waarden van de (middels horizontaal.zoeken bepaalde) uren gekopieerd. Dit is cel BI12:BI134. Daarna zou er een Msgbox moeten komen met bv. de tekst: Selecteer een cel in de kolom van het weeknummer waarvan je de uren wilt kopieren. Als de gebruiker dat heeft gedaan, dan moet de inhoud van cel BI12:BI134 als waarden geplakt worden in de kolom waar de gebruiker de cel heeft gekopieerd. Het plakken moeten dan wel automatisch gebeuren van rij 12 tot 134 in de betreffende kolom.
Kort gezegd: ik wil met VBA cel BI12:BI134 kopieren en plakken in een door de gebruiker aangegeven kolom. Het plakken moet in rij 12 t/m 134 en alleen de waarden moeten worden geplakt.

Ik hoop dat het duidelijk is. Kan iemand mij hierbij helpen?
 
Voorbeeldbestand vergeten?
 
Nee hoor. Niet vergeten. Ik had de hoop dat het duidelijk zou zijn. Maar ik kan me voorstellen dat het zonder voorbeeldbestand moeilijk te vatten is wat mijn bedoeling is.
Dit is het vereenvoudigde bestand:
https://www.wetransfer.com/download...b2e3418a3736298658a950ee20141114100806/a4718e

In cel J8 kan de gebruiker een weeknummer kiezen. In dit bestand kan dat week 1-4 zijn. In cel J12 t/m J134 worden dan mbv VERT.ZOEKEN de uren overgenomen uit het tabblad 'Uren per dag'.
Als de gebruiker op de knop Uren kopieren klikt dan zouden de waarden uit J12 t/m J134 gekopieerd moeten worden naar de kolom met het corresponderende weeknummer. In dit geval kan dat kolom c, D, E of F zijn.
Stel de gebruiker kiest voor weeknummer 2 in cel J8. Daarna klikt hij op de knop. Cel J12 t/m J134 moeten dan worden gekopieerd naar D12 t/m D134 (als waarden, dus zonder opmaak e.d.)

In cel B11 bevindt zich een filter. Met dit filter kunnen de lege regels in de planning (rij 12 t/m 134) worden verborgen. Bovenstaande vraag zou ook moeten werken als dit filter is ingeschakeld (dus als er rijen zijn verborgen).

Ik hoop dat het zo wel voldoende duidelijk is.
 
Plaats een voorbeeldbestand svp in dit forum (het is ervoor gemaakt).
Elders worden bestanden na enige tijd verwijderd en is deze draad onbegrijpelijk geworden voor anderen.
 
Eerlijk gezegd wilde ik dat ook doen, maar ik weet niet hoe dat werkt.
Ik zag onderaan wel een knop 'bijlagen beheren', maar daar kan ik enkel bestanden tot 100 kB uploaden (.xlsm). Dat is te weinig.
Is er een andere manier om bestanden aan een bericht toe te voegen?
 
Doet deze macro wat je wil?
Code:
Sub Urenplakken()
 Range("J12:J134").Copy
  Range("D12").PasteSpecial Paste:=xlPasteValues
   Range("A11:B11").AutoFilter
    ActiveSheet.Range("$A$11:$B$140").AutoFilter Field:=2, Criteria1:="<>"
     Range("A11:B11").AutoFilter
End Sub
 
Bijna. Alleen worden de waarden nu altijd naar kolom D gekopieerd. De waarden moeten gekopieerd worden naar de kolom die overeenkomt met de week die is gekozen. Kiest de gebruiker week 1, dan moeten de waarden naar kolom C worden gekopieerd. Kiest de gebruiker week 2, dan naar kolom D, week 3 naar kolom E, etc. De weeknummers staan in C8 t/m F8. In het uiteindelijke bestand kunnen de weken uiteraard doorlopen tot week 53.

PS: ik zie nu dat ik in eerdere posts heb gezegd dat de gebruiker een week kan kiezen in cel J8. Dat moet cel J7 zijn. Excuus.
 
Laatst bewerkt:
Wilde net de aanpassing posten
Code:
Sub Urenplakken()
 Range("J12:J134").Copy
 kolom = InputBox("welke kolom?", "Kolom")
  Cells(12, kolom).PasteSpecial Paste:=xlPasteValues
   Range("A11:B11").AutoFilter
    ActiveSheet.Range("$A$11:$B$140").AutoFilter Field:=2, Criteria1:="<>"
     Range("A11:B11").AutoFilter
End Sub
 
Dank Cobbe. Het werkt.
Is het echter ook mogelijk dat de kolom waar de waarden in moeten worden geplakt door Excel zelf te laten bepalen aan de hand van de weeknummers in C8 t/m F8? Nu moet men eerst zelf het juiste kolomnummer invoeren in de MsgBox. Het is wat gebruikersvriendelijker als Excel dat zelf doet.
Hopelijk kan je me hier nog mee helpen.
 
Dat kan zo:
Code:
Sub Urenplakken()
 Range("J12:J134").Copy
 [B][/B][COLOR="#FF0000"]WeekNum = WorksheetFunction.WeekNum(Date, 1)[/COLOR] 'kolom = InputBox("welke kolom?", "Kolom")
  Cells(12, WeekNum + 2).PasteSpecial Paste:=xlPasteValues
   Range("A11:B11").AutoFilter
    ActiveSheet.Range("$A$11:$B$140").AutoFilter Field:=2, Criteria1:="<>"
     Range("A11:B11").AutoFilter
End Sub

Maar deze plakt altijd in de kolom(week) van vandaag!!
Hoe anders kan je dat bepalen in welke week het moet geplakt worden?
 
Altijd plakken in het weeknummer van vandaag is inderdaad niet de bedoeling.
Ik zie het als volgt voor me:

1. Gebruiker voert in cel J7 een weeknummer in
2. Excel haalt de waarden behorend bij dat weeknummer uit het tabblad Uren per dag (cel J12 t/m J134). Dat werkt via vert.zoeken.
3. Gebruiker drukt op de knop Uren kopieren
Dan begint de VBA code:
4. Excel zoekt in C8 t/m F8 naar het weeknummer wat is ingevoerd in J8.
5. Excel vindt het weeknummer en registreert in welke kolom dat is.
6. Excel plakt de waarden uit J12 t/m J134 in die kolom.
 
Dan lukt het zeker zo:
Code:
Sub Urenplakken()
 Range("J12:J134").Copy
  Cells(12, [B][/B][COLOR="#FF0000"][J8][/COLOR] + 2).PasteSpecial Paste:=xlPasteValues
   Range("A11:B11").AutoFilter
    ActiveSheet.Range("$A$11:$B$140").AutoFilter Field:=2, Criteria1:="<>"
     Range("A11:B11").AutoFilter
End Sub
 
Sorry, maar het werkt nog niet helemaal correct. De waarden worden nu telkens in kolom B geplakt. Onafhankelijk van wat er in cel J7 wordt ingevoerd. Er gaat dus ergens nog iets niet goed.
 
In de code zie je toch (in het rood) [J8] staan, ik dacht toch echt wel dat het weeknummer ingegeven werd in J8.

Als dat niet zo is en het gaat over J7 wijzig dan in de code [J8] in [J7].
 
Haha, trap ik in mn eigen fout. Excuus.
Maar het werkt. Mijn dank is groot.

Kan iemand mij nog uitleggen hoe ik een bestand in het forum upload? Dan weet ik dat voor de volgende keer.
 
Gebruik een deel van je bestand als voorbeeldbestand. ZIP het zonodig. De rest staat hier in het forum zelf.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan