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

database

  • Onderwerp starter Onderwerp starter ppms
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

ppms

Gebruiker
Lid geworden
19 aug 2006
Berichten
226
Hallo,

Ik wil graag op blad totalen hypotheek alle afschrijvingen vanaf januari tot december die bladen moet ik nog wel maken. Dus voer een afschrijving in januari in dan zou dit gelijk op de totalen hypotheken te zien zijn. Ik wil dan ook nog ander bladen maken met de totalen van steeds een onderwerp.

Wie weet hiervoor een oplossing.

Voorbeeld bijlage.

Groet PPMS
 

Bijlagen

Het zou met vba kunnen:
Code:
Sub hypotheek_overnemen()
Dim x As Integer
Dim c As Range
Dim legeregel as Long

For x = 1 To 12
    If ws.Name = MonthName(x) Then
        For Each c In Range("B1:B106")
            If c = "hypotheek" Then
                legeregel = Sheets("totalen hypotheek").Range("B65536").End(xlUp).Row + 1
                Sheets(ws.Name).Range("B" & c.Row).Resize(1, 6).Copy Sheets("totalen hypotheek").Range("B" & legeregel)
            End If
        Next
    End If
Next

End Sub

Maar volgens mij heb je per maand 1x een afschrijving van een product. bv 1x hypotheek in ja., 1x hypotheek in feb..
Zolang dit 1x blijft kan je met vert.zoeken volgens mij al uit de voeten?
 
Laatst bewerkt:
Code aangepast (wist dat we al een keer zoiets hadden gedaan in het nederlands)

Code:
Sub hypotheek_overnemen()
Dim x As Integer
Dim legeregel As Long
Dim c As Range

zoekterm = "hypotheek"

For x = 1 To 12
    For Each ws In Worksheets
        If ws.Name = Maandnaam(x) Then
            For Each c In Sheets(ws.Name).Range("B1:B106")
                If c.Value = zoekterm Then
                    legeregel = Sheets("totalen " & zoekterm).Range("B65536").End(xlUp).Row + 1
                    Sheets(ws.Name).Range("B" & c.Row).Resize(1, 6).Copy Sheets("totalen " & zoekterm).Range("B" & legeregel)
                End If
            Next
        End If
    Next
Next

End Sub

Function Maandnaam(mnd As Integer) As String
    Select Case mnd
        Case 1: Maandnaam = "januari"
        Case 2: Maandnaam = "februari"
        Case 3: Maandnaam = "maart"
        Case 4: Maandnaam = "april"
        Case 5: Maandnaam = "mei"
        Case 6: Maandnaam = "juni"
        Case 7: Maandnaam = "juli"
        Case 8: Maandnaam = "augustus"
        Case 9: Maandnaam = "september"
        Case 10: Maandnaam = "oktober"
        Case 11: Maandnaam = "november"
        Case 12: Maandnaam = "december"
    End Select
End Function

Met dank aan Wigi :), voor de nl functie.

Je van de zoekterm een array kunnen maken.
Hierna kan je ieder item in de array door de zoekmachine halen.
Mits je tabblad namen ook de zoeknaam in zich hebben.
 
Code aangepast (wist dat we al een keer zoiets hadden gedaan in het nederlands)

...

Met dank aan Wigi :), voor de nl functie.

Idd, nu herinner ik het mij. Op de duur wordt het wat veel om te onthouden :o
 
Hallo,

Was de juiste tip heb er nog iets aan toegevoegd bij iedere opdracht wordt het oude eerst gewist en een array van gemaakt. Kunnen er nog dingen worden verbetert of is het oké zo.

Code:
Sub hypotheek_overnemen()
Dim x As Integer
Dim legeregel As Long
Dim c As Range

zoekterm = Sheets("totalen").Range("I7")

    Range("B8:E32").Select
    Selection.ClearContents
    Range("I7").Select

For x = 1 To 12
    For Each ws In Worksheets
        If ws.Name = Maandnaam(x) Then
            For Each c In Sheets(ws.Name).Range("B8:B106")
                If c.Value = zoekterm Then
                    legeregel = Sheets("totalen").Range("B65536").End(xlUp).Row + 1
                    Sheets(ws.Name).Range("B" & c.Row).Resize(1, 6).Copy Sheets("totalen").Range("B" & legeregel)
                End If
            Next
        End If
    Next
Next
End Sub

Function Maandnaam(mnd As Integer) As String
    Select Case mnd
        Case 1: Maandnaam = "januari"
        Case 2: Maandnaam = "februari"
        Case 3: Maandnaam = "maart"
        Case 4: Maandnaam = "april"
        Case 5: Maandnaam = "mei"
        Case 6: Maandnaam = "juni"
        Case 7: Maandnaam = "juli"
        Case 8: Maandnaam = "augustus"
        Case 9: Maandnaam = "september"
        Case 10: Maandnaam = "oktober"
        Case 11: Maandnaam = "november"
        Case 12: Maandnaam = "december"
    End Select
End Function

En wederom helpmij jullie bedankt voor de hulp.

Groet PPMS
 
Dit

Code:
Range("B8:E32").Select
    Selection.ClearContents
    Range("I7").Select

kan je vervangen door

Code:
Range("B8:E32").ClearContents

Ook kan je eens in de helpfiles FindNext opzoeken en de code aldaar - lichtjes gewijzigd - gebruiken. Het vermijdt de 2de For...Next lus in de code en is veel beter en sneller.
 
ppms,

Probeer deze eens:
Code:
Sub hypotheek_overnemen()
Dim x As Integer
Dim legeregel As Long
Dim c As Range
Dim zoekterm, Totalen
Dim y As Long

'Vul hier je Array
Totalen = Array("hypotheek", "alternate")
'Eerste locatie in array is 0 (geen 1 zoals je zou denken)
y = 0

'Range("B8:E32").ClearContents

'Verander de 2 in de hoeveelheid welke je in je array hebt
Do While y < 2
    'Vul de zoekterm met de array inhoud
    zoekterm = Totalen(y)
    'Maak het blad leeg waarop we invoegen
    Sheets("totalen " & zoekterm).Range("B8:E" & Sheets("totalen " & zoekterm).Range("B65536").End(xlUp).Row + 1).ClearContents
    
    For x = 1 To 12
        For Each ws In Worksheets
            If ws.Name = Maandnaam(x) Then
                For Each c In Sheets(ws.Name).Range("B8:B106")
                    If c.Value = zoekterm Then
                        legeregel = Sheets("totalen " & zoekterm).Range("B65536").End(xlUp).Row + 1
                        Sheets(ws.Name).Range("B" & c.Row).Resize(1, 6).Copy Sheets("totalen " & zoekterm).Range("B" & legeregel)
                    End If
                Next
            End If
        Next
    Next
    'Verhoog y zodat we de volgende naam in de array door de loop halen
    y = y + 1
    
Loop

End Sub

Function Maandnaam(mnd As Integer) As String
    Select Case mnd
        Case 1: Maandnaam = "januari"
        Case 2: Maandnaam = "februari"
        Case 3: Maandnaam = "maart"
        Case 4: Maandnaam = "april"
        Case 5: Maandnaam = "mei"
        Case 6: Maandnaam = "juni"
        Case 7: Maandnaam = "juli"
        Case 8: Maandnaam = "augustus"
        Case 9: Maandnaam = "september"
        Case 10: Maandnaam = "oktober"
        Case 11: Maandnaam = "november"
        Case 12: Maandnaam = "december"
    End Select
End Function

Blijft de opmerking van Wigi staan uit zijn laatste post :)
 
Hallo,

Ik ben maar een heel klein amateurtje en heb denk ik net 0,1 % kennis van wat jullie allemaal weten en ben pas op latere leeftijd (wordt dit jaar 60) met Excel begonnen dus de kwartjes vallen soms niet zo snel. Ik geniet er wel erg veel om met Excel bezig te zijn. Wat Wigi bedoelt met: Ook kan je eens in de helpfiles FindNext opzoeken en de code aldaar - lichtjes gewijzigd - gebruiken. Het vermijdt de 2de For...Next lus in de code en is veel beter en sneller. Waar kan ik dit vinden.

Als bijlage een bestandje met die tweede andere code maar daar kwam ik niet echt uit en geeft dus een fout code.

Groet PPMS
 

Bijlagen

Wat bedoeld wordt met FindNext, is eigenlijk het programmeren van:

1. Ctrl-F voor zoeken
2. de zoekterm intypen
3. en dan met Volgende door alle gevonden cellen gaan

Zie FindNext in de VBA help files, maar met beperkte kennis gaat dat waarschijnlijk een hele opgave zijn.
 
Als ik wat meer tijd heb vandaag of morgen zal ik me er eens op storten om deze te herschrijven en een goede uitleg er bij te geven.

Tot later.

ps.
Vindt het trouwens uitmuntend dat je je nog met Excel bent gaan bemoeien, ben er zelf nu ook een jaar mee bezig maar gaat toch redelijk wat tijd in zitten om alles te begrijpen (tot nu toe een klein deel van de VBA code, formules gaan redelijk langs mij heen).
Chapeau.
 
ppms,

poeh, heb zelf ook nog nooit met de finnext functie gewerkt maar, hier is ie dan:
Code:
Sub hypotheek_overnemen()
'Declareer de te gebruiken variabelen
Dim x As Integer
Dim legeregel As Long
Dim c As Range
Dim y As Long
Dim zoekterm, Totalen

'Vul hier je Array met de namen waarvan je een totaalblad wil maken.
'Voorbeeld: je hebt blad: "totalen berkman" dan vul je hier "berkman" in
Totalen = Array("hypotheek", "alternate")

'Eerste locatie in array is 0 (geen 1 zoals je zou denken)
'we vullen onze variabele y met het eerste woord uit de array
y = 0

'**********************************************************
'Vanaf hier gaan we de gegevens doorzoeken en over zetten
'**********************************************************

'eerste geven we het aantal elementen in de array aan zodat we niet blijven zoeken naar bladen welke er niet zijn.
'Verander de 2 in de hoeveelheid welke je in je array hebt
Do While y < 2
    'Vul de zoekterm met de array inhoud
    'zodat we met de zoekterm verder kunnen werken in het blad
    zoekterm = Totalen(y)
    
    'Maak het bereik op het blad leeg waarop we invoegen
    'dit is standaard vanaf B8 tm E + de laatste gevulde rij
    'met de code: Sheets("totalen " & zoekterm).Range("B65536").End(xlUp).Row bepalen we de laatst gevulde rij
    Sheets("totalen " & zoekterm).Range("B8:E" & Sheets("totalen " & zoekterm).Range("B65536").End(xlUp).Row).ClearContents
    
    'Hier gaan we door de maanden heen lopen, van 1 = jan tm 12 = dec
    For x = 1 To 12
        'nu gaan we door de tabbladen lopen
        'voor ieder tabblad in deze excel file
        For Each ws In Worksheets
            'als de tabbladnaam de naam van maand x heeft voer dan de volgende code uit.
            'hierin heeft x de naam van de maand welke we met For x=1 to 12 hebben gekregen
            'de maandnaam wordt omgezet met bhv de zelf gemaakte functie Maandnaam zodat deze ook werkt op nederlandse windows systemen.
            If ws.Name = Maandnaam(x) Then
                
                'Zoek in het bereik B7:B150 op blad met de maandnaam
                With Worksheets(ws.Name).Range("B7:B150")
                    'zoek de eerste cel met de inhoud van de zoekterm
                    Set c = .Find(zoekterm, LookIn:=xlValues)
                    'als er een cel is welke niet leeg is voer dan de code verder uit
                    If Not c Is Nothing Then
                        'vul de variabele firstAdress met het cel adres van de cel met de 1e gevonden zoekterm
                        firstAddress = c.Address
                        
                        'zoek zolang er een cel met de zoekterm is welke niet als 1e gevonden is.
                        Do
                            'zoek de 1e lege regel op het blad totalen welke overeenkomt met de zoekterm
                            legeregel = Sheets("totalen " & zoekterm).Range("B65536").End(xlUp).Row + 1
                            'kopieer de gevonden cel met de 6 cellen ernaast (zie Resize) naar de legeregel.
                            Sheets(ws.Name).Range("B" & c.Row).Resize(1, 6).Copy Sheets("totalen " & zoekterm).Range("B" & legeregel)
                            'Vul de zoekvariabele met de volgende cel welke de zoekterm als inhoud heeft
                            Set c = .FindNext(c)
                        Loop While Not c Is Nothing And c.Address <> firstAddress
                    End If
                End With
            End If
        Next
    Next
    
'Verhoog y zodat we de volgende naam in de array door de loop halen
y = y + 1
'Volgende y plaatsen in de zoekterm
Loop

End Sub

Function Maandnaam(mnd As Integer) As String
'**************************************
'Credits functie gaan naar Wigi
'http://www.wimgielis.be
'**************************************
    Select Case mnd
        Case 1: Maandnaam = "januari"
        Case 2: Maandnaam = "februari"
        Case 3: Maandnaam = "maart"
        Case 4: Maandnaam = "april"
        Case 5: Maandnaam = "mei"
        Case 6: Maandnaam = "juni"
        Case 7: Maandnaam = "juli"
        Case 8: Maandnaam = "augustus"
        Case 9: Maandnaam = "september"
        Case 10: Maandnaam = "oktober"
        Case 11: Maandnaam = "november"
        Case 12: Maandnaam = "december"
    End Select
End Function

Bij vragen horen we het graag.
Misschien kan de code nog iets korter maar vollopig laat ik het hierbij :).
 
Laatst bewerkt:
Demeter,

Ga in het weekend er lekker mee aan de slag en hoort zeker nog van me, alvast heel erg bedankt en zie dat ik nog een hoop kan leren. Gisteren nog een poging met finnext functie gedaan maar kwam er nog niet hoe dat gaat. Voordeel het is hobby en heb er de tijd voor.

Groet PPMS
 
Hallo,

Sorry voor geen reactie maar ik heb het al eens eerder uitgelegt daar ik chronische pijnpatiënt ben en dan soms wat dagen bed moeten houden kunnen reactie vaak wat langer uitblijven, Nog even dit is zeker niet zielig en zie alles positief het is alleen af en toe lastig.

Ik kan voorlopig zo wel vooruit met eerste oplossing en met de tweede ga ik nog wel eens lekker mee aan de gang.

Iedereen weer super bedankt en kom graag weer terug als ik weer ergens mee zit.

Groet PPMS
 
No problemo.

Er zijn altijd mensen die graag je vragen willen beantwoorden hier op Helpmij.
We horen graag van je ................... heb er zelf namelijk ook weer wat bij geleert door jouw vraag :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan