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

Celwaarde realtime doorsturen naar ander tabblad

Status
Niet open voor verdere reacties.

origami123

Gebruiker
Lid geworden
7 apr 2012
Berichten
54
Goedemiddag,

Via een macro stuur ik momenteel waarden uit cellen uit meerdere kolommen door naar een ander tabblad, dus zonder de formules over te zetten.

Echter zelfs als er maar een enkele cel wordt gewijzigd ben ik genoodzaakt om telkens weer alle, dus ook alle lege cellen opnieuw te versturen.
Hele kolommen worden zo doorlopen, terwijl het zoals gezegd vaak maar om een enkele invoer gaat, om iets aan te passen.

Door deze hoeveelheid data verspringen de tabbladen van de source om de waarden op te halen en weer terug naar de ander om ze weer te plakken en er ontstaat tijdens deze - ook duidelijk zichtbare - actie een tijdelijk onrustig beeld.

Ik doe dat nu nog met onderstaande - op zichzelf goedwerkende - code:

Code:
Sub Verstuur()

        Sheets("source").Select   
        Range("B6:B65000").Select
        Selection.Copy

        Sheets("overzicht").Select
        ActiveSheet.Unprotect Password:="******"

        Range("K6:K65000").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

        Application.CutCopyMode = False
        
	ActiveSheet.Protect Password:="******"

End Sub

Welke vba-code is echter nodig om dit 'realtime' c.q. 'on the fly' te laten verlopen, zodat alles achter de schermen rustig verloopt en de tabbladen bij elke cel-invoer direct weer up-to-date zijn, zonder opnieuw weer alles te moeten doorlopen en verplaatsen.

M.vr.gr.

Origami
 
Uitzetten van het scherm
Application.ScreenUpdating = False

Aanzetten van het scherm (eind vd macro)
Application.ScreenUpdating = True
 
Gebruik het Change-event van het bertreffende werkblad.
 
Bezorger,
Rudi,

Bedankt voor jullie reactie.

Ik heb 'screenupdating' toegepast en inderdaad blijft het source-tabblad gewoon stilstaan en is het alleen even afwachten tot de macro zijn werk gedaan heeft. In dat opzicht is het een goede oplossing.

De toepassing van 'Change Event', waarbij actie wordt ondernomen, zodra iets is gewijzigd, werkt ook goed, maar gezien de tijd, die nodig lijkt te zijn, werkt de macro dan nog steeds alle cellen en kolommen af.

Het mooiste zou eigenlijk zijn, dat - zodra de waarde in source-cel in het eerste tabblad is gewijzigd - alleen de waarde in de gekoppelde cel in het tweede tabblad wordt vervangen.

Maar het kan heel goed zijn, dat ik het hier mis heb en wordt alleen alles doorlopen om die ene cel op te zoeken en aan te passen.
 
Heb je je wel eens verdiept in externe gegevens ophalen ?
onder het tabblad gegevens kun je externe (of in jou geval van een ander blad in het zelfde werkboek) gegevens ophalen
via een query kun je presies die kolommen weergeven die je in dat blad wilt weergeven
als je in de eerste rij namen neerzet voor elke kolom, welke gegevens in die kolom staan dan gaat het super snel en wordt alleen die ene cel aangepast zoals je dat in je vraag aangeeft.
Als je er geen begin aan krijgt uiteraard help ik je zo goed als ik dat zou kunnen en mocht 1 van de echte kenners bij voorbaat hun bedenkingen bij deze manier hebben hoor ik dat graag.
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("B6:B65000")) Is Nothing Then
        With Sheets("overzicht")
            .Unprotect Password:="******"
            .Range(Target.Address).Offset(, 9) = Target.Value
            .Protect Password:="******"
        End With
    End If
End Sub
 
Laatst bewerkt:
Verbetering ?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("B6:B65000")) Is Nothing Then
        With Sheets("overzicht")
            .Unprotect Password:="******"
            Target.Offset(, 9) = Target.Value
            .Protect Password:="******"
        End With
    End If
End Sub
 
@ snb
Geen verbetering :D, want nu blijft hij op hetzelfde blad terwijl de aanpassing moet gebeuren op blad overzicht.
Mijn bedoeling was enkel om het bronceladres als basis te gebruiken
 
@WB

Correct; dat had ik over het hoofd gezien :(
 
Heren,

Alweer heel erg bedankt voor jullie inbreng......

Ik ben er intussen al weer wat dagen mee bezig geweest en heb met jullie oplossing intussen verschillende mogelijkheden geprobeerd toe te passen, maar schijnbaar doe ik iets verkeerd, want ik krijg het niet werkend, zoals de bedoeling zou moeten zijn.

Ik denk, dat ik iets niet goed doe met de verwijzing van 'source' naar 'overzicht', want ik krijg dan wel geen foutmeldingen, maar aan de andere kant zie ik ook niets gebeuren.

Ik blijf wel zoeken naar wat ik fout doe, maar houd me nu dus nog maar even vast aan de "Range-selection en copy-paste", hoewel ik in die code ook heb geprobeerd zaken aan te passen om een en ander sneller te laten verlopen, echter eveneens zonder noemenswaardig resultaat.
 
Post eens een voorbeeldbestandje dat je werkelijke situatie weerspiegelt.
 
Heren,

Ik kom er nog steeds niet helemaal uit, maar heb het voorlopig anders opgelost, waardoor niet helemaal realtime wordt geupdate, maar tijd wordt gewonnen, door de hoeveelheid data te verminderen, die wordt gecontroleerd alvorens over te zetten.

In de eerdere lijst waren alle cellen vooraf al voorzien van een rand en dat werd schijnbaar gezien als gevuld, dus die werd - hoewel verder leeg - toch meegecopieerd.

De nieuwe lijst is niet meer voorzien van randen, behalve het normale raster, waardoor het invullen nog steeds in een omrande cel plaatsvindt en er geen verschil is, echter het copieren van deze cellen - dus zonder opmaak - gaat veel sneller.

Om de cellen in de source-lijst toch weer van een rand te voorzien heb ik er daar 'Voorwaardelijke Opmaak' opgezet, die na het copieren alleen de gevulde cellen voorziet van een rand.

Ook al worden nog steeds hele kolommen doorlopen en cel-inhouden overgezet, door de beranding later toe te voegen heeft het een stuk minder effect op het daadwerkelijk copieren.

Bedankt voor het meedenken!

M.vr.gr.

Origami
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan