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

Regels uit diverse werkbladen samenvoegen in 1 werkblad, gesorteerd op datum.

Status
Niet open voor verdere reacties.

gertus11

Nieuwe gebruiker
Lid geworden
20 nov 2018
Berichten
3
Wie kan mij helpen?

Wij hebben voor de monteurs een werkmap waar ze de storingen per machine in kunnen vullen.
Nu wil ik een "overzicht" werkmap creëren, die de regels uit de verschillende werkmappen weergeeft van de afgelopen 7 dagen.
(de regels nemen toe als een storing voordoet)

Hoe moet de macro eruit zien?

Ik heb een test versie als bijlage. Bekijk bijlage Test diverse werkmappen.xlsx

Alvast bedankt!
 
Of

Code:
Sub M_snb()
  Sheet1.Copy , Sheets(Sheets.Count)
  Sheets(Sheets.Count).Name = "totaal"
    
  For Each it In Sheets
    If it.Name <> "totaal" And it.CodeName <> "Sheet1" Then Sheets("totaal").Cells(Rows.Count, 1).End(xlUp).Offset(2).Resize(it.UsedRange.Rows.Count, it.UsedRange.Columns.Count) = it.UsedRange.Offset(1).Value
  Next
End Sub
 
Ik zou al data uit de verschillende tabjes in 1 tabel zetten, al zou ik het nooit in verschillende tabjes invoeren. Met de ingebouwde functies binnen Excel zoals het filter, het geavanceerde filter, een draaitabel etc kan je dan eenvoudig analyses maken per machine over een langere periode.

Code:
Private Sub Worksheet_Activate()
  If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
  Cells(1).CurrentRegion.Offset(1).Clear
  For Each sh In Sheets
    If sh.Name <> "Database" Then
      ar = sh.Cells(1).CurrentRegion.Resize(, 8).Offset(1)
      For j = 1 To UBound(ar)
        ar(j, 8) = sh.Name
      Next j
      Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(UBound(ar) - 1, 8) = ar
    End If
  Next sh
  Cells(1).CurrentRegion.Sort Cells(1, 3), , Cells(1, 8), , , , , xlYes
  Cells(1).CurrentRegion.AdvancedFilter xlFilterInPlace, Range("Z1:Z2")
End Sub
 

Bijlagen

Zoals dit misschien?


Bedankt voor je reactie en hulp.

Dit is wel wat ik bedoel. :)

Elke keer als ik de macro uitvoer plakt hij het "overzicht" onder de "oude" overzicht.
Kan je de macro aanpassen?:
- zodat hij eerst de "oude" wist, zodat je alleen de afgelopen 7 dagen ziet; = Gelukt!
- Dat de benaming van de werkblad wordt weergegeven waar de desbetreffende regel uit komt?


Nu heb ik de macro gekopieërd naar mijn huidige excel bestand. Deze bestaat echter uit meerder werkbladen en andere benaming.
Nu heb ik de volgende aangepast --> For Each sh In Sheets(Array("Machine 1", "Machine 2", "Machine 3", "Machine 4")) aangepast in: For Each sh In Sheets.

Dit werkt, alleen ik krijg de regels dubbel. Wat doe ik fout. = Gelukt!
 
Laatst bewerkt:
misschien was deze regel nuttig ?
Code:
If sh.Name <> "Database" Then
 
Heb je wel naar de laatste code gekeken?

Ja. Dit klopt.

Heb bij: For Each sh In Sheets(Array("Machine 1", "Machine 2", "Machine 3", "Machine 4")) aangepast in: For Each sh In Sheets. Toch Array gebruikt, nu krijg ik de regels niet dubbel.
Waarom kan ik de Autofilter niet aanpassen? bv naar 4 (dit is toch kolom 4?) In mijn huidige excel staat datum in kolom D.
 
Heb je de laatste code ook geprobeerd? En de code van snb? In het bestandje in #4 hoef je alleen de formule in Z2 aan te passen als je op een andere kolom wil filteren.
 
Code is niet zo elegant zoals anderen dat kunnen maar hierbij een poging.
Code:
Sub DateFilter()
  With Sheets("totaal")
    .Cells(1).CurrentRegion.Clear
    .Cells(1).Resize(, 8) = Array("Pos", "werkzaamheden", "Datum", "storing", "gereed", "naam", "uren", "Bladnaam")
  End With
  
  For Each sh In Sheets
    If sh.Name <> "totaal" Then
      With Sheets(sh.Name)
        For j = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
          If CDate(.Cells(j, 3)) > Format(Date - 7, "m-d-yy") Then
            Sheets("totaal").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 8) = Array(.Cells(j, 1), .Cells(j, 2), CDate(.Cells(j, 3)), .Cells(j, 4), .Cells(j, 5), .Cells(j, 6), .Cells(j, 7), sh.Name)
          End If
        Next
      End With
    End If
  Next sh

  With Sheets("totaal")
    .Cells(1).CurrentRegion.Sort .Cells(1, 3), , , , , , , xlYes
  End With
End Sub
 
Laatst bewerkt:
Code is niet zo elegant zoals anderen dat kunnen maar hierbij een poging.
Je wordt steeds beter. :D

Je kan het nog in het geheugen zetten Jack, dat verloopt iets sneller, ....maar op zich niets mis mee toch?
 
Klopt helemaal Harry
Ik hoopte op response. Ik zou mezelf er wat meer in moeten verdiepen...altijd interessante materie:thumb:
 
Er klopt niets van @Jack Nouws :d
In mijn huidige excel staat datum in kolom D.
Altijd leuk die voorbeeldbestanden die niet overeenkomen met de werkelijk situatie.
 
Ben van het voorbeeld bestand uitgegaan ;)
Bij mij staat datum in Kolom C
Mooie oefening voor TS
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan