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

Voorwaardelijke dropdownmenu's

Status
Niet open voor verdere reacties.

Sanremo

Gebruiker
Lid geworden
27 mrt 2018
Berichten
41
Beste forumleden!

Ik probeer al een tijdje middels VBA voorwaardelijk een dropdownmenu te creeeren (of niet).
Hier zijn een aantal voorwaarden van toepassing uit meerdere tabbladen.

Op blad 1 bevind zich in Cel C28 tm C58 een lijst met producten. De inhoud van deze lijst is variabel.
Op blad 1 bevind zich in Cel N3 een dropdown menu met 2 keuzes plus een blanke keuze.
Op blad 2 bevind zich een lijst met namen in kolom A en een lijst met "Ja" of niet in kolom B


Als Cel N3 NIET leeg is, moet de inhoud van de lijst op blad 1 cel 28 tm c52 worden vergeleken met de lijst in blad 2 kolom A.
Alle waardes die voorkomen in de lijst op blad 1 waar op blad 2 "Ja" achter staat moeten automatisch een drop down menu in de cel op dezelfde rij in kolom F.

Dus als Product 1 op de lijst op blad 1 voor komt gebeurd er niets, maar als Product 3 in de lijst op blad 1 voor komt moet er in kolom F een drop down menu achter verschijnen (3 keuzes: "Kies voltage", "400V" of "230V").

Bijgevoegd het bestandje!

Ik hoop dat er iemand kan helpen!
 

Bijlagen

Doorzoek het forum eens op "getrapte validatie", misschien dat je daar iets mee kunt.

Keuze A/B staat op tabblad 3 als zijn respectievelijk 400 V/230 V. Is daar nog wat mee te doen?
M.a.w. als product 3 voorkomt in de lijst op blad1, en in N3 staat keuze B dat er in F3 bij voltage "230V" komt te staan.
Klopt dat?

Misschien kun je voorbeeld ook nog eens invullen voor een aantal regels (m.a.w. wat voor uitkomst verwacht je) als dit niet klopt.
 
Bedankt voor de tip, ga ik morgen ochtend even naar kijken (kom er helaas nu niet aan toe).

Bijgaand voorbeeldbestandje met de gewenste uitkomst.

Bedankt voor het meedenken!
 

Bijlagen

@Timshel dat is precies wat ik bedoel. Het enige nadeel is dat als kolom C leeg is er een NB in kolom F komt te staan.
Mijn voorkeur gaat wel uit naar een macro zodat ik het volledige veld kan wissen na iedere actie en er geen codes in de cellen blijven staan (met risico van "beschadiging".

@emields N3 zou de macro activeren. Bedankt voor het voorbeeld maar helaas niet wat ik bedoel.

Beiden bedankt voor de moeite zo ver!
 
Wat ik ervan maak is dat er "voorwaardelijke gegevensvalidatie" geplaatst moet worden in een cel. Dus de ene cel wel, de andere niet, gebaseerd op een "ja" achter een product op blad 2.

Dat moet via VBA, kan geen andere manier bedenken. Ik ben er zelf nog niet uit hoe (maar ben dan ook geen VBA-specialist).
 
Laatst bewerkt:
Waarschijnlijk dan zoiets

Dat is precies wat ik bedoel @emields ! En zo had ik het zelf nooit voor elkaar gekregen :o

Ik zie alleen nog 3 dingen die volgens mij toch nog mis gaan:
- Hij herkent niet alle producten (eigenlijk alleen de "ja" achter "product 5", bij invoer van de rest gebeurd er niets)
- Als de producten gewijzigd worden verdwijnt de gegevens validatie niet (bij het wijzigen van product 5 naar product 2 blijft de drop down staan)
- Als er iets anders dan een waarde uit de lijst in blad 2 kolom a invoer krijg ik een foutmelding van de macro (er zullen ook waardes uit andere lijsten voorkomen op blad 1. De bedoeling is dat hij alleen op de waardes uit blad 2 kolom A waar "Ja" achter staat reageert).

Enorm bedankt voor de hulp zover! Zeer gewaardeerd!
 
Vervang de code van Emields door deze:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cl As Range
    
    If Not Intersect(Target, Range("C29:C50")) Is Nothing Then
        Target.Offset(, 3).ClearContents
        Set Cl = Sheets("Blad2").Columns(1).Find(Target.Value, LookAt:=xlWhole)
        With Target.Offset(, 3).Validation
            .Delete
            If Not Cl Is Nothing Then
                If LCase(Cl.Offset(, 1)) = "ja" Then
                    .Add xlValidateList, , , "=kies"
                    Target.Offset(, 3) = "kies voltage"
                End If
            End If
        End With
    End If
End Sub
 
Laatst bewerkt:
Dat werkt perfect in elk opzicht @Timshel

Nu is mijn VBA kennis helaas (blijkbaar) niet toereikend genoeg om de code te implementeren in mn bestaande sheet. Zou je me enigzins uit kunnen leggen hoe hij werkt? (voorbeeld, de "Ja" waardes uit blad 2 kolom B bevinden zich in mn eigen sheet op een tabblad met andere naam en in kolom F. )

Mijn dank is groot! Dit had mij nooit zelf gelukt!

* wat mogelijk ook van invloed is: De waardes in kolom C blad1 zullen in de daadwerkelijke sheet zijn gevuld met de code:

PHP:
"=ALS.VOORWAARDEN($N$3="";"";$N$3="Offerte A";ALS('Offerte A'!C28="";"";'Offerte A'!C28);$N$3="Offerte B";ALS('Offerte B'!C28="";"";'Offerte B'!C28))"

Met als gevolg dat de daadwerkelijke waarde altijd een code zal zijn.
 
Laatst bewerkt:
het eerste probleem is makkelijk op te lossen:
vervang
Set Cl = Sheets("Blad2").Columns(1).
door
set Cl =sheets("naam van het blad").columns(7).

het tweede probleem is niet op te lossen, je kan niet en een formule en een validatie in 1 cel zetten.
 
@SanRemo.
Je voorbeeld is kennelijk niet erg representatief. Plaats een representatief voorbeeldbestand.
 
het eerste probleem is makkelijk op te lossen:
vervang
Set Cl = Sheets("Blad2").Columns(1).
door
set Cl =sheets("naam van het blad").columns(7).

het tweede probleem is niet op te lossen, je kan niet en een formule en een validatie in 1 cel zetten.

Dat dacht ik ook maar werkte helaas (om onbekende reden) niet.

@Timshel Inde bijlage een nagenoeg exacte kopie van de opzet van het origineel. De oorsprong van de waardes op beide offerte bladen (A en B) is in het origineel alleen afkomstig uit een macro die alles iedere keer wist en plakt uit andere bronnen. Ook komen er in het origineel naast producten uit de lijst "Sanremo inhoud", ook producten uit andere bronnen voor.

Ik hoop dat dit meer duidelijkheid schept!
 

Bijlagen

Probeer het eens met deze code achter het werkblad "PRO FORMA".
De code wordt getriggerd als je het werkblad activeert of als je de cel met de offerte verandert.
Code:
Private Sub Worksheet_Activate()
    Dim Br
    Dim Cl As Range
    Dim i As Long
    
    Br = Range("B27").CurrentRegion
    For i = 2 To UBound(Br)
        With Cells(26 + i, 12)
            .ClearContents
            .Validation.Delete
            If Br(i, 2) <> "" Then
                Set Cl = Sheets("Sanremo inhoud").Columns(1).Find(Br(i, 2), LookAt:=xlWhole)
                If Not Cl Is Nothing Then
                    If LCase(Cl.Offset(, 5)) = "ja" Then
                        .Value = "kies voltage"
                        .Validation.Add xlValidateList, , , "=kies"
                    End If
                End If
            End If
        End With
    Next
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$N$3" Then Call Worksheet_Activate
End Sub
 
Probeer het eens met deze code achter het werkblad "PRO FORMA".
De code wordt getriggerd als je het werkblad activeert of als je de cel met de offerte verandert.
Code:
Private Sub Worksheet_Activate()
    Dim Br
    Dim Cl As Range
    Dim i As Long
    
    Br = Range("B27").CurrentRegion
    For i = 2 To UBound(Br)
        With Cells(26 + i, 12)
            .ClearContents
            .Validation.Delete
            If Br(i, 2) <> "" Then
                Set Cl = Sheets("Sanremo inhoud").Columns(1).Find(Br(i, 2), LookAt:=xlWhole)
                If Not Cl Is Nothing Then
                    If LCase(Cl.Offset(, 5)) = "ja" Then
                        .Value = "kies voltage"
                        .Validation.Add xlValidateList, , , "=kies"
                    End If
                End If
            End If
        End With
    Next
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$N$3" Then Call Worksheet_Activate
End Sub

Bedankt voor de moeite @Timshel ! Helaas gebeurd er niets (ook geen foutmelding, dat scheelt :). Ik heb voor alle zekerheid geprobeerd handmatig een waarde die overeen komt met een waarde uit de lijst Sanremo inhoud (met een "Ja" er achter) in te voeren als tekst (dus zonder ALS code) maar ook dit triggert helaas niets.
 
Bij mij werkt het prima.

Ondanks dat alle waardes, namen en macro's exact overeen komen, krijg ik het niet werkend. Werkelijk geen idee waar het aan kan liggen. Helaas bevat het origineel te veel informatie om hier openbaar te plaatsen.

*Er word wel 'een' macro uitgevoerd (undo functie in excel werkt niet meer na opnieuw openen sheet) maar verder is er niets te merken.
 
Laatst bewerkt:
Ik vraag me enkel af op welk blad(en) de validatie moet komen?
 
Ik ga niet eindeloos speculeren over mogelijke verschillen tussen voorbeeld en werkelijk bestand maar hier kun je nog even naar kijken: de code veronderstelt dat op weekblad PRO FORMA kolom A leeg is (dus ook geen formules met uitkomst “”) en de gegevens beginnen vanaf rij 27, in B27, met een kopregel. Boven de gegevens bevindt zich een aantal lege rijen.

Overigens raad ik zo’n lay-out af. Begin tabellen te allen tijde in A1.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan