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

artikeltabel koppelen aan eigen tabel dmv VBA

Status
Niet open voor verdere reacties.

spoelstra

Gebruiker
Lid geworden
8 feb 2016
Berichten
36
Hallo,
Ik wil graag een artikeltabel van derden koppelen aan een eigen tabel dmv een formule of VBA.
Nu heb ik op het forum onderstaande routine opgedaan(button vertaal) en die werkt goed maar vlg mij kan het beter. Van de 64 artikelen matchen er maar 28 en de rest zou ik dan handmatig moeten koppelen.
Wie kan mij uitleg geven hoe ik dit kan verbeteren en wat de routine precies doet. (begrijp het niet helemaal)
Bijgevoegd het bestand waarvan ik bij de rode cellen ook een matching verwacht en weet niet wat ik hiervoor in de routine moet aanpassen.

Alvast bedankt voor de uitleg,
 

Bijlagen

  • testbestand.xlsm
    177,3 KB · Weergaven: 2.903
Laatst bewerkt:
Als je een code niet begrijpt dan kan je er met <F8> doorheen lopen. Wat je verwacht te vinden bij bv 'Embasol houtwormmiddel (5 ltr.) can' zal nog wel een keer uitgelegd worden denk ik.

Met een kleine aanpassing krijg je een paar meer resultaten.
Code:
If InStr(ar1(j, 1), ar(jj, 1)) Or LCase(Split(ar1(j, 1))(0)) = LCase(Split(ar(jj, 1))(0)) Then
 
Hallo, Dank voor je reactie,

Heb de aanpassing gedaan in mijn originele tabel van 3100 variabelen en de matching ging met de aanpassing van 990 naar 1431 dus al een hele vooruitgang.
Misschien is er nog iemand die een aanvulling kan doen zodat het nog hoger wordt maar ben al heel blij met deze aanpassing.

Groet,

Jaap
 
Hallo ,

Ik zie dal bepaalde variabelen net niet de goede matching geven. Bijvoorbeeld : Atlantis OD (5 ltr.) can match hij nu met Atlantis. In onze tabel zijn hier de volgende variabelen voor beschikbaar
Atlantis
Atlantis (12748)
Atlantis OD
Atlantis OD (14542)

Door middel van routine plaatst hij de Atlantis terwijl ik hem graag wil matchen met Atlantis OD en liefst ook nog met toelatingsnummer erbij maar is niet noodzakelijk. (Atlantis OD (14542))

Hij zoekt dus op eerste aaneengesloten karakters en zodra er een spatie tussen zit stopt hij en rapporteert.


Misschien heeft iemand nog een oplossing om de routine aan te passen . In bijgevoegd EXcel voorbeeld raporteert hij bij Admire WG (100 gr.) flacon <> Admire terwijl het eigenlijk had moeten zijn Admire WG


Alvast bedankt voor jullie inzet.

Jaap
 
Ik doe een gokje.
Code:
For j = 2 To UBound(ar1)
    For jj = 2 To UBound(ar)
      If InStr(ar1(j, 1), Split(ar(jj, 1))(0)) Then ar1(j, 2) = ar(jj, 2)
    Next jj
  Next j
 
Hallo,

Deze routine zorgt wel vaker dat het toelatingsnummer erachter komt maar geeft ook veel foute koppelingen.(reden weet ik niet omdat ik code niet goed begrijp )

Voor de duidelijkheid de bron staat altijd op alfabetische volgorde.

Misschien is er nog iemand die de code kan verbeteren,

Iedereen bedankt voor de reactie.

Jaap
 
misschien heb je hier iets aan:
het gaat alleen om het principe .
het is niet geoptimaliseerd en het zoekt alleen naar het eerste woord.

als je met dit principe iets wil laat het dan weten.
het kan later verfijnt worden door eventueel naar meerdere woorden te kijken.
 

Bijlagen

  • testbestand 4_1.xlsm
    180,9 KB · Weergaven: 56
Hallo Sylvester,


Op zich lijkt me dit een verbetering gezien het de juiste variabelen zoekt alleen is het nu nog de kunst om de routine aan te passen zodat hij de beste variabele in een cel zet.
Jou routine plaatst alle variabelen(meestal een stuk of 3) die overeenkomen tussen de pipe . Als ik zeg dat je de langste string moet kiezen (is namelijk de beste kun je dit dan afregelen in de routine en als hij niks vindt zoals het nu al werkt dat hij zegt "niet gevonden" . Ik kan deze dan makkelijk sorteren en handmatig de variabele toevoegen. De routine moet dus zo zijn dat als hij iets vindt dat het 99% goed is. Anders moet ik alles nog één voor één controleren.


Kun je die functie die je hebt geschreven gewoon ook aan die vertaal button koppelen en draaien?

Hoor graag je reactie en als je nog meer info moet hebben geef je het maar aan.

Alvast hartelijk dank voor je actie,

Jaap
 
Plaats het bestand eens met de verkeerde en juiste gegevens, benieuwd waar het in zit.
 
Hallo, Ik heb en nieuw bestand toegevoegd waar de oude routine de variabelen erbij zoekt(blauwe button) en de aanpassing van HSV heb ik in de grijze button ondergebracht. In kolom C heb ik handmatig de juiste variabelen gezet en kun je zien waar hij niet match. Misschien kan iemand nog een aanvulling doen ? Je kan ze onafhankelijk van elkaar draaien door op de button te klikken.
Als hij geen match kan vinden mag hij het wegschrijven onder ""niet in tabel"

Alvast hartelijk dank
Jaap
 

Bijlagen

  • testbestand.xlsm
    182 KB · Weergaven: 1.125
Leg eens uit waarom het resultaat van "Admire WG (100 gr.) flacon", Admire (11483) moet zijn ipv Admire o-teq?
 
Hallo,

Terechte vraag:

In de aangeleverde artikelentabel staan ook middelen (gewasbeschermingsmiddelen) die vervallen zijn. Als ze zijn vervallen dan wil ik ze toch graag koppelen aan een middel en dan aan het middel met een toelatingsnummer).(12345)


Indien dit is af te regelen zou dat de meest praktische oplossing zijn. Je ziet namelijk nog wel middelen in een jaar die vervallen zijn maar nog wel worden verkocht. Anders zou ik ze vooraf uit de aangeleverde tabel wel kunnen verwijderen maar dan hebben we later in het proces weer problemen omdat dit middel dan niet voorkomt en alsnog handmatig gekoppeld moet worden en dat willen we graag voorkomen.

Conclusie : Hij moet het koppelen aan het middel met het (vijf cijferige nummer tussen de haken).

Hopelijk is dit af te regelen,

Jaap

.
 
Dichterbij dan dit kom ik vooralsnog niet.

Code:
Sub AANpassing_HSV()
Sheets("blad2").Range("B2:B44").ClearContents
arr = Sheets("Blad1").Cells(1).CurrentRegion
With Sheets("Blad2").Cells(1).CurrentRegion
  sq = .Value
  For j = 2 To UBound(sq)
    For jj = 2 To UBound(arr)
      If LCase(Split(sq(j, 1))(0)) Like LCase(Split(arr(jj, 1))(0)) Then
       If InStr(arr(jj, 2), "(") Then
          sq(j, 2) = arr(jj, 2)
          Exit For
      End If
    End If
   Next jj
  Next j
 .Value = sq
End With
End Sub

alhoewel?
Code:
Sub AANpassing_HSV()
Sheets("blad2").Range("B2:B44").ClearContents
arr = Sheets("Blad1").Cells(1).CurrentRegion
With Sheets("Blad2").Cells(1).CurrentRegion
  sq = .Value
  For j = 2 To UBound(sq)
    For jj = 2 To UBound(arr)
      If LCase(Split(sq(j, 1))(0)) Like LCase(Split(arr(jj, 1))(0)) Then
       If InStr(arr(jj, 2), "(") Then
       If LCase(sq(j, 1)) <= LCase(arr(jj, 1)) And sq(j, 2) <= arr(jj, 2) Then
          sq(j, 2) = arr(jj, 2)
          Exit For
        Else
          sq(j, 2) = arr(jj, 2)
      End If
    End If
    End If
   Next jj
  Next j
 .Value = sq
End With
End Sub
 
Laatst bewerkt:
Waar gaat het eigenlijk om? Een paar duizend records? Een eenmalige actie? Goede programmeurs van het helpmij.nl forum voor het karretje spannen zonder dat je zelf maar enige moeite neemt om de codes te analyseren en er zelf wat mee te 'rommelen'?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan