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

data verzamelen en plaatsen in verzamelblad

Status
Niet open voor verdere reacties.
Je hebt helemaal gelijk.. ik ben er ook achter gekomen..! En dat brengt me bij een volgend probleem, schijnt dat bij alle omschrijvingen die gebruikt worden ook nogal wat verschil zit met spaties en dergelijke. Dit was in eerste instantie dus niet opgevallen.. is er een manier om te zorgen dat echt alleen de tekst gebruikt wordt excl. de spaties? Alles omzetten is namelijk echt niet te doen!

Verder werkt het echt perfect, hetgeen waarvan de omschrijving hetzelfde is wordt prachtig achter de juiste module verzameld!!
 
Nick,

in macro "Verzamelen" staat o.a.
Code:
If sn(i, 1) = ".2" Then sModule = sn(i, 5): sPlaats = sn(i, 2)  'een nieuwe module begint met een ".2" in de 1e kolom, dus die naam onthouden voor straks

maak daar eens dit van:
Code:
If [COLOR="#FF0000"]Trim(sn(i, 1))[/COLOR] = ".2" Then sModule = sn(i, 5): sPlaats = sn(i, 2)  'een nieuwe module begint met een ".2" in de 1e kolom, dus die naam onthouden voor straks
 
Hey,

Het is inderdaad gelukt met Trim, ik heb de trim echter gewoon uitgevoerd over de kolom e.
Het werkt echt boven verwachting goed nu. Hij geeft geen foutmeldingen meer.

Soms wordt nog de verkeerde module genomen om het achter te zetten, in dit geval wordt de ".2" niet als zodanig herkend en neemt hij de eerste .2 die erboven staat als module. Vervang ik deze .2 handmatig dan werkt het wel. Als ik via VBA echter aangeef vervang alle ".2" met ".2" krijg ik voor iedere ".2" een 0,2.

Ik doe het nu maar handmatig, maar als het eenvoudiger kan, dan zou dat altijd fijn zijn haha!
 
hopelijk heb je nergens ".20" of zo, nu kijkt hij naar de 2 meest linkse karakters.
Code:
If left(Trim(sn(i, 1)),2) = ".2" Then
 
Allemaal hartelijk dank voor jullie hulp, alleen had het mij nooit gelukt.
Het werkt nu zoals ik het voor me zag!
 
Geachte Allemaal,

Ik heb deze vraag weer op niet opgelost gezet, en wel om de volgende reden.

De artikelbladen van waaruit verzameld wordt zijn helaas niet helemaal compleet, en het komt dus voor dat een monteur achter een module soms handmatig artikelen in moet vullen. Wanneer dan nog een keer artikelen verzameld worden verwijderd de code echter het deel wat handmatig is ingevoerd.

Hieronder de meest recente code, hopelijk kunnen jullie mij vertellen wat er veranderd moet worden om te bewerkstelligen dat het handmatig ingevoerde blijft staan.

PHP:
'opschonen data
'Call Correct_Cells

' Collect spare parts form sheets
Dim sh As Worksheet, sn, i As Integer, sModule As String, sPlaats As String, Dict As Object, sArt As String, Arr(1 To 1, 1 To 6), it, c As Range, j As Integer
  Set Dict = CreateObject("scripting.dictionary")
  With Dict                                                'je dictionary definieren
    .comparemode = 1                                       'geen onderscheid hoofdletters/kleine letters
    For Each sh In Worksheets                              'alle werkbladen aflopen
      Select Case sh.Name
        Case "Report", "Report_History", "POI"                  'deze 2 bladen niet
        Case Else                                          'alle andere
          sn = sh.Range("A1").CurrentRegion.Resize(, 12).Value  'bereik rond A1 van dat blad 12 kolommen breed inlezen naar een array
          sModule = "???": sPlaats = "???"                 'naam van de module resetten
          For i = 3 To UBound(sn)                          'alle rijen van je array aflopen te beginnen vanaf de 2e
            If sn(i, 1) = ".2" Then sModule = sn(i, 5): sPlaats = sn(i, 2)  'een nieuwe module begint met een ".2" in de 1e kolom, dus die naam onthouden voor straks
            If sn(i, 12) > 0 Then                          'een aantal gewenst
              sArt = "|" & sPlaats & "|" & sModule & "|"   'een uniek record is plaats + modulenaam + artikelcode
              it = .Item(sArt)                             'kijken op dat record in de dictionary
              Select Case VarType(it)                      'wat weet je over dat record
                Case vbEmpty                               'zat nog niet in de dictionary, dus even snel zelf een array met de nodige gegevens aanmaken
                  Arr(1, 1) = sArt                         '1e element = je unieke sleutel
                  Arr(1, 2) = sn(i, 4)                     '2e element = je artikelcode
                  Arr(1, 3) = sn(i, 5)                     '3e element = je omschrijving
                  Arr(1, 4) = sn(i, 12) & " "              '4e element = het aantal
                  Arr(1, 5) = sn(i, 10)                    '5e element = eenheid
                  .Item(sArt) = Arr                        'array naar dictionary schrijven
                Case Else:
                  it(1, 2) = it(1, 2) & vbLf & sn(i, 4)
                  it(1, 3) = it(1, 3) & vbLf & sn(i, 5)
                  it(1, 4) = it(1, 4) & vbLf & sn(i, 12)
                  it(1, 5) = it(1, 5) & vbLf & sn(i, 10)
                  .Item(sArt) = it                         'bestond wel al, dus enkel aantal cumuleren in je array en terug naar dictionary schrijven
              End Select
            End If
          Next
      End Select
    Next
  End With
  
  LastRow = ActiveSheet.Range("C65000").End(xlUp).Row
  With Range("E3:E" & LastRow)
'    .Offset(, 5).Resize(, 4).ClearContents
    For Each c In .Cells                                   'alle modules aflopen
      If c.Offset(, -2).Value <> "" And c.Value <> "" Then  'plaats en module niet leeg
        sArt = "|" & c.Offset(, -2).Value & "|" & c.Value & "|"
        it = Dict.Item(sArt)                               'opvragen in de dictionary van de unieke sleutel (plaats + module)

        If Not VarType(it) = vbEmpty Then c.Offset(, 5).Resize(, 4).Value = Array(it(1, 2), it(1, 3), it(1, 4), it(1, 5))  'stond die al in de dictionary dan gegevens wegschrijven
        Dict.Remove sArt                                   'record verwijderen
      End If
    Next
    .EntireRow.AutoFit
  End With
  MsgBox ("Amount of Faults: " & Dict.count)
  If Dict.count Then MsgBox "These modules are not in the report" & vbLf & Join(Dict.keys, vbLf), vbCritical  'zaken die niet weggeschreven konden

Graag jullie ideeen,

Nick
 
waar voert die monteur iets in ?
Kan je een voorbeeldje posten ?
 
Hallo,

In principe is het voorbeeldje hetzelfde als in de voorbeelden hierboven, de code die ik gepost heb is de meeste recente code.

In kolom L van de artikelbladen geeft de monteur een aanbevolen hoeveelheid aan. Dit wordt verzamel in het blad report.

In het blad report wordt door de monteur echter wanneer het artikel niet in de artikellijst voorkomt, het artikel handmatig ingevoerd in de kolommen J tot M. Dit wordt alleen overschreven wanneer er dus artikelen vanuit het artikelblad worden verzameld.

Ik hoop dat dit genoeg informatie is? Ik zit nu namelijk via mijn telefoon, een nieuw voorbeeld kan ik eventueel wel sturen als ik thuis ben, maar dit zal neerkomen op hetzelfde als hierboven.

Mvg Nick
 
Bekijk bijlage DummyV5.xlsHierbij de dummy aangepast met de juiste code erin, helaas stond dit bestand op mijn PC op het werk en kon ik deze dit weekend dus niet posten.

In de dummy staan achter Plaats 110, Module B momenteel 3 artikelen, waarvan eentje handmatig ingevoerd door de monteur. Wanneer nu echter op de knop gedrukt wordt worden de artikelen uit het artikelblad overnieuw geplaatst en verdwijnt het handmatig ingevoerde.

Ik denk dat het heel moeilijk wordt om dit te veranderen, of moet het wellicht op een heel andere manier aangevlogen worden?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan