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

combobox vullen met gegevens uit 3 kolommen

Status
Niet open voor verdere reacties.
Code:
Private Sub CommandButton2_Click()
TxtIdentificatie.Enabled = False
s = LCase(TxtIdentificatie)
With Sheets("Bron")
    .Cells(1).CurrentRegion.Sort .[A1], , .[B1], , , .[C1], , True
    ar = .Cells(1).CurrentRegion
    For j = 2 To UBound(ar)
      If InStr(1, LCase(ar(j, 1)), s) Then
        If InStr(1, c00, Join(Application.Index(ar, j, Array(2, 3)), ", ")) = 0 Then
            c00 = c00 & "|" & Join(Application.Index(ar, j, Array(2, 3)), ", ")
        End If
      End If
    Next j
End With
If Len(c00) > 0 Then ComboBox2.List = Split(Mid(c00, 2), "|") Else MsgBox "niets gevonden"
End Sub
 
@ ikselle
Omdat ik in je code zag dat je het eerst met een Dictionary geprobeerd had wilde ik je deze toch niet weerhouden.
 

Bijlagen

Laatst bewerkt:
@Warme bakkertje
Inderdaad heb dit eerst geprobeerd omdat ik het niet kende. Ik concludeer dat er eigenlijk verschillende manieren zijn. De vraag is welke is de snelste, welke geeft het minst risico op een crash omwille van hardware en is er een verschil naar beveiliging van de gegevens ? Ik heb ook al eens gewerkt met collections en vond dit flexibeler dan arrays (makkelijker om te sorteren, elementen te verwijderen, ...). Nu dictionnary. Ik ben er nog niet helemaal uit welke manier de beste is.
De uiteindelijke bedoeling is dit excelbestand te laten draaien door derden en liefst zonder toegang tot gegevens en met minimaal risico tot crashen. Ik denk dat dit veel beter kan in access (zeker qua beveiliging) maar stoot daar op problemen die ik niet opgelost krijg. Spijtig genoeg zijn er minder "goede helpers" te vinden voor acces dan voor excel. Heb in ieder geval veel respect voor jullie !:thumb:
Nogmaals bedankt voor de moeite en de genomen tijd !
 
Sorry, toch nog bijkomend vraagje. Heb zonet ontdekt dat wanneer je in de combobox slechts "B" ingeeft dat dan alle nrplaten beginnend met letter B opgenomen worden. Waar en hoe kan dit getest worden? Tnx
 
Is er een bepaalde lengte van de nummerplaten, anders kan er op gecontroleerd worden dat de invoer minimum dat aantal tekens moet bevatten alvorens verder te gaan.

Als antwoord op je eerdere vraag moet ik je zeggen dat er geen snelheidsverschil is tussen de Dictionary methode en de Array methode. Heb ze beiden getest op 5000 rijen en ze waren op enkele tienden van seconden na even snel. Beide methoden veroorzaken m.i. ook geen problemen betreffende hardware en wat de beveiliging betreft is het maar hoe jij alles programmeert. Zolang je ervoor zorgt dat ze niet verder dan het UF kunnen is er geen enkel probleem (openen bij het openen v/h bestand en het bestand sluiten via het UF)
Het enige waar je dan wel voor moet zorgen is een achterdeurtje waardoor jij zelf nog naar binnen kan om eventueel aanpassingen te maken.

Spijtig genoeg zijn er minder "goede helpers" te vinden voor acces dan voor excel
Hierin vergis je je toch denk ik aangezien helper OctaFish hier toch een autoriteit is als het Access betreft en dat er maar weinig is dat hij niet kan oplossen denk ik.
 
Laatst bewerkt:
@Warme bakkertje. Neen er is geen vastbepaalde lengte voor een Belgische nummerplaat. Sinds kort kan je immers indien je ervoor betaalt bijv. "JEF" als nummerplaat aanvragen tenzij ze natuurlijk reeds in gebruik is :D. En op een parking kunnen natuurlijk ook buitenlanders terecht.
Ik denk dat ik opnieuw zal moeten testen of het ingevoerde gegeven reeds voorkomt in de reeds bestaande lijst. Zoniet wordt er een andere userform geopend om de gebruiker toe te laten de nieuwe gegevens in te voeren. De bedoeling is dat deze nieuwe gegevens dan ingevuld worden op het "bron"sheet bij de andere gegevens waarbij dan wel enkele andere gegevens in andere kolommen toegevoegd worden.
Wat Octafish betreft :
Dat is natuurlijk een monument. Voor deze man ben ik zelfs persoonlijk helemaal naar de jaarlijkse reunie van "Helpmij" in Nederland gereden. Spijtig genoeg was hij bij mijn aankomst net vertrokken. :confused:
Maar op eerdere posts van mijnentwege is er van anderen wat access betreft weinig respons. Als je dat vergelijkt met Excel ....
 
Code:
Private Sub CommandButton2_Click()
    't = Timer
    TxtIdentificatie.Enabled = False
    With Sheets("Bron")
        .Cells(1).CurrentRegion.Sort .[A1], , .[B1], , , .[C1], , True
        ar = .Cells(1).CurrentRegion.Value
    End With
    Set Dic = CreateObject("scripting.dictionary")
    For j = 2 To UBound(ar)
        If LCase(ar(j, 1)) = LCase(TxtIdentificatie) Then x0 = Dic.Item(Join(Application.Index(ar, j, Array(2, 3)), ", "))
    Next
    If Dic.Count = 0 Then ComboBox2.Clear: Exit Sub
    ComboBox2.List = Dic.keys
    'MsgBox Timer - t
End Sub
 

Bijlagen

Laatst bewerkt:
Dank u wel Warme bakkertje, hier kan ik mee verder ! Perfect !:thumb:
 
In jouw aanvullende uitleg in #6
(zodra een letter getypt wordt wordt de nrplaat reeds zichtbaar of hij kan scrollen)
is toch geheel in overeenstemming met
Heb zonet ontdekt dat wanneer je in de combobox slechts "B" ingeeft dat dan alle nrplaten beginnend met letter B opgenomen worden.
 
VenA Je hebt gelijk! Maar ik dacht op dat moment aan informatief opzoeken en niet zozeer aan bewaren. Mea culpa mea maxima culpa. Bedankt voor je terechte opmerking!
 
Heb je bestand nog wat uitgebreid.
Eerst wordt er een controle uitgevoerd of de gezochte nrplaat al dan niet aanwezig is in de database. Indien wel dan wordt de code uitgevoerd zoals voorheen.
Indien niet wordt er een nieuw UF (simpele uitvoering die je nog naar eigen wens kan verfraaien) geopend om de nieuwe gegevens in te vullen en weg te schrijven.
 

Bijlagen

@Warme bakkertje bedankt voor de erg ingekorte code. Heb ondertussen nog een en ander toegevoegd en voor meBekijk bijlage identificatie_WB3b.xlsmzelf hier en daar commentaar bijgevoegd. Het zaakje krijgt stilaan zin. Nog wat toeters en bellen maar ... heb opnieuw problemen met invoer van "12345". Volgens mij te maken met
Code:
 If Not IsError(Application.Match(TxtIdentificatie, ar2, 0)) Then
.
 
Als tijdens het ontwerp van het userform de eigenschap Tabindex van het tekstvak TxtIdentificatie de waarde 0 krijgt (zie tabvolgorde) is

Code:
Private Sub UserForm_Initialize()
    TxtIdentificatie.SetFocus
End Sub

overbodig.

Het gebnruik van 'setfocus' is vaak een indicatie van een onvoldoende doordacht userform-ontwerp.
 
@snb Bedankt. Heb de code van jouw andere opzet met verbazing bekeken. Wat je met zo weinig code kan in gang steken. :thumb: Ik had daar wel wat regeltjes meer voor nodig :o Maar samen met warme bakkertje, VenA en HSV was ik nu reeds een heel eind in mijn applicatie gevorderd. En met jouw stukje code zou ik alles toch opnieuw moeten bekijken.
 
Heb het format van kolom A aangepast naar tekst en alles lijkt nu naar wens te gaan. Nog wat andere aanpassingen gemaakt.
 

Bijlagen

Bedankt Warme bakkertje voor je bijdragen, je aanpassingen (in de late uurtjes :)). Heb opnieuw veel geleerd met deze oefening.
Uiteraard ook bedankt aan de anderen voor de nuttige inbreng en het meedenken. Soms doet bepaalde code mij denken aan wiskunde en meer bepaald aan "Het ontbinden in factoren" en in die lessen was ik geen hoogvlieger; had misschien toendertijd beter opgelet :d.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan