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

Programma code vereenvoudigen

Status
Niet open voor verdere reacties.

janss028

Gebruiker
Lid geworden
27 okt 2008
Berichten
52
Is het mogelijk het onderstaande te vereenvoudigen. Ik gebruik een userformulier en kies hier een klant. De klant wordt opgehaald uit een tabblad Instellingen. Nu wil ik dat als ik een bepaalde klant selecteer ik dus ook alleen de projecten van die klant kan kiezen in het onderdeel project in het userformulier. Via onderstaande code lukt me dat wel, maar is wel omslachtig. Ook moet ik steeds onderstaande aanpassen als er een nieuwe klant bijkomt. Kan me iemand helpen hou ik dit kan vereenvoudigen. Het tabblad instellingen is mijn basis tabblad en hier voor ik dus eventueel nieuwe projecten en/of klanten in.

Alvast bedankt,
Ron



Code:
 If Klant = "Coop" Then
        Project.RowSource = "Instellingen!O2:O" & Sheets("Instellingen").Columns(15).SpecialCells(2).Count
        Else
        If Klant = "DRS" Then
            Project.RowSource = "Instellingen!P2:P" & Sheets("Instellingen").Columns(16).SpecialCells(2).Count
                Else
                If Klant = "Tesco" Then
                Project.RowSource = "Instellingen!Q2:Q" & Sheets("Instellingen").Columns(17).SpecialCells(2).Count
                    Else
                    If Klant = "Carrefour France" Then
                    Project.RowSource = "Instellingen!R2:R" & Sheets("Instellingen").Columns(18).SpecialCells(2).Count
                        Else
                        If Klant = "Carrefour Spain" Then
                        Project.RowSource = "Instellingen!S2:S" & Sheets("Instellingen").Columns(19).SpecialCells(2).Count
                            Else
                            If Klant = "Carrefour Belgium" Then
                            Project.RowSource = "Instellingen!T2:T" & Sheets("Instellingen").Columns(20).SpecialCells(2).Count
                                Else
                                If Klant = "Feneberg" Then
                                Project.RowSource = "Instellingen!U2:U" & Sheets("Instellingen").Columns(21).SpecialCells(2).Count
                                    Else
                                    If Klant = "Tegut" Then
                                    Project.RowSource = "Instellingen!V2:V" & Sheets("Instellingen").Columns(22).SpecialCells(2).Count
                                        Else
                                        If Klant = "Rewe" Then
                                        Project.RowSource = "Instellingen!W2:W" & Sheets("Instellingen").Columns(23).SpecialCells(2).Count
                                            Else
                                            If Klant = "Re-Vision" Then
                                            Project.RowSource = "Instellingen!X2:X" & Sheets("Instellingen").Columns(24).SpecialCells(2).Count
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If

End Sub
 
Laatst bewerkt door een moderator:
je kunt hem inkorten door het gebruik van select case.
dat scheelt je al heel veel if..then...end if.
kijk maar eens in de help of google eens op select case

mvg René
 
hoi janss028

maak een tabelletje met namen en gegevens en dan met vertikaal zoeken

groet sylvester
 
Hallo Rene,
Ik ben nog niet echt thuis in VBA. De bedoeling is dat ik de code niet meer hoeft aan te passen. Dus als er een nieuwe klant komt dan wordt hij ingevoerd in het tabblad INstellingen en dan moet het mogelijk zijn dat ik dus via het userform die nieuwe klant met de bijbehorende projecten meteen kan selecteren. Zou je me een kleine hint geven, dus in een voorbeeld?

Alvast bedankt
 
hallo Sylvester,

Zoals al beschreven ben ik nog niet echt thuis in VBA en wil me er meer in gaan verdiepen. Zou je me voor de bijgevoegde code een voorbeeldje kunnen maken?
Alvast bedankt,
Ron
 
Lijkt me handiger dat jij een voorbeeld bestand zonder gevoelige informatie plaatst.
Dat geeft een eventuele helper een beter idee van jouw wensen.

mvg
René
 
Laatst bewerkt:
Een kleine bijlage toegevoegd. Misschien is het dan iets duidelijker.

Gr
Ron
 

Bijlagen

  • Map1.rar
    15,8 KB · Weergaven: 21
Ron,

Met de volgende code kan je klanten toevoegen tot 255 stuks (max. aantal kolommen in excel 2003) en ruim 65000 projecten per klant max. aantal rijen.

Code:
Public C As Range

Private Sub Klant_Change()
    Project.Clear
    
    With Sheets("instellingen")
        For Each C In .Range(.Cells(2, Klant.ListIndex + 2).Address & ":" & .Cells(Rows.Count, Klant.ListIndex + 2).End(xlUp).Address)
            Project.AddItem C.Value
        Next
    End With
End Sub

Private Sub UserForm_Initialize()

    With Sheets("instellingen")
        For Each C In .Range("a2:a" & .Cells(Rows.Count, 1).End(xlUp).Row)
            Klant.AddItem C.Value
        Next
    End With
End Sub

Deze code komt in het userform. Daarna nog even bij de combobox klant de rowsource verwijderen.
 
Hallo Jelte,

Bedankt voor je oplossing. In grote lijnen werkt hij prima.
Alleen als ik het programma start dan staat Klant 1 al ingevuld en kan ik geen project kiezen. Deze is dan leeg. Selecteer ik Klant 2 dan kan ik wel de bijbehorende projecten kiezen. Kies ik vervolgens weer Klant 1 dan kan ik wel de projecten van klant 1 kiezen.
Is hier een oplossing voor. Ik het ook mogelijk om bij het starten geen klant ingevuld te krijgen. Dus het formulier is bij het starten helemaal leeg.

Alvast bedankt.
Ron
 
Hallo Ron,

Door de code die bij Userform_Initialize() staat weg te halen en onder Klant_Enter() te zetten.
 
Hallo Jelte,

De werking blijft hetzelfde dus bij klantis klant 1 al ingevuld bij het opstarten en kan dan geen project kiezen. Selecteer ik Klant 2 en ga vervolgens terug naar klant 1 dan kan ik wel een project kiezen bij klant 1.

Heb nog even een ander vraagje:
Bij klant staat Rowsourse ingevuld van a2 tot a4. Als er nu klanten bijkomen dan zie ik die klanten niet. Kan het bereik wel groter maken van bv a2 tot a10 maar dan hou ik het probleem als er weer meerdere klanten bijkomen. Kan ik die list ook dynamisch maken?. Ik zie bij projecten past de list zich automatisch aan.
Zoals eerder geschreven ben ik net bezig met VBA. ZOu je me misschien de code hiervoor kunnen geven?

Gr
Ron
 
Daarna nog even bij de combobox klant de rowsource verwijderen.

Zie mijn eerste reactie. De combobox Klant wordt nu ingevuld met:

Code:
Private Sub Klant_Enter()
     With Sheets("instellingen")
        For Each C In .Range("a2:a" & .Cells(Rows.Count, 1).End(xlUp).Row)
            Klant.AddItem C.Value
        Next
    End With
End Sub

Wat je nu bij Rowsource hebt staan is dus overbodig.
Lost ook meteen het probleem op dat er al wat staat zodra je het Userform opent en je hebt nu de range("a2:a65536")
 
Laatst bewerkt:
Hallo Jelte,

Het wil me niet lukken. Beide comboboxen zijn nu leeg. Ik heb bij klant de rowsourse leeg gemaakt en heb de volgende code:

Public C As Range

Private Sub Klant_Change()

Project.Clear

With Sheets("instellingen")
For Each C In .Range(.Cells(2, Klant.ListIndex + 2).Address & ":" & .Cells(Rows.Count, Klant.ListIndex + 2).End(xlUp).Address)
Project.AddItem C.Value
Next
End With


End Sub



Private Sub UserForm1_Initialize()
With Sheets("instellingen")
For Each C In .Range("a2:a" & .Cells(Rows.Count, 1).End(xlUp).Row)
Klant.AddItem C.Value
Next
End With

End Sub


Gr
Ron
 
heb bijlage toegevoegd. Kun je hieer eens naar kijken?
 

Bijlagen

  • Map1.rar
    14,2 KB · Weergaven: 20
Die 1 bij UserForm1_Initialize() moet weg. Moet dus dit zijn:

Code:
Private Sub UserForm_Initialize()

With Sheets("instellingen")
For Each C In .Range("a2:a" & .Cells(Rows.Count, 1).End(xlUp).Row)
Klant.AddItem C.Value
Next
End With

End Sub
 
Hallo Ron,

Fout kwam waarschijnlijk doordat je in het deel waar je de code neerzet het eerste deel zelf in hebt getypt. het deel:

Code:
Private Sub Userform_Initialize()

End sub

Tip. Wanneer je de 2 keuzelijsten gebruikt die bovenaan het scherm staan, dan voorkom je dit soort fouten.
De linker zijn alle objecten die in het Userform staan de rechter wat er met het object mogelijk is.
Dus kies je in de linker voor Klant en in de rechter voor Enter, dan zet VBA autom. de sub neer.:thumb:

Is ook handig om snel te navigeren wanneer je veel objecten hebt en lange codes.:thumb:
 
jelte bedankt,

Sorry voor de late reactie maar ben een paar dagen weg geweest. Het is me trouwens gelukt.

Gr
Ron
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan