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

Excel hulp gevraagd! Ik kom er niet meer uit...

Status
Niet open voor verdere reacties.

M87

Gebruiker
Lid geworden
26 mei 2017
Berichten
11
Dag mensen,

Ik ben er uren mee bezig geweest, maar ik kom er niet uit. Ik hoop dat jullie mij kunnen helpen.

Het is als volgt:
1. Ik heb een dataset met bedrijfsgegevens verdeeld over verschillende kolommen zoals: bedrijfsnaam, straatnaam, postcode, huisnummer etc.;
2. In een ander tabblad wil ik een invulschema maken. Ik heb een dropdown-menu gemaakt op basis van de bedrijfsnamen, deze zijn namelijk uniek.
3. Nu zou ik graag willen dat als ik een bepaalde bedrijfsnaam in het dropdown-menu aanklik, direct daaronder de gegevens van het betreffende bedrijf staan, die dus getransporteerd moeten worden vanuit het andere tabblad.

In mijn optiek moeten alle bedrijven die in het dropdown-menu zitten, gekoppeld worden aan de specifieke bedrijfsgegevens van het betreffende bedrijf in het andere tabblad.

Hoe krijg ik deze koppeling voor elkaar?

Mijn dank is groot als jullie het antwoord vinden!Bekijk bijlage Map1.xlsx
 
Laatst bewerkt:
Als je een voorbeeld document plaatst komt er vast een afdoende antwoord.
 
Komt dit in de buurt?
 

Bijlagen

  • Bedrijven.xlsx
    11,4 KB · Weergaven: 49
stukje vba achter Blad1
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$B$4" Then Exit Sub
       Blad1.Cells(5, 2).Resize(5) = Application.Transpose(Blad2.Columns(1).Find(Target).Offset(, 1).Resize(, 5))
End Sub
 
stukje vba achter Blad1
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$B$4" Then Exit Sub
       Blad1.Cells(5, 2).Resize(5) = Application.Transpose(Blad2.Columns(1).Find(Target).Offset(, 1).Resize(, 5))
End Sub

Jack, en ook Cobbe, Hartelijk dank voor jullie hulp.

Ik weet niet of ik een tweede vraag mag stellen, of dat daarvoor een nieuw topic geopend moet worden. De vraag is in ieder geval als volgt:
De code werkt prima voor importeren van de gegevens van 1 dropdown-menu. Nu heb ik heb meerdere dropdown-menus op hetzelfde tabblad waarbij aan elk dropdown-menu verschillende data, uit verschillende tabbladen gekoppeld dient te worden.

Ik heb in ieder geval al het volgende geprobeerd:
1. Na 'End sub' de code opnieuw geplakt en verwezen naar de juiste cellen. Dit werkte niet en ik krijg een foutmelding;
2. Voor 'End sub' dezelfde code geplakt maar dit lijkt geen enkele werking te hebben.

Zou je me hier mee kunnen helpen? Als ik een nieuw topic moet aanmaken is dat geen enkel probleem.
 
Als je zegt een foutmelding te krijgen, vertel er dan ook bij welke dat is.
Foutmeldingen zijn er niet om je te pesten maar om de oorzaak van een probleem aan te duiden.
 
Foutmelding betreft:

compileerfout: er is een dubbelzinnige naam gevonden: Worksheet_change

Ik heb de naam veranderd naar Worksheet_change1 van het gekopieerde stuk code. De foutmelding verdween, maar ik kreeg geen resultaat uit het 2de stuk code.

Ik zal de tot nu tot gebruikte code toevoegen:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$B$3" Then Exit Sub
       Blad5.Cells(4, 2).Resize(11) = Application.Transpose(Blad4.Columns(1).Find(Target).Offset(, 1).Resize(, 11))
End Sub
Private Sub Worksheet_Change1(ByVal Target As Range)
    If Target.Address <> "$B$27" Then Exit Sub
       Blad5.Cells(28, 2).Resize(4) = Application.Transpose(Blad6.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
End Sub
 
Laatst bewerkt:
Die Worksheet_Change1 gaat nooit werken omdat het geen bestaand Event is. Worksheet_Change mag maar 1x voor komen.
Als je het SheetChange event wilt gebruiken voor meerdere tabbladen gebruik dan dit in de ThisWorkbook sectie:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Select case sh.Name
        Case "Sheet1"
            If Target.Address <> "$B$3" Then Exit Sub
            Blad5.Cells(4, 2).Resize(11) = Application.Transpose(Blad4.Columns(1).Find(Target).Offset(, 1).Resize(, 11))
        Case "Sheet 2"
            If Target.Address <> "$B$27" Then Exit Sub
            Blad5.Cells(28, 2).Resize(4) = Application.Transpose(Blad6.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
    End Select
End Sub

Waarbij je voor Sheet 1 en Sheet 2 uiteraard de juiste namen gebruikt.
Of gebruik Worksheet_Change(ByVal Target As Range) per blad in de Worksheet sectie.
 
Laatst bewerkt:
Hartelijk dank voor je reactie.

Jouw code lijkt nog niet te werken en dat heeft waarschijnlijk te maken met het feit dat ik verkeerde waardes invul voor "sheet1" en "sheet2".
In Blad5 moet de data uiteindelijk komen te staan, maar deze benaming werkt niet. Ook de daadwerkelijke naam van het tabblad geeft geen resultaat.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Select Case Sh.Name
        Case "Blad5"
            If Target.Address <> "$B$3" Then Exit Sub
            Blad5.Cells(4, 2).Resize(11) = Application.Transpose(Blad4.Columns(1).Find(Target).Offset(, 1).Resize(, 11))
        Case "Blad5"
            If Target.Address <> "$B$23" Then Exit Sub
            Blad5.Cells(28, 2).Resize(4) = Application.Transpose(Blad6.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
    End Select
End Sub

Ik zie waarschijnlijk iets simpels over het hoofd.
 
Plaats het bestand of een representatief voorbeeld even.
 
Ik zie waarschijnlijk iets simpels over het hoofd.

Gezien het feit dat je in dat Select Case statement 2x op dezelfde waarde controleert dien je je ook wat meer te verdiepen in de code die je aangeboden krijgt en wat Event routines zijn.
 
Het is nogal wat om VBA-code te ontcijferen voor iemand die voor het openen van dit topic nog nooit eerder met VBA-code gewerkt heeft.
Ik doe mijn best in ieder geval om het te leren zodat ik de logica erachter kan begrijpen.

Op verzoek heb ik het betreffende bestand en de gebruikte code toegevoegd. de "Case" verwijst naar de naam het tabblad en hier gaat het waarschijnlijk fout.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Select Case Sh.Name
        Case "Bedrijfsgegevens"
            If Target.Address <> "$B$3" Then Exit Sub
            Blad5.Cells(4, 2).Resize(11) = Application.Transpose(Blad4.Columns(1).Find(Target).Offset(, 1).Resize(, 11))
        Case "Warmtepompen"
            If Target.Address <> "$B$23" Then Exit Sub
            Blad5.Cells(24, 2).Resize(4) = Application.Transpose(Blad6.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
        Case "Zonneboilers"
            If Target.Address <> "$C$23" Then Exit Sub
            Blad5.Cells(24, 3).Resize(4) = Application.Transpose(Blad7.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
        Case "Palletkachels"
            If Target.Address <> "$D$23" Then Exit Sub
            Blad5.Cells(24, 4).Resize(4) = Application.Transpose(Blad8.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
        Case "Biomassaketels"
            If Target.Address <> "$E$23" Then Exit Sub
            Blad5.Cells(24, 5).Resize(4) = Application.Transpose(Blad9.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
    End Select
End Sub

Bekijk bijlage Concept Business case1 - kopie.xlsm
 
Laatst bewerkt:
Ik vraag me af of de Workbook_SheetChange wel de event is. Op de website waar jij naar linked staat het volgende:
"This event will fire each time the contents of a cell are modified"

Wordt hiermee de content van de cel bedoeld waarin het dropdown-menu zit in B3, B23, C23, D24 en E24, of de data die achter de drop down-menus in de andere tabbladen?

Of simpel gezegd: waar moet de "Case" precies naartoe linken om het gewenste resultaat te krijgen?
 
Het Worksheet_Change event treedt inderdaad bij iedere wijziging van een cel in werking. Je hebt op dat moment in die event routine het object Target beschikbaar waarin je alle gegevens over de betreffende cel kan vinden. Het adres van de cel kan je dus vinden in Target.Address en de inhoud in Target.Value
 
Laatst bewerkt:
In de eerdere code die je plaatste zie ik geen Target.Value staan. Zie:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Select Case Sh.Name
        Case "Blad5"
            If Target.Address <> "$B$3" Then Exit Sub
            Blad5.Cells(4, 2).Resize(11) = Application.Transpose(Blad4.Columns(1).Find(Target).Offset(, 1).Resize(, 11))
        Case "Blad5"
            If Target.Address <> "$B$23" Then Exit Sub
            Blad5.Cells(28, 2).Resize(4) = Application.Transpose(Blad6.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
    End Select
End Sub

Op basis van deze code heb ik wijzigingen doorgevoerd wat geleid heeft tot:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Select Case Sh.Name
        Case "Bedrijfsgegevens"
            If Target.Address <> "$B$3" Then Exit Sub
            Blad5.Cells(4, 2).Resize(11) = Application.Transpose(Blad4.Columns(1).Find(Target).Offset(, 1).Resize(, 11))
        Case "Warmtepompen"
            If Target.Address <> "$B$23" Then Exit Sub
            Blad5.Cells(24, 2).Resize(4) = Application.Transpose(Blad6.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
        Case "Zonneboilers"
            If Target.Address <> "$C$23" Then Exit Sub
            Blad5.Cells(24, 3).Resize(4) = Application.Transpose(Blad7.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
        Case "Palletkachels"
            If Target.Address <> "$D$23" Then Exit Sub
            Blad5.Cells(24, 4).Resize(4) = Application.Transpose(Blad8.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
        Case "Biomassaketels"
            If Target.Address <> "$E$23" Then Exit Sub
            Blad5.Cells(24, 5).Resize(4) = Application.Transpose(Blad9.Columns(1).Find(Target).Offset(, 1).Resize(, 4))
    End Select
End Sub

De Target.Adress $B$3, $B$23, $C$23, $D$23, $E$23 zijn de dropdown menus in Blad5. De informatie eronder betreft de locatie waar de data moeten komen te staan uit Blad4, 6, 7, 8, 9.
Gaat het hier al fout? of zit de fout in de verwijzing naar de "case", zoals "Bedrijfsgegevens", "Warmtepompen" etc. en moet dit "Blad4 Bedrijfsgegevens" zijn in plaats van alleen "Bedrijfsgegevens"?
 
Target.Value gebruik je natuurlijk alleen maar als je de inhoud wilt weten van de cel waar het Change event door werd getriggerd.
 
Dan lijkt het erop dat die niet nodig is, maar dan vraag ik me nog steeds af waarom de code niet werkt.
 
Ga in de code eens op de regel Select Case Sh.Name staan en druk daar op de F9 toets.
Je hebt nu een Break Point toegevoegd.
Ga nu naar in je document naar het blad waar je wilt zijn en doe wat je wilt doen.
Op het moment dat de Workbook_Change getriggerd wordt zal de code op het Break Point stoppen.
Je kan dan van alle variabelen en objecten de waarden zien.
Met de F8 toets loop je er per regel doorheen.
Je ziet dan dus precies wat er waar gebeurt en welke waarden de objecten en variabelen hebben.

Bovenstaande is dus de zgn. Debug Mode.
 
Sorry, maar ben bang dat ik hier niet uit ga komen.

De waarde van de dropdown menus dienen gekoppeld te worden aan de waarden in dezelfde rij op de andere tabbladen. Deze waarden moeten getransporteerd worden naar de cellen onder de dropdown menus, zodat het een soort van invulveld wordt. Zie ook het Excel document. Ik weet niet welke acties in Excel moet voeren om dit inzichtelijk te krijgen in de DeBug mode.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan