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

Doorkopiëren met macro op ander werkblad

Status
Niet open voor verdere reacties.

marcelwi

Gebruiker
Lid geworden
18 jan 2010
Berichten
47
Hallo,

Ik ben geen expert, dus word asjeblieft niet te technisch. Mijn probleem is het volgende; ik heb op werkblad 2 een knop gemaakt die een aantal bewerkingen gaat uitvoeren zodra je erop klikt. Dat zijn zowel bewerkingen op datzelfde werkblad alsook op werkblad 1. Op zich gaat dat allemaal prima. Nu zou ik ook graag willen dat er op werkblad 1 een aantal cellen naar beneden doorgekopieerd worden voorzover de naastgelegen cellen ingevuld zijn. Daartoe heb ik ergens anders op dit forum (http://www.helpmij.nl/forum/showthread.php?t=336487) dit gevonden:
Sub FormCopy1()
Range("b1").Copy 'b bevat te copieren formules
Range("b2", "b" & UsedRange.Rows.Count).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Cells(1, 1).Select
End Sub

Dat werkt wel maar alleen als ik het aan een knop plak op hetzelfde werkblad 1. Dan moet het in VBA ook nog op hetzelfde werkblad staan en niet op een module (daar staat alles van die knop op werkblad 2 wel). Maar ik zou het dus graag in VBA ergens tussen al die bewerkingen plakken die aan de knop op werkblad 2 hangen. Kan iemand me daarbij helpen?
 
Laatst bewerkt:
Juiste code:

Code:
Sub FormCopy1()
Sheets("Jouw sheet naam hier invullen").Range("b1").Copy 'b bevat te copieren formules
Sheets("Jouw sheet naam hier invullen").Range("b2", "b" & UsedRange.Rows.Count).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Jouw sheet naam hier invullen").Cells(1, 1).Select
End Sub

Jouw sheet naam hier invullen is dus bijvoorbeeld Blad1
 
Hartelijk dank voor je antwoord. Inderdaad werkt 't zo wel, maar nog niet hélemaal zoals ik wil. Ik heb jouw code onder een aparte knop op 2e tabblad gezet en inderdaad werkt die dan zo ook wel op het 1e tabblad.
Echter, op het 2e tabblad staat ook die knop die al die andere bewerkingen uitvoert. Ik zou jouw code graag daar ergens tussen plakken zodat alles met één druk op de knop geregeld is. Maar; in VBA zie ik bij dit "project" een map met Microsoft excel-projecten waaronder de tabbladen hangen en ik zie een map met een "Module".
De knop waaronder ik jouw code heb gehangen werkt alleen maar als die code op het tabblad in die map Microsoft excel-projecten en niet als die bij de "Module" staat. Alle bewerkingen die onder de al bestaande knop vielen staan wél onder "Module" en die werken weer niet als ik het kopieer naar die map Microsoft excel-projecten.
Wat is nou het verschil tussen die 2 mappen en hoe kan ik het hele zaakje nu combineren?

B.v.d.
 
Laatst bewerkt:
De simpelste oplossing ==> plaats een voorbeeldbestandje met fictieve gegevens en je reeds bestaande code.
Code:
Sub tst()
With Sheets("Blad1")
    Range("B1:B" & .UsedRange.Rows.Count).FillDown
End With
End Sub
 
Laatst bewerkt:
Ik wilde zo'n voorbeeldbestandje plaatsen maar ik krijg 't niet kleiner dan 542Kb en blijkbaar mag 't maar maximaal 100Kb zijn.
 
Marcelwi

Met Zippen moet dat toch wel onder de 100 Kb te krijgen zijn.:)
 
tja, zoals in m'n 1e zin al staat; ik ben geen expert. Ga 't zo proberen
 
Inderdaad, gezipt lijkt 't wel te lukken.

bijgaand voorbeeldbestandje.
Gebruiker moet wat gegevens plakken vanuit SAP.
Drukken vervolgens op knop 1 waardoor voorzover nodig een aantal getallen geconverteerd worden naar getal en het automatisch berekenen wordt uitgezet (gegevens kunnen zomaar duizenden regels zijn dus dan duurt de volgende stap telkens zo lang).
Moeten dan zelf op beide tabbladen formules naar beneden kopiëren.
Drukken dan op 2e knop waardoor de ean-codes in 1e tabblad worden omgezet naar streepjescodes, 1e tabblad wordt opgemaakt en beveiligd (op 1 cel na), 2e tabblad verborgen en automatisch berekenen weer aangezet.
Eindgebruiker krijgt bij het invullen van klantnummer in 1e tabblad de bijbehorende (voorraad-)gegevens te zien.
Wat ik graag zou willen is dat ook dat doorkopiëren met die 1e knop zou gebeuren zodat men alleen nog maar de gegevens hoeft in te plakken en daarna kan volstaan met het indrukken van maar één knop waarna het bestand klaar is voor eindgebruik.
Het doorkopiëren lukt dus wel met die aparte knop op 2e tabblad maar zodra ik die code plak in de code van die 1e/2e knop krijg ik foutmeldingen.

Overigens constateer ik bij dat dookopiëren nóg een probleempje; het doorkopiëren gebeurt niet over hetzelfde aantal regels als wat ingevuld is in de naastgelegen kolom. In bijgaand bestand zou dus op 1e tabblad eigenlijk 28 en in het 2e tabblad resp. 53 en 271 regels doorgekopieerd moeten worden, maar in alledrie de gevallen worden er maar liefst10153 regels doorgekopieerd. Zou op zich ook niet zo'n ramp hoeven te zijn ware het niet dat daardoor het bestand onnodig groot wordt en ik er rekening mee dien te houden dat op ons intranet geen bestanden groter dan 8MB gepubliceerd kunnen worden.
 

Bijlagen

  • Telling_template_test.zip
    96 KB · Weergaven: 75
Macel,

Je noemt jezelf geen expert maar je waagt je wel aan complexe macro codes????????

Jouw code is zo ontzettend traag omdat overal select is toegepast.
Importeren, kopieren, verbergen, locken, unlocken, etc, is allemaal met 1 knop te maken.
Eerdere suggesties gedaan op het forum heb je niet in je code opgenomen.

Je weet waar je aan begint?
 
"superzeeuw",

Ben echt geen expert, de complexe zaken zoals het converteren naar die streepjescodes heb ik van iemand anders gehad. Ik kan zelf geen macro's maken maar dan neem ik ze gewoon op en plak dat vervolgens tussen de rest. Of ik struin internet af naar oplossingen Meestal heb ik dan wel de mazzel dat 't werkt.
Wat bedoel je met dat ik eerdere suggesties niet heb opgenomen? Die van jou van gisteren heb ik toch wel gebruikt?
Heb wellicht inderdaad geen idee waar ik aan begin, maar ik vind 't wel een leuke puzzel en ik leer er toch weer telkens van. Lukt 't niet dan heb ik gewoon pech, maar ik heb veel geduld en doorzettingsvermogen.....:)
 
Marcel,

Even snel de code aangepast om hem sneller te kunnen laten werken.

Controleer het bestand eens als je wilt of het allemaal nog goed werkt.

Nader onderzoek leerde mij dat je mijn suggesties wel had toegepast, sorry voor het kort door de bocht werk.
 

Bijlagen

  • Telling_template_test.zip
    87 KB · Weergaven: 45
Laatst bewerkt:
Marcel,

Doorzettingsvermogen daar hou ik van, kom je het verste mee in het leven.

Ik heb een paar kleine aanpassingen gemaakt hierbij de herziene versie.

Leg mij tevens nog eens uit wat knop 1 nou precies doet want dat kan ik niet volgen.
 

Bijlagen

  • Telling_template_test.zip
    89,1 KB · Weergaven: 58
Knop 1 lijkt 't nog steeds hetzelfde te doen, bij het indrukken van knop 2 krijg ik eerst een meding (zie bijlage) dat End With wordt verwacht. Neem aan dat ik dus End sub moest weghalen. Dat deed ik maar toen kreeg ik een melding over een compileerfout en daar schoot mijn kennis dan toch weer tekort.
 

Bijlagen

  • melding.jpg
    melding.jpg
    33,5 KB · Weergaven: 83
In je 2e voorbeeldbestandje werkt knop 1 nog hetzelfde, de knop doorvoeren doet 't wel (in je 1e bestandje niet) maar kopieert in het 2e tabblad alleen maar in kolommen A en G tot regel 28 (=aantal regels op 1e tabblad) door.
Bij indrukken knop 2 krijg ik melding "Typefout in barcode".
 
Marcel,

Knop 1 werkt idd nog niet anders omdat ik eerst wil weten wat de macro precies uitvoert.

Ik heb enkel jouw code sneller gemaakt maar zozeer nog niet gebogen over de correcte werking daar kunnen we nu aan gaan werken.

Code doorkopieren moet zijn:

Code:
Sub FormCopy1()
    Application.ScreenUpdating = False
    Sheets("Lijst").Range("e3:m3").Copy 'e  bevat te copieren formules
    Sheets("Lijst").Range("e4", "m" & Sheets("Lijst").UsedRange.Rows.Count).PasteSpecial Paste:=xlPasteFormulas
    Sheets("Gegevens").Range("a2").Copy 'e  bevat te copieren formules
    Sheets("Gegevens").Range("a3", "a" & Sheets("Gegevens").UsedRange.Rows.Count).PasteSpecial Paste:=xlPasteFormulas
    Sheets("Gegevens").Range("g2").Copy 'e  bevat te copieren formules
    Sheets("Gegevens").Range("g3", "g" & Sheets("Gegevens").UsedRange.Rows.Count).PasteSpecial Paste:=xlPasteFormulas
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
 
Laatst bewerkt:
Je vroeg nog wat knop 1 nou precies deed:
de gegevens die in deze excel geplakt moeten worden komen uit een exportbestandje van SAP. Dat heeft de onhebbelijke gewoonte om niet als getal naar excel te exporteren. Wat die knop doet is dus de kolommen die ik als getal nodig heb converteren naar getal. Daarna schakelt die knop de functie automatisch berekenen uit om tijd te sparen in de stappen erna; zoals gezegd kunnen sommige kolommen wel eens 25000 regels bevatten en als excel dan iedere keer eerst gaat rekenen voordat je klaar bent dan is dat irritant. Berekenen hoeft pas aan het eind als je klaar bent en het aanzetten van die functie is de laatste stap van knop 2.
 
Marcel,

Lees mijn vorige punt nog eens door voor een code aanpassing voor doorkopieren.

Volgens mij kan knop 1 sneller werken maar dan moet je even een voorbeeld bestandje sturen met dat uit de SAP omgeving.
 
In bijlage de export uit SAP naar excel. Uit 3 verschillende SAP-transacties komen de groepjes van 4 kolommen. 1e 4 zijn voorraden per artikel per winkel, in 2e setje kolommen staat aan welke winkels die artikelen gekoppeld zijn en laatste setje van 4 kolommen zijn de artikelen waar het om gaat.
V.w.b. je vorige punt met gewijzigde code voor doorkopiëren; die werkt wel en in tabblad 1 worden ook keurig alleen maar 28 regels doorgekopieerd, maar in 2e tabblad doet-ie er toch weer om de een of andere reden 10512 regels.

NB; voel me wel een beetje schuldig dat ik je zo bezig hou; als 't je teveel tijd kost gewoon stoppen hoor!:thumb:
 
Laatst bewerkt:
Probeer maar eens Ctrl-End en zie waar je uitkomt.
Gebruik onderstaande ipv UsedRange
Code:
With Sheets("Gegevens")
    .Range("A2:A" & .Cells(Rows.Count, 2).End(xlUp).Row).FillDown
    .Range("G2:G" & .Cells(Rows.Count, 8).End(xlUp).Row).FillDown
End With
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan