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

Nieuwe gegevens vanaf 1 werkblad verdelen over meerdere werkbladen

Status
Niet open voor verdere reacties.

nwametze

Gebruiker
Lid geworden
18 dec 2009
Berichten
67
Goedendag!

M'n collega is dagelijks een behoorlijke tijd bezig om een overzicht te maken van de uitstaande RMA-verzoeken. Hij haalt de data op bij de leverancier en voegt de nieuwe nummers handmatig toe aan de bijbehorende tabbladen. Ik heb al wel middels verticaal zoeken ervoor gezorgd dat de overige info dan automatisch toegevoegd wordt. Het zou natuurlijk mooi zijn als dit stukje handwerk (nieuwe nummers zoeken en toevoegen) nog verdwijnt, er is immers kans op fouten.

In het bijgevoegde voorbeeldbestand zijn in totaal 3 werkbladen aangemaakt:
- warranty
- r&o
- datadump

Het blad datadump overschrijven we dagelijks middels een dump uit het RMA-systeem van onze leverancier.
In deze dump kunnen 2 dingen gewijzigd zijn ten opzichte van de vorige versie:
- nieuwe RMA-nummers (1e kolom, de nieuwe staan niet alleen onderaan);
- bij bestaande RMA-nummers kunnen datums toegevoegd zijn.
De nieuwe RMA-nummers moeten toegevoegd worden aan het tabblad warranty (bij RMA-nummers beginnend met een 3) of r&O (bij RMA-nummers beginnend met 6). Daarnaast moeten de overige kolommen op deze 2 tabbladen geupdated worden indien er in de datadump datums zijn toegevoegd.

We kunnen deze tabbaden niet volledig overschrijven aangezien de laatste kolommen informatie bevatten die in dit werkblad handmatig toegevoegd zijn.

Zouden jullie me opweg kunnen helpen? Vermoed dat het in VBA gemaakt zal moeten worden, ik krijg het met verticaal zoeken in ieder geval niet voor elkaar.
Ik hoor het graag!
 

Bijlagen

Ik sprong net even een gat in de lucht, tot ik erachter kwam dat het hele blad gewist wordt en weer wordt gevuld met de nieuwe gegevens. Hierdoor worden eigen opmerkingen (in het voorbeeld op het blad warranty in de kolommen E, F en G bijvoorbeeld) gewist. Deze willen we graag behouden aangezien deze niet uit de datadum te halen zijn.
Is het mogelijk om het wissen achterwege te laten en in plaats daarvan overschrijven te gebruiken?

Wel super bedankt voor het meedenken natuurlijk! :)
 
Nog niet helemaal. Denk dat het ook aan mijn uitleg ligt, sorry.
Nieuwe poging:
Excel is ingericht zoals in het voorbeeld. Een tabblad R&O, een tabblad Warranty en een tabblad Datadump.
Ik download een datadump die ik elke keer op het tabblad datadump plak (data wordt nooit minder, dus voor het plakken het tabblad leeghalen is niet nodig).
Kolom A van de dump bevat 2 type nummers (ene begint met 300.... andere met 600...)
Eigenlijk moet dan de volgende actie uitgevoerd worden.
Check of het nummer in kolom A van de datadump voorkomt in kolom A van de tabbladen R&O of Warranty.
Is dit het geval dan de datumkolommen op de regel van dit nummer overschrijven (kan in de nieuwe dump data aan toegevoegd zijn), overige kolommen niet bewerken. In het originele bestand staan deze datumkolommen overigens om-en-om met data die handmatig ingevoerd is.
Is dit niet het geval dan het, in dit geval nieuwe, nummer onderaan toevoegen op het tabblad waar deze thuis hoort incl. de datumkolommen.
 
Laatst bewerkt:
Dag Leo,

ontzettend bedankt voor je reactie. De info wordt nu netjes verdeeld zonder dat er gewist wordt.
Om de code nog een klein beetje te bewerken (voorbeeldbestand kon ik net niet (95%) hetzelfde maken als werkelijke bestand) probeer ik de door jou gemaakte code te begrijpen.
Onderstaand wat ik tot nu toe eruit gehaald heb. Wellicht dat je me nog verder aan zou kunnen vullen? Denk dat als ik de code begrijp ik er ook een beetje mee kan spelen om zo maar te zeggen.

*************************************
 
Laatst bewerkt:
nwametze,

in deze wat info bij, waarschijnlijk voldoende anders roep je maar, wel graag de codetags gebruiken

mvg
Leo
 

Bijlagen

Dag Leo,

bedankt!
Het 1e deel van je code begrijp ik nu.
Het lukt me om deze aan te passen naar m'n eigen werkblad.

Wel nog even een vraag.
Nu voer je een check uit of een veld gevuld is, zo niet en er is info beschikbaar dan vul je hem.
Ik denk dat ik ook kan aangeven dat de info sowieso overgenomen moet worden, of het nu een leeg veld is of niet. Levert dit nog voor-/nadelen op? Ik denk dat het een regel code scheelt, maar wellicht dat ik nu te kort door de bocht ga.

Ik snap onderstaande stukje code niet helemaal, zou je deze toe kunnen/willen lichten?
[CPP]rma = 1
For at = 2 To lastrow
For at2 = 2 To lastrow3
If Cells(at, 1).Value > 599999999 And _
Cells(at, 1).Value <> Sheets("r&o").Cells(at2, 1).Value Then
rma = rma + 1
End If
Next at2

If rma = lastrow3 Then
lastrow3 = Sheets("r&o").Range("a" & Rows.Count).End(xlUp).Row
Sheets("r&o").Cells(lastrow3 + 1, 1).Resize(1, 3).Value = Sheets("Datadump").Range("a" & at, "c" & at).Value
End If
rma = 1
Next at
Cancel = True[/CPP]
Als ik het goed lees gebeurt het volgende:
je geeft ‘rma’ de waarde 1
je geeft ‘at’ de waarde regel 2 tot laatste regel (aantal regels)
je geeft ‘at2’ de waarde regel 2 tot laatste regel (aantal regels)
je stelt dat als de waarde in de cellen van kolom 1 groter is dan 599999999
en
deze waarde niet terug te vinden is op de sheet r&o in kolom 1 met het bereik at2
dan wordt de waarde van rma ingesteld als rma + 1
end if sluit bovenstaande af (waarde rma + 1 wordt onthouden)

next at2 (dit snap ik niet)

als rma hetzelfde is als lastrow3
(volgens mij kan rma gezien het vorige deel van de code 1 of 2 zijn)
dan krijgt lastrow3 de waarde van het aantal regels in kolom A van sheet r&o
en hierna ben ik echt de weg kwijt
 
nwametze

in deze iets meer uitleg, en met het nog eens te overlopen zo achteraf, er kan ingekort
worden. De rma in code wordt gebruikt als teller en als teller gelijk komt met laatste lijn dan is er iets
gevonden om bij te voegen op warranty of r&o.

mvg

Leo
 

Bijlagen

Top!
Bedankt voor je aanvulling.
Ik heb nu nog 1 deel van de code die me niet helemaal duidelijk is (regel 24/25/26), hopelijk kan je deze nog toelichten dan ben ik helemaal geholpen :)

[CPP]For at = 2 To lastrow
'geef aan dat at moet lopen van rij 2 tot aan de waarde van lastrow

For at2 = 2 To lastrow2
'geef aan dat at2 moet lopen van rij 2 tot aan de waarde van lastrow2

If Cells(at, 1).Value < 599999999 And _
'als de waarde in de cel in de rij at van kolom A kleiner is als 599999999 en

Cells(at, 1).Value <> Sheets("warranty").Cells(at2, 1).Value Then
'als de waarde van de cel in de rij at van kolom A niet gelijk is aan de waarde op sheet warranty van de cel in rij at2 van kolom A dan

rma = rma + 1
'wordt rma met 1 opgehoogd

End If
Next at2
If rma = lastrow2 Then
'als rma gelijk is aan lastrow2 dan

lastrow2 = Sheets("warranty").Range("a" & Rows.Count).End(xlUp).Row
'wordt lastrow2 gelijk gesteld aan het aantal regels in de sheet warranty (stel aantal regels = 10 dus lastrow2 = 10)

Sheets("warranty").Cells(lastrow2 + 1, 1).Resize(1, 3).Value = Sheets("datadump").Range("a" & at, "c" & at).Value
'op de sheet warranty wordt de cel lastrow2+1,1 dus cel A11 (wat doet Resize hier?) gevuld met de waarde vanaf de sheet datadump, kolom A, regel at en kolom C, regel at.
'(dus als at = 4 dan worden hier de cellen A4 en C4 bedoeld?)

End If
rma = 1
Next at
[/CPP]
 
Laatst bewerkt:
Code:
deze regel wordt uitgevoerd als een nieuw item op datadump staat
Sheets("warranty").Cells(lastrow2 + 1, 1).Resize(1, 3).Value = Sheets("datadump").Range("a" & at, "c" & at).Value

Sheets("warranty").Cells(lastrow2 + 1, 1) = eerste lege cel van kolom A op blad warrenty
.Resize(1,3).value = formaat  aanpassen aan wat er moet komen (kolommen A,B,C van datadump) dus de (1,3)achter Resize staat voor 1 rij en 3 kolommen
= Sheets("datadump").Range("a" & at, "c" & at).Value = waar de gegevens gehaald worden, niet (A en C) maar van A tot en met C en at voor het rijnummer.
                                                                           
dus als bv rij 10 van datadump een warranty rma nummer is en nog niet aanwezig op warranty wordt de regel zo uitgevoerd
Sheets("warranty").Cells(lastrow2 + 1, 1).Resize(1, 3).Value = Sheets("datadump").Range("a10", "c10").Value

suc6

Leo
 
Laatst bewerkt:
nwametze,

bij deze de code wat ingekort en een iets andere (snellere) manier om de nieuwe rma nummers te plaatsen.
aangezien die datadump enkel maar groter wordt is deze wijze zeker beter.

mvg

Leo
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan