Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Anders (software)

[excel] genereren samenvatting van diverse tabbladen

Anoniem
meneer_ed
6 antwoorden
  • Hallo,

    Via excel maak ik facturen. Op elk tabblad staat een factuur met een vaste layout. Dus in bepaalde cellen staan gegevens zoals:
    - debiteurnummer;
    - factuurdatum;
    - totaal bedrag ex btw.

    Graag wil ik weten hoe ik met excel in een apart tabblad een samenvatting kan laten genereren van de gegevens van en uit de overige tabbladen. Het bestand moet dus als het ware worden uitgelezen. Het zou mooi zijn als de samenvatting ook vernieuwd kan worden waarbij nieuwe facturen in het overzicht worden opgenomen.

    Kan iemand mij een aanzetje geven? Met welke functie kan ik dit doen?

    Grt,
    Richard
  • Heb je het al eens geprobeerd met een Macro die ervoor zorgt dat de gegevens die je samengevat wilt hebben gekopieerd worden naar een overzichtstabblad?

    Marie-Louise
  • Daar heb ik wel aangedacht, maar ik weet niet waar ik moet beginnen. De macro moet immers flexibel zijn omdat er facturen bijkomen.

    Is dit een mogelijkheid: Een macro de desbetreffende velden laten kopieren van alle Active.Sheets? Maar hoe krijg ik het dan weer onder elkaar in de samenvatting?

    Is het niet te doen voor een n00b voor wat betreft macro's?

    Grt,
    Richard
  • Ja hoor, dat is eenvoudig te doen.
    Stel:
    Het debiteurnummer staat in A1
    De factuurdatum in A2 en
    Het bedrag in A3
    Maak een nieuw werkblad aan en noem dit "overzicht". (zonder de aanhalingstekens.)
    Zorg dat dit werkblad het laatste is van al je werkbladen. Bij het invoegen van nieuwe facturen voeg je dus in vóór dit werkblad!
    Rechtsklik op de tab van het nieuwe werkblad en kies "view code" (code bekijken of zoiets in een nederlandse versie neem ik aan.)
    plak de volgende macro in het grote lege vlak:

    Private Sub Worksheet_Activate()

    Dim i As Integer
    Dim AantalFacturen As Integer
    Sheets("overzicht";).Select
    On Error Resume Next
    AantalFacturen = Sheets.Count - 1
    For i = 1 To AantalFacturen
    Range("A" & i + 1) = Sheets(i).Name
    Range("B" & i + 1) = Sheets(i).Range("A1";)
    Range("C" & i + 1) = Sheets(i).Range("A2";)
    Range("D" & i + 1) = Sheets(i).Range("A3";)
    Next i
    End Sub


    Sluit Visual Basic.

    Als je nu het tabblad "overzicht" selecteert komen de namen van debetreffende tabbladen, de debiteurnummers, data en bedragen komen nu in de kolommen A t/m D te staan, vanaf de tweede regel, zodat je er nog een kop boven kunt zetten. Die kop blijft staan, maar als je nieuwe facturen toevoegd komen ze er automatisch bij als je het tabblad "overzicht" weer selecteert. Formatteer de kolommen (met name datum) naar behoefte.

    Je kunt de macro aanpassen door in de regels die met "range" beginnen de eerste A, B, C, en D te veranderen in de letter van de kolom die je wilt gebruiken en de A1, A2 en A3 op het eind van de regel door de verwijzing naar cel waar de gegevens in je facturen staan.

    Als je meer gegevens in je overzicht wilt voeg je soortgelijke regels toe, met aan het begin de letter van de kolom waar je ze wilt hebben en aan het eind de plek waar de gegevens te vinden zijn.

    Succes ermee,
    Jan
  • [quote:416780a1c0="Jan bakker"]
    Private Sub Worksheet_Activate()

    Dim i As Integer
    Dim AantalFacturen As Integer
    Sheets("overzicht";).Select
    On Error Resume Next
    AantalFacturen = Sheets.Count - 1
    For i = 1 To AantalFacturen
    Range("A" & i + 1) = Sheets(i).Name
    Range("B" & i + 1) = Sheets(i).Range("A1";)
    Range("C" & i + 1) = Sheets(i).Range("A2";)
    Range("D" & i + 1) = Sheets(i).Range("A3";)
    Next i
    End Sub
    [/quote:416780a1c0]
    Dit is een optie, maar ik zou ook de naam van de sheet controleren om er zeker van te zijn dat je niet per ongeluk je overzicht sheet te pakken hebt.
    Het lijkt mij veiliger om de For-Next loop dus iets anders te doen:
    [code:1:416780a1c0]

    Private Sub Worksheet_Activate()

    Dim i As Integer
    Dim currentSheet as WorkSheet
    dim overzicht as WorkSheet

    Set overzicht = WorkSheets("Overzicht")
    i = 1

    For Each currentSheet in ActiveWorkbook.WorkSheets
    If currentSheet.Name <> "Overzicht" Then
    overzicht.Range("A" & i + 1) = Sheets(i).Name
    overzicht.Range("B" & i + 1) = Sheets(i).Range("A1")
    overzicht.Range("C" & i + 1) = Sheets(i).Range("A2")
    overzicht.Range("D" & i + 1) = Sheets(i).Range("A3")
    End If
    Next
    End Sub
    [/code:1:416780a1c0]
    Ik zou trouwens ook geen gebruik maken van het Worksheet_Activate event, maar de code in een aparte module stoppen. Dan kan je de macro namelijk ook aan een knop of een menu koppelen.
    Op de manier die Jan beschrijft, wordt de code namelijk iedere keer als je de overzicht sheet activeert uitgevoerd.
  • Beste,
    Er werd gevraagd om een aanzetje, dus ik dacht het eenvoudig te houden. Als het werkblad 'overzicht' het laatste is hoeft de contrôle niet plaats te vinden, maar goed het kan.

    In je macro moet je dan wel het volgende wijzigen:
    i = 1 moet zijn i = i + 1, anders wordt alleen het eerste werkblad verwerkt. Bovendien moet het na de regel 'for each…' staan.
    in de if-regel moet 'overzicht' een kleine letter hebben (tenzij het werkblad 'Overzicht' (met een hoofdletter) heet.

    als 'overzicht' niet het laatste werkblad is resulteert jouw macro in een lege rij in het midden van het ovezicht. Correct, maar niet zo mooi.

    In beide macro's zijn problemen natuurlijk te voorkomen door het werkblad 'overzicht" eerst naar de laatste positie te verplaatsen met iets als:
    Dim AantalBladen As Integer
    AantalBladen = Sheets.Count
    Worksheets("overzicht";).Move _
    after:=Worksheets(AantalBladen)

    Er zijn meer zaken die voor problemen kunnen zorgen. Als er b.v. werkbladen worden verwijderd, blijven er een aantal regels onderaan het overzicht staan, die er niet meer moeten staan. Ook dat is natuurlijk op te lossen, maar zoals gezegd, het was maar een aanzetje.

    Ik heb gekozen voor een Worksheet_Activate event, omdat het overzicht dan altijd up to date is. Dat de code elke keer wordt uitgevoerd lijkt me niet zo'n groot bezwaar, omdat het in deze opzet niet om honderden facturen zal gaan en er dus geen wachttijd optreedt.
    Als Richard liever met een knop of toetscombinatie werkt kan dat natuurlijk gemakkelijk. Ik heb de regel 'Sheets("overzicht";).Select' al opgenomen om te voorkomen dat een factuur overschreven wordt. In het geval van een Worksheet_Activate event is dat natuurlijk eigenlijk overbodig.

    vr.gr.
    jan

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.