Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Code aanpassen  (gelezen 23015 keer)

0 leden en 1 gast bekijken dit topic.

Offline tonnie

  • Volledig lid
  • **
  • Berichten: 104
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #15 Gepost op: 14 augustus 2018, 21:22:23 »
De macro in mijn programma gemaakt die van JeanPaul krijg ik nog niet goed is alleen nog een kwestie van laten starten op rij 21.

De macro van Alfa werkt perfect ook de startrij veranderen gaat prima, alleen doet de macro er ongeveer 30 seconden over om 65 rijen af te lopen  :'(
Er is duidelijk iets niet goed op mijn laptop, bij elke macro die ik laat draaien wordt hij slomer en slomer.

Als ik mijn bestand naar iemand mag doorzetten om even te kijken wat er mis is hoor ik dat graag, ik kan het echt niet zo openbaar zetten. :help:

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Code aanpassen
« Reactie #16 Gepost op: 14 augustus 2018, 21:46:39 »
De macro in mijn programma gemaakt die van JeanPaul krijg ik nog niet goed is alleen nog een kwestie van laten starten op rij 21.

Gaat alles 20 rijen naar beneden? Elke kolom? Indien enkel de resultaten van de macro (H:K), dan kan je een proberen met:
For j = 0 To UBound(sn) veranderen in
For j = 19 To UBound(sn)   ' met 19 gaat hij de eerste reeks beginnen op H21


Ik kan je bestand testen op Windows 7 en Windows 10, excel 2007 en excel 365 als je dat wilt: SoftAid@oplossing.be

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline tonnie

  • Volledig lid
  • **
  • Berichten: 104
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #17 Gepost op: 14 augustus 2018, 21:57:15 »
Hoi SoftAid,

Ik heb het volgende toegevoegd in de macro en ook in die zoekfunctie:

Application.Calculation = xlmanual
en onderaan
Application.Calculation = xlautomatic

binnen 1 seconden is hij klaar.
Op zich opgelost, maar hij deed het altijd goed. Waarom wordt hij nu zo sloom dat wil ik wel graag weten.

Ik zal die materiaal lijst even naar behoren inbouwen en dan zet ik hem naar jou door, dat is trouwens niet die versie met die gele tabellijst maar een andere.

Die had ik ook geprobeerd die 19 in het voorbeeld werkt het wel maar in het bestand niet.

Offline tonnie

  • Volledig lid
  • **
  • Berichten: 104
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #18 Gepost op: 15 augustus 2018, 00:35:03 »
Daar ben ik weer,

JeanPaul die van jou doet het goed, maar ik wil starten op rij 21. Uhhh hoe moet dat :-[

Alfa die van jou kan ik aanpassen maar sorteert niet goed, ik heb er een andere lijst in geplakt maar hij pakt bijvoorbeeld de plinten te weinig en de nemef sloten van een bepaald type.

Ik vraag me trouwens af hoe het bij jullie draait? bij mij gaat het weer stroperig.

Offline alfa

  • Lid
  • *
  • Berichten: 83
  • Oplossing.be
Re: Code aanpassen
« Reactie #19 Gepost op: 15 augustus 2018, 08:02:42 »
Alfa die van jou kan ik aanpassen maar sorteert niet goed, ik heb er een andere lijst in geplakt maar hij pakt bijvoorbeeld de plinten te weinig en de nemef sloten van een bepaald type. Ik vraag me trouwens af hoe het bij jullie draait? bij mij gaat het weer stroperig.
Mijn macro sorteert helemaal NIET, dat kun je toch zien? In het bestand dat je hier plaatste, is de kolom waarop een bewerking moet worden uitgevoerd, al gesorteerd, dan ga ik er vanuit dat sortering niet meer in de macro moet worden opgenomen, want dan is dat overbodige code. Maar wil je sortering alsnog, voeg dan een sorteerroutine toe, die kun je desnoods met de recorder opnemen.
Uitvoering van de bestaande macro duurt niet langer dan 1 seconde.
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline tonnie

  • Volledig lid
  • **
  • Berichten: 104
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #20 Gepost op: 15 augustus 2018, 11:06:41 »
Alfa waarom heb je nou toch zo'n kort lontje.....

Ik bedoel hij telt nog steeds niet goed op, ja dat is wat anders dan sorteren.

Ik heb een andere lijst er in gedaan bij zowel jouw macro als die van JeanPaul.

Bij JeanPaul telt hij de waterleidingen netjes bij elkaar op.
Bij die van jou die waterleidingen niet.

In reactie 18# heb ik nog een andere lijst gedaan waar nog meer fouten in zitten.

Dat is wat ik probeerde te vertellen.

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Code aanpassen
« Reactie #21 Gepost op: 15 augustus 2018, 12:33:07 »
Hallo,

Ik heb dat hier uit de verte ook een beetje gevolgd, inclusief wat codes bekeken, en kan enkel concluderen dat ik het zelf anders zou aanpakken...
Toch had ik ook de oorspronkelijke code van snb eens ontleed (bij wijze van amusement dus) en de reden waarom je daar soms #NAAM als resultaat krijgt is dat bv. "gaskraan" geen enkele spatie bevat ! Er moet anderzijds nog wat anders loos zijn op je oorspronkelijke tabblad want die namen wijzigen naar een tekst met één of meer spaties gaat enkel goed op een ANDER tabblad.
De code van snb zodanig aanpassen dat het wel werkt hoeft niet te moeilijk te zijn, maar ondertussen achterhaald gezien de nieuwe aanpak van JeanPaul.
Dat de code van alfa voor bv. waterleiding niet goed optelt komt enkel omdat niet alle rijen die je opgeteld wil krijgen netjes direct onder elkaar staan (zie zijn terechte commentaar betreffende op voorhand gesorteerde lijst).

En nu komt er dus een dikke 'MAAR' : volgende keer heb je misschien weer een basislijst met een lichtjes afwijkende structuur en zit je opnieuw in de problemen. Ik vermoed overigens ook dat je geen 10 keer per dag zo een lijst te verwerken krijgt.
En dus zou ik het zonder code oplossen en er gewoon een draaitabel van maken. Dat kost je enkele muiskliks, maar vooral : het komt altijd goed én je resultaat staat automatisch gesorteerd.

Groeten,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Code aanpassen
« Reactie #22 Gepost op: 15 augustus 2018, 13:08:52 »
Hallo pitufo,

ik probeer bescheiden "niet akkoord te gaan" met je bewering  :)


Toch had ik ook de oorspronkelijke code van snb eens ontleed (bij wijze van amusement dus) en de reden waarom je daar soms #NAAM als resultaat krijgt is dat bv. "gaskraan" geen enkele spatie bevat !
Nochtans, MP75 (product in kolom F) wordt WEL opgeteld en weergegeven.

Het eerste wat ik geprobeerd heb met het originele bestand met de vraag "Waarom staat hier #Waarde!" is "Gaskraan" te splitten in twee woorden, Gas en kraan. Gewoon een spatie er tussen. Dat gaf dezelfde (fout-) melding. Ook andere namen ingeven gaat niet, probeer anders maar eens "pot jam" in te voeren, je krijgt een melding.
Er zijn, zoals je zelf zegt ergens andere oorzaken van die melding, maar de code is moeilijk te lezen voor mij als leek.
En de oplossing van JeanPaul, waarbij het probleem opgelost blijkt, is nog moeilijker te ontleden. Waar staat trouwens die accolade voor? In het werkblad worden geen accolades gebruikt, transponeren maakt er geen aan...  0:-)
Ik vind het zeker bijzonder knap als iemand die code kan (begrijpend) lezen  :thumbsup:.

Groeten,

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline tonnie

  • Volledig lid
  • **
  • Berichten: 104
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #23 Gepost op: 15 augustus 2018, 13:16:09 »
@pitufo

Draaitabel is geen optie in het programmatje. Maar die van JeanPaul is top ik moet alleen weten hoe ik hem kan laten beginnen op regel 21.

Nog mooier is als de lijst begint op regel 21 en dan alles vervangt vanaf regel 21. Dat ik dus ipv die startlijst de uiteindelijk lijst krijg vanaf regel 21.
Beetje moeilijk uitleggen zucht, iig bedankt voor de hulp en meedenken.

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Code aanpassen
« Reactie #24 Gepost op: 15 augustus 2018, 14:28:22 »
@ SoftAid,

Da's inderdaad vreemd dat hij MP75 wel neemt (ik had het ook niet volledig uitgespit) : ik stelde het vast bij "gaskraan" en bij "hoekstopkraan". En als ik de 'tabel' op een ander tabblad plak werkt het daar wel goed mits ik er minimaal 2 woorden van maak. Bizar...

Toch nog eens gekeken, en ik vind in de bijlagen een originele en een gewijzigde code van snb, een eerste met
sn = Filter([transpose(if(b2:b402="","",trim(f2:f402)&"_"&d2:d402))], "_")
en de volgende met
sn = Filter([transpose(if(b2:b402="","",trim(f2:f402)& " ~" &"_"&d2:d402))], "_")
Die tweede lost het 'spatieprobleem' op.

@ tonnie,

Mogen we misschien ook weten waarom een draaitabel geen optie is ?
Maar als je toch op deze manier verder wil ben ik bereid mee te spelen. Alleen zie ik inderdaad niet goed wat je wil.
Mocht het zo zijn dat je gewoon het resultaat vanaf rij 21 wil krijgen dan moet je in de laatste regel
Range("H2").Resize(i, 4).Value = Application.Index(a, 0, 0)
enkel H2 vervangen door H21 zou ik zo denken (alle code die daaraan voorafgaat doet immers niets op je werkblad).
Anders moet je nog maar een extra uitlegpoging wagen... (of een manueel gemaakte oplossing meesturen die aan je eisen voldoet)
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Code aanpassen
« Reactie #25 Gepost op: 15 augustus 2018, 14:44:47 »
Hallo pitufo,

sn = Filter([transpose(if(b2:b402="","",trim(f2:f402)&"_"&d2:d402))], "_")
en de volgende met
sn = Filter([transpose(if(b2:b402="","",trim(f2:f402)& " ~" &"_"&d2:d402))], "_")
Het toevoegen van die spatie + accolade lost alleszins gedeeltelijk of voornamelijk het probleem op.
Mogelijk kan en wil JeanPaul dit toelichten.

Groeten,

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline tonnie

  • Volledig lid
  • **
  • Berichten: 104
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #26 Gepost op: 15 augustus 2018, 14:56:38 »
@Pitufo

Ik heb een voorbeeld erbij gedaan, met uitleg in de rode letters.

Hij maakt een boodschappenlijst van een verzameling, boven die lijst (rij 1 tm 20)staan gegevens voor de leverancier dus die blijven.
Uiteindelijk moet die lijst vervangen worden door een bruikbare lijst zoals JeanPaul maakt en dan nog het liefst op de zelfde plaats zoal in het voorbeeld.

Op die manier kan ik de materialen lijst verzenden zonder dat ze moeten zoeken hoeveel er van elk in zit.

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Code aanpassen
« Reactie #27 Gepost op: 15 augustus 2018, 17:12:57 »
Volgende poging om je te begrijpen : de oorspronkelijke lijst mag WEG en het resultaat komt in de plaats ?
En ook : de oorspronkelijke lijst begint op rij 21 en het resultaat ook ?
Dat kan als volgt maar ALLEEN als rij 20 leeg blijft (althans tot en met kolom G)  :

Sub JPS()
   
Dim a, i As Long, txt As String, w
a = Cells(21, 1).CurrentRegion.Value
Range("A21:F" & Cells(Rows.Count, 1).End(xlUp).Row).Clear
With CreateObject("Scripting.Dictionary")
    .CompareMode = 1
    For i = 1 To UBound(a, 1)
    x = Chr(2)
        txt = Join(Array(a(i, 1), a(i, 6)), Chr(2))
        If Not .exists(txt) Then
            .Item(txt) = VBA.Array(a(i, 1), a(i, 6), a(i, 4), a(i, 5))
        Else
            w = .Item(txt): w(2) = w(2) + a(i, 4)
            .Item(txt) = w
        End If
    Next
    a = .items: i = .Count
End With
Range("a21").Resize(i, 4).Value = Application.Index(a, 0, 0)

End Sub


De macro 'wissen' mag dan weg.
Als in rij 20 toch iets staat moet je maar op rij 22 starten, maar dat krijg je zelf wel aangepast.

P.S. : ik wil nu niet ambetant doen maar we zijn hier wel volop bezig een draaitabel te SIMULEREN  0:-)

@ SoftAid,

Die " ~" is een handigheidje in de filteropbouw om ervoor te zorgen dat het nadien niet in de soep draait. ~ kan net zo goed worden vervangen door een willekeurig ander karakter, zelfs een extra spatie. Probeer maar eens.
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline tonnie

  • Volledig lid
  • **
  • Berichten: 104
  • Geslacht: Man
  • Oplossing.be
Re: Code aanpassen
« Reactie #28 Gepost op: 15 augustus 2018, 17:57:50 »
@Pitufo

Ja dat is het.
Ik heb alleen dit ervan gemaakt, het enige wat dan nog rest is in het resultaat de waarde in kolom B en C leeg maken.
Dat hoefde de leverancier niet te zien.
Hoe geef ik dat aan?

Sub JPS2()
   
Dim a, i As Long, txt As String, w
a = Cells(21, 1).CurrentRegion.Value
Range("A21:F" & Cells(Rows.Count, 1).End(xlUp).Row).Clear
With CreateObject("Scripting.Dictionary")
    .CompareMode = 1
    For i = 1 To UBound(a, 1)
    x = Chr(2)
        txt = Join(Array(a(i, 1), a(i, 6)), Chr(2))
        If Not .exists(txt) Then
            .Item(txt) = VBA.Array(a(i, 1), a(i, 2), a(i, 3), a(i, 6), a(i, 4), a(i, 5)) ''aangepast met de kolom B en C toevoegen
        Else
            w = .Item(txt): w(2) = w(2) + a(i, 6)
            .Item(txt) = w
        End If
    Next
    a = .items: i = .Count
End With
Range("a21").Resize(i, 6).Value = Application.Index(a, 0, 0) ''aangepast met 6

End Sub

Uiteindelijk dit er van gemaakt zo maakt hij ook de Range leeg van kolom B en C.
AAAARRRGGGHHH nou telt hij weer niet goed op!!! Staat alles op zijn plek telt hij weer niet goed op >:(
Sub JPS()
   
Dim a, i As Long, txt As String, w
a = Cells(21, 1).CurrentRegion.Value
Range("A21:F" & Cells(Rows.Count, 1).End(xlUp).Row).Clear
With CreateObject("Scripting.Dictionary")
    .CompareMode = 1
    For i = 1 To UBound(a, 1)
    x = Chr(2)
        txt = Join(Array(a(i, 1), a(i, 6)), Chr(2))
        If Not .exists(txt) Then
            .Item(txt) = VBA.Array(a(i, 1), a(i, 2), a(i, 3), a(i, 4), a(i, 5), a(i, 6)) ''aangepast met de kolom B en C toevoegen en volgorde verandert
        Else
            w = .Item(txt): w(2) = w(2) + a(i, 6)
            .Item(txt) = w
        End If
    Next
    a = .items: i = .Count
End With
Range("a21").Resize(i, 6).Value = Application.Index(a, 0, 0) ''aangepast met 6
Range("B21:C" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents'' maakt range van B en C leeg
End Sub

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Code aanpassen
« Reactie #29 Gepost op: 15 augustus 2018, 19:13:21 »
Ik vrees dat ik nogmaals niet volg, tonnie.
De code die ik je stuurde (de meeste credits blijven uiteraard naar JeanPaul gaan) heb je gewijzigd zodanig dat ook de waarden uit de kolommen B en C in je resultaat terecht komen. En nu vraag je hoe je die terug kan wegkrijgen ??

Oeps, ik zie dat je ondertussen zelf nog verder hebt aangepast : bedoeling is dus gevulde kolommen A en D tot F.
Als deze aanpak voor jou acceptabel is, dan voor mij ook  :D (de volgorde in je resultaat is dan wel gewijzigd)

Zelf had ik intussen het omgekeerde gedaan, nl. die vorige code ongemoeid gelaten en op het einde van het algoritme vanaf kolom B 2 kolommen opgeschoven, dus zo :
Range("B21:C" & Cells(Rows.Count, 1).End(xlUp).Row).Insert shift:=xlToRight
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

 


www.combell.com