Waarde in cel op ander tabblad zoeken en selecteren

Status
Niet open voor verdere reacties.

Boeije

Gebruiker
Lid geworden
25 nov 2012
Berichten
24
Goedemiddag,

Ik ben op zoek naar een manier om een celwaarde van het ene tabblad te zoeken in een kolom op een ander tabblad. De waarde op het eerste tabblad moet telkens opnieuw worden gedefineerd.

Het tabblad "Rapport Vullen" is een export die op dit blad wordt geplakt. "Test, Test", "Test1, Test1" enz zijn medewerkernamen en Start en End zijn de periodes waartussen ze verlof hebben gehad. Deze verlofdagen moeten worden weggeschreven op tabblad "Verlofrapportage" op de regel van de betreffende medewerker, onder de juiste datum.

Kan iemand me helpen met een code die dit mogelijk maakt?

PS het bestand is annoniem gemaakt en ook kleiner gemaakt het moet uiteindelijk voor zo'n 800 medewerkers gaan werken.



Bekijk bijlage Verloftool.zip
 
Booije,

Ik heb wat lopen kijken naar je opgave, knap lastig moet ik zeggen. Even een vraagje.
- Totaal uren:Test1, Test1 is ziek geweest op vrijdag 14-2 en beter op 15-02 toch 24 uur berekend, lijkt me een beetje veel.
- Wat wil je in het overzicht hebben een kruisje als hij ziek is geweest of het aantal ziekte uren.
- Hoe weet ik wat het rooster is van iemand die werkt? Welke dag mag ik niet meenemen, en voor hoeveel uur dan.
Als ik bovenstaande vragen bekijk betwijfel ik of jouw verzoek mogelijk is. Graag wat meer informatie.

Elsendoorn2134
 
Beste Elsendoorn

Ik ben al een eidje op weg. Hij is lelijk en werkt maar deels, maar een deel gaat wel goed.

Als antwoord op je vragen:
- Medewerkers zijn 24 uur beschikbaar, maar dit wordt een kolom verder teruggebracht tot werkuren
- Ziekte hoeft/ mag niet in het overzicht komen te staan
- Rooster is op een enkele na 24/7 beschikbaar. Bij een week verlof komt er bijvoorbeeld 7 * 8 uut verlof in te staan, die ik dan later bij het weektotaal terugbreng tot de maximaal de uren per week.

Ik had wel verwacht dat het geen makkelijke opgave was, nooit gedacht dat iets onmogelijk zou zijn met VBA (ik ben maar ammateur en voor mij is het een wonder :D).

Alvast bedankt voor het meedenken!

Bekijk bijlage Verloftool2.zip
 
Ik heb weer wat aangepast, ik krijg nu de verlofuren bij de juiste medewerker op de eerste dag van het verlof.
Ik moet dit nog tot de laatste verlofdag zien te vullen.

Code:
Range("A2").Select
    Selection.Copy
    Sheets("Verlofrapportage").Range("PW1").PasteSpecial Paste:=xlPasteValues
    Dim i As Integer
    For i = 1 To 9999
    Sheets("Rapport Vullen").Select
    If ActiveCell.Offset(i, 2) = "" Then
    ActiveCell.Offset(i, 1).Select
    'If ActiveCell.Offset(1, 0) <> "" Then: Selection.End(xlDown).Select
    Selection.End(xlToLeft).Select
    'ActiveCell.Offset(2, 0).Select
    If ActiveCell.Value = "" Then
    Sheets("Verlofrapportage").Select
    MsgBox "Verlof succesvol verwerkt."
    Exit Sub
    End If
    ActiveCell.Copy
    Range("A2").Select
    Sheets("Verlofrapportage").Range("PW1").PasteSpecial Paste:=xlPasteValues
    Else
    'End If
    ActiveCell.Offset(i, 2).Copy
    Sheets("Verlofrapportage").Range("PW2").PasteSpecial Paste:=xlPasteValues
    Sheets("Rapport Vullen").Select
    ActiveCell.Offset(i, 9).Copy
    Sheets("Verlofrapportage").Range("PW3").PasteSpecial Paste:=xlPasteValues
    Sheets("Verlofrapportage").Select
    Range("PW1").Select
Dim lRegel As Long
Dim lKolom As Long
lRegel = Columns("A").Find(ActiveCell.Value).Row
lKolom = Rows(4).Find(ActiveCell.Offset(1, 0)).column
If Sheets("Verlofrapportage").Range("PW3").Value < Sheets("Verlofrapportage").Cells(lRegel, 12).Value Then
Sheets("Verlofrapportage").Cells(lRegel, lKolom).Value = Sheets("Verlofrapportage").Range("PW3").Value
Else: Sheets("Verlofrapportage").Cells(lRegel, lKolom).Value = Sheets("Verlofrapportage").Cells(lRegel, 12).Value
End If
End If
Next i
End Sub
 
Booije,

Hierbij een volledig model, het zoekt de leest de tabel, zoekt de juiste data op en
zet hierin de uren. Ik heb hiervoor de betaalde uren gebruikt waarbij ik maximaal 8 uren
per dag opneem. Als het aantal dagen groter is dan de betaalde uren gedeeld door 8 komt
in de overige cellen een nul te staan.
De macro is een beetje te groot geworden om hier op te nemen.

Bekijk bijlage HelpMijVerlofTool.xlsm

Veel Succes.
 
Beste Elsendoorn,

Geweldig! Hij werkt goed. Ik merk nu echter dat mijn uitleg niet volledig is geweest.

Ik heb de kolom aangepast naar de kolom met de "Total Hours", waardoor hij nu op iedere dag 8 uur neerzet. Ik kan dan met het weektotaal in de formule rekening houden met het maximale aantal uren per week (die 8 uur wil ik plaatsen omdat de medewerker op die dag niet in te zetten is en we dus 8 uur inzetbaar missen op die dag).

Een deel van de medewerkers werkt met andere uren per dag, daarvoor kan ik volgens mij zelf de code aanpassen om ook die werkend te krijgen.

Dank voor de hulp en de les (het lezen van de code heeft me nieuwe dingen geleerd!).

Topic closed.
 
Beste Elsendoorn,

Als ik de code gebruik op een 2e identiek bestand met andere namen (gebruikt wel de zelfde verlof export), loopt hij vast op het volgende stuk.

Code:
    'Schrijf cellen, zolang het eindadres niet overeenkomt met de huidig adres doorgaan.
    [COLOR="#FF0000"]Do While .Range(sAdress).Offset(0, nLoper).Address <> .Range(eAdress).Offset(0, 1).Address[/COLOR]        
        'Als de cel een Week totaal is dan de kolom overslaan.
        If Not Left(.Range(Mid(.Range(sAdress).Offset(0, nLoper).Address, 2, _
            InStr(2, .Range(sAdress).Offset(0, nLoper).Address, "$", vbTextCompare) - 2) & "4"), 4) = "Week" Then
            .Range(sAdress).Offset(0, nLoper) = IIf(vRecord.dUren > 8, 8, vRecord.dUren)
            vRecord.dUren = vRecord.dUren - .Range(sAdress).Offset(0, nLoper)
        End If
Op het eerste bestand werkt de code wel naar behoren.

Enig idee over de oorzaak en hoe dit te verhelpen?

Alvaste bedankt voor de moeite.
 
Boeije,

Welke melding krijg je als dit zich voor doet? Je zegt dat hij hier vast loopt?

Bestaat het tabblad "Verlofrapportage" ?

Stuur me anders even dit bestand.

Elsendoorn2134
 
Beste Elsendoorn,

De fout heb ik inmiddels gevonden er stond een naam tussen die niet in het medewerker bestand stond. Ik heb hier een weg omheen gebouwd.

Ander issue waar ik nu tegenaan loop is dat er 1 dag teveel verlof wordt weggeschreven. Omdat de einddatum in de export is genoteerd als tot (niet t/m) wordt bij 14-01-2014 0:00 ook de 14e als verlof geschreven. Nu leek mij de makkelijkste oplossing om 1 sec. of 1 min. van de einddatum af te halen, maar als er een beter alternatief is waardoor hij sneller loopt dan zie ik dat liever.
 
Elsendoorn,

Ik heb toch maar vast gekozen voor de quick fix.

Code:
.Offset(lTeller, 2).Value = .Offset(lTeller, 2).Value - 1 / 24 / 60
vRecord.dDatumTot = Format(.Offset(lTeller, 2), "d-m-yyyy")

Hij wordt niet merkbaar trager van de extra regel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan