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

VBA Suggesties geven tijdens typen in zoekvak en bij klikken waardes kopieren

Status
Niet open voor verdere reacties.

Sanremo

Gebruiker
Lid geworden
27 mrt 2018
Berichten
41
Beste allemaal!

Ik ben opzoek naar een oplossing voor het volgende:

- Op Sheet 1 heb ik een aantal cellen waar o.a. naw gegevens van klanten ingevuld kunnen worden (gegevens boven elkaar, dus rij 1 Contactpersoon, rij2 email, rij3 tel nr, bedrijf, adres, postcode woonplaats, land)
- Op sheet 2 bevind zich een database met klantgegevens waarbij in iedere kolom andere informatie is ingevuld (A= bedrijf, B = contactpersoon, C = email, telefoonnr, adres, postcode woonplaats, land). Elke rij heeft dus een andere klant zijn of haar informatie.
- Als er nieuwe informatie op Sheet 1 word ingevuld word dit bij het afsluiten van Sheet 2 automatisch gekopieerd naar de eerstvolgende vrije rij op sheet 2.

Het invullen van gegevens op Sheet 1 gebeurd in principe handmatig wanneer het om een nieuwe klant gaat, maar wanneer het om een bestaande klant gaat zou ik dit graag eenvoudig op willen kunnen zoeken en automatisch in willen laten vullen.

Het mooiste lijkt me als er een tekstvlak boven de cellen komt waar gezocht kan worden op 1 van de waardes uit een database (bijv. op naam, bedrijfsnaam, of adres).
Tijdens het typen zou het mooi zijn als er suggesties in een drop down oid verschijnen met overeenkomstige gegevens uit Sheet 2, zodat deze kunnen worden aangeklikt en de bijbehorende informatie automatisch ingevuld kan worden op Sheet 1.

Hierbij is het wel belangrijk dat de suggesties alleen informatie uit bepaalde kolommen laten zien, bijv alleen: Bedrijfsnaam i.c.m. contactpersoon.
Dit omdat het goed voor kan komen dat er meerdere contactpersonen binnen hetzelfde bedrijf in de database voorkomen.

Ik ben erg benieuwd of hier een oplossing voor bestaat (liefst zo eenvoudig mogelijk ivm mijn beperkte vba kennis)!
 

Bijlagen

Helpt dit u verder?
Je kan zoeken op bedrijf, contactpersoon of adres.
Met de knop nieuw kan je een nieuwe klant ingeven.
Als je de juiste klant hebt gevonden, klik in de lijst om de textboxes te vullen.
Dan kan je wijzigingen aanbrengen.
De knop VB invullen staat voor voorblad invullen (D9 tot D10 op uw eerste blad)
 

Bijlagen

Een variant op je zoekbox dotchie
Code:
[FONT=Verdana,Arial,Tahoma,Calibri,Geneva,sans-serif]Private Sub T_08_Change()
  Select Case C_00.ListIndex
    Case 0
         Col = 1
    Case 1
         Col = 2
    Case 2
         Col = 5
  End Select
  
  With LB_00
    .List = Sheets("Klanten").ListObjects("data_tbl").DataBodyRange.Value
    For i = .ListCount - 1 To 0 Step -1
        If Not UCase(.List(i, Col)) Like "*" & UCase(T_08) & "*" Then .RemoveItem i
    Next
  End With
End Sub
[/FONT]
 
@Gert Bouwmeeste Bedankt voor de link, ik ga kijken!

@gast0660 en @Jack Nouws Dat is exact wat ik bedoel! Perfect!! Heel hartelijk dank!

Ik heb alleen enige moeite met het implementeren in mijn originele bestand (alle tabblad namen gewijzigd, cellen etc komen overeen). Mijn vermoeden is dat dit te maken heeft met de opmaak op het tabblad klanten, deze krijg ik niet 1 op 1 over. De gedefineerde naam NRs krijg ik er bij mijn eigen document niet in.. Ben erg benieuwd wat ik verkeerd doe :d

Melding:
"Fout 1004 tijdens uitvoering.
Eigenschap Max van WorksheetFuction kan niet worden opgehaald"
 
Laatst bewerkt:
Ik doe het zo.
Selecteer eerst de nummers en klik dan op formules.
Nrs.jpg
 
Ik doe het zo.
Selecteer eerst de nummers en klik dan op formules.
Bekijk bijlage 337913

Ik leg het wat onduidelijk uit. De naam defineren lukt wel, alleen vind ik in je voorbeeld bestand een bereik genaamd "NRs" dat de range "=data_tbl[Nr.]" defineert. Als ik dit invoer krijg ik terug dat er geen formule staat. Ik vermoed dat de foutmelding die naar voren komt hiermee te maken heeft maar misschien zie ik iets anders over het hoofd :d
 
Ik heb geen idee wat je bedoelt.
Welke foutmelding?

Bedankt voor je reactie! Bovenstaande is inmiddels gelukt, ik was even niet zo pienter bezig ;)

Wel loop ik tegen enkele andere zaken aan:
- Om het voor mezelf overzichtelijk te maken heb ik enkele onderdelen hernoemd. Echter loop ik nu (zoals te verwachten) tegen foutmeldingen aan.
- Ook heb ik het vak "land" tot een keuzelijst gemaakt. De enige waardes die hierin mogen staan zijn namelijk "Nederland" of "Belgie". Bij andere waardes zorgt dit voor fouten in het verdere script van de pagina.
- Ik zou graag nieuwe invoer alleen willen opslaan als alle invulvakken zijn ingevuld. Het liefst zelfs gecontroleerd op volledigheid, maar ik weet niet of dit mogelijk is. Dus bij lege vakken een melding "vul alle waardes in" oid.
- Als laatste zou ik graag de knop "kies klant" de functie willen geven dat de geselecteerde klant word ingevuld op pagina 1 en de userform gesloten word.

Ik ben benieuwd wat er mogelijk is.. Vele dank voor alle hulp zo ver!!
 

Bijlagen

Hallo,
In bijlage voorbeeld met de gevraagde aanpassingen.
Klant invullen, Nederland België en alles moet ingevuld worden. (kijk in de eigenschappen van de text-en combo boxen Tags)
Controls hernoemen is niet zo slim, ik heb een reden waarom ik mijn controls zo benoem.
Om een voorbeeld te geven.
In het listbox click evend gebruik ik volgende code.
Code:
For i = 0 To 7
    Me("T_0" & i) = LB_00.Column(i)
Next
Als jij de controls herbenoemt krijg je dit, om hetzelfde te bereiken.
Code:
Bedrijf.Value= Suggesties.column(1)
Contactpersoon.value=Suggesties.column(2)
zo zeven maal. Misschien typ jij graag.;)
Als je dingen duidelijk wilt maken kan je in de code zoveel uitleg ingeven als je wilt.
Je typt een apostrofe en daarna de uitleg.
voorbeeld
' T_01 is bedrijf
 

Bijlagen

Maak gewoon slim gebruik van de tabel. De kolomkoppen bepalen waar je op kan zoeken. Het telkens opnieuw instellen van standaard instellingen van een listbox is nergens voor nodig. Gewoon 1 x doen en klaar. De hele verwerking van de aanpassingen vindt plaats binnen de tabel zonder trage zoekfuncties maar obv de listbox of bij een nieuwe invoer het aantal rijen dat al in de tabel staat.
 

Bijlagen

Laatst bewerkt:
@gast0660, @Jack Nouws,

De TS heeft mij benaderd via een PM. Mogelijk jullie ook. Ik heb zijn verzoek afgewezen om het verder te ontwikkelen. Zijn we iig niet alle drie hetzelfde aan het doen;)
 
Laatst bewerkt:
Hallo,
In bijlage voorbeeld met de gevraagde aanpassingen.
Klant invullen, Nederland België en alles moet ingevuld worden. (kijk in de eigenschappen van de text-en combo boxen Tags)
Controls hernoemen is niet zo slim, ik heb een reden waarom ik mijn controls zo benoem.
Om een voorbeeld te geven.
In het listbox click evend gebruik ik volgende code.
Code:
For i = 0 To 7
    Me("T_0" & i) = LB_00.Column(i)
Next
Als jij de controls herbenoemt krijg je dit, om hetzelfde te bereiken.
Code:
Bedrijf.Value= Suggesties.column(1)
Contactpersoon.value=Suggesties.column(2)
zo zeven maal. Misschien typ jij graag.;)
Als je dingen duidelijk wilt maken kan je in de code zoveel uitleg ingeven als je wilt.
Je typt een apostrofe en daarna de uitleg.
voorbeeld
' T_01 is bedrijf


Bedankt voor je reactie en het meedenken gast0660! Ik loop er op een of andere manier tegen aan dat ik de codes niet werkend naar mijn originele bestand krijg, ondanks dat het voorbeeld bestand een exacte kopie van de betreffende pagina's is:

Alles lijkt op de eerste blik te werken enkel wijzigingen worden niet opgeslagen en de zoekfunctie doet niets tijdens typen (wanneer er geen zoekcriteria geselecteerd is). Zodra er echter een zoekcriteria word geselecteerd en er dan getypt wordt loopt hij vast met fout 9 tijdens uitvoering: "Het subscript valt buiten bereik".

Wie weet waar dit aan zou kunnen liggen of is bereid een blik in het originele bestand te doen om me te kunnen vertellen wat ik fout doe? Ik zou er graag van leren :)

Kleine update: Ik heb inmiddels de volledige "klanten" sheet van je voorbeeld bestand naar het originele bestand gekopieerd, en de Cmd1 knop incl code eveneens, maar blijf dezelfde foutmelding krijgen.:confused:
 
Laatst bewerkt:
hi,
Kijk eens in Tab formules -> namen beheren in mijn voorbeeld, heb jij in het echte bestand hetzelfde aangemaakt?
 
hi,
Kijk eens in Tab formules -> namen beheren in mijn voorbeeld, heb jij in het echte bestand hetzelfde aangemaakt?

Ah! Top, bedankt!
Daar zit inderdaad een verschil! het aanmaken van data_tbl ging zonder problemen, echter bij het aanmaken van "NRs, =data_tbl[Nr.]" krijg ik de melding dat hij hem niet als formule herkent. (of ik er ' aan toe wil voegen om er tekst van te maken). Het is de [Nr.] die hij niet wil erkennen. Het bereik "=data_tbl" pakt hij namelijk wel.
Ik heb al gezocht of dit wellicht een taal issue kan zijn (ik gebruik nederlands) maar kan voor de [Nr.] geen vertaling vinden?

Zal vast iets heel simpels zijn, maar ik kan niet ontdekken wat :d
 
Probeer het eens op volgende manier.
Selecteer de nummers zonder de header., ga dan naar formules -> namen beheren en klik op nieuw.
 
Probeer het eens op volgende manier.
Selecteer de nummers zonder de header., ga dan naar formules -> namen beheren en klik op nieuw.

Ook geprobeerd. Ik kan het bereik de naam "NRs" geven en dat werkt, alleen blijft de foutmelding bij zoeken in het userform nog steeds.
 
Check volgende voor het zoeken:
is de naam van de combobox C_00?
is de naam van de textbox T_08?
is de naam van je werkblad Klanten? (misschien ergens een spatie die niet opvalt)
is de naam van je tabel data_tbl?
 
Check volgende voor het zoeken:
is de naam van de combobox C_00?
is de naam van de textbox T_08?
is de naam van je werkblad Klanten? (misschien ergens een spatie die niet opvalt)
is de naam van je tabel data_tbl?

Heel hartelijk dank voor de hulp en uw geduld zover!

Ja, ja, ja en ja.. Het enige verschil dat ik kan vinden is de verwijzing onder "NRs".

Overigens, het deel dat word ge-highlight bij de foutmelding is
Code:
.List = Sheets("Klanten").ListObjects("data_tbl").DataBodyRange.Value
onder "T_08_Change()". Wellicht dat dat nog iets verduidelijking geeft (ik ben bang van niet).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan