[Excel] Dynamische selectie gevulde cellen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HerrProx
  • Registratie: Maart 2009
  • Laatst online: 27-05 16:24
Tweakers,

Zit met de volgende uitdaging: Bij mij op m'n werk werken we met query's vanuit excel. die halen op hun beurt de informatie uit een ander systeem.

De spreadsheets bundelen de informatie, verdelen het over meerdere tabbladen aan de hand van formules.
Heb op een van deze tabbladen dus bepaalde data zitten, die uitgeprint moet worden, dit deden we eerst via print ranges, nu via een selectie binnen VBA en dit werkt niet helemaal lekker.

Ook verschilt deze data per dag aan de hand van welke klanten welke producten bestellen.
Dit kan dus 10 pagina's zijn maar soms ook 25-30 pagina's.
Nu print hij het wel uit maar het punt is dat hij iedere dag 5-10 lege pagina's meer uitprint en dit aantal loopt op. (nu stoppen we dit wel weer terug in de printer maar wil hier vanaf.)

Heb op internet al verschillende fora's bezocht over dynamische selecties maken, laatste gebruikte cellen zoeken en selecteren maar dit is allemaal niet wat ik zoek of ik krijg het niet werkend.

Mijn vraag is of iemand van jullie me kan helpen aan een VBA code die vanaf cel a4 tot aan cel h### (de laatst gevulde cel) een selectie maakt. Waarna ik deze dus kan printen.

Eventueele vragen, extra informatie of de data kan ik geven op aanvraag.

Ik wacht jullie reactie af en hoop dat iemand me hiermee kan helpen ;)

Davey

Acties:
  • 0 Henk 'm!

  • jlrensen
  • Registratie: Oktober 2000
  • Laatst online: 29-09 23:19

jlrensen

plaatjes vullen geen gaatjes

Zijn alle cellen in het bereik dat je wilt printen gevuld? In dat geval kan je (via een macro) het volgende proberen:

1) Ga naar cel A1.
2) druk tegelijkertijd ctrl+shift+cursor omlaag in
3) druk tegelijkertijd ctrl+shift+cursor naar rechts in

Alle gevulde cellen zouden dan geselecteerd moeten zijn. Let wel dat dit niet werkt, als er lege rijen/kolommen in je sheet met data staan.

Men moet het denken bijbrengen, niet wat al gedacht is. ~C. Gurlitt


Acties:
  • 0 Henk 'm!

  • HerrProx
  • Registratie: Maart 2009
  • Laatst online: 27-05 16:24
Het probleem is inderdaad dat we tussen al deze data telkens lege rijen plaatsen (aan de hand van een macro)
Al deze data moet nog hadnmatig ingevoerd worden(beetje outdated :( )

Maar nu heb ik wel een beetje kennis, kan dit niet geloopd worden? (weet alleen niet goed hoe)

Dit is onze loop om de witte regels toe te voegen, is deze niet aan te passen om juist te selecteren?

Alle hulp is welkom, ik ga zelf ook weer het internet af!
Range("A4").Select 'Invoegen van witregels voor het doordraaien
Selection.EntireRow.Borders.LineStyle = xlContinuous
Do Until Selection = "" Or Selection = " " 'Doorgaan totdat geen gevens meer zijn
zoeker = Selection
Do While Selection = zoeker
optel = ActiveCell.Offset(0, 3).Value
If optel = " " Then Exit Do
opteller = opteller + optel
ActiveCell.Offset(1, 0).Select
Selection.EntireRow.Borders.LineStyle = xlContinuous
Loop

opteller = 0
Selection.EntireRow.Insert
Selection.EntireRow.Borders.LineStyle = none
ActiveCell.Offset(1, 0).Select

Loop

Acties:
  • 0 Henk 'm!

  • 3xNix
  • Registratie: Juli 2001
  • Laatst online: 13-07 19:28

3xNix

golfr in hart en nieren

HerrProx schreef op maandag 03 oktober 2011 @ 12:29:

Mijn vraag is of iemand van jullie me kan helpen aan een VBA code die vanaf cel a4 tot aan cel h### (de laatst gevulde cel) een selectie maakt. Waarna ik deze dus kan printen.
Klaar terwijl u wacht.


Sub Test()

LastRow = ActiveSheet.UsedRange.Rows.Count
Range("A4:H" & LastRow).Select

End Sub

Acties:
  • 0 Henk 'm!

  • HerrProx
  • Registratie: Maart 2009
  • Laatst online: 27-05 16:24
Bedankt voor je reactie, heb hem meteen uitgeprobeerd..helaas! :(

hij selecteerd totaan de alleslaatste rij #5000+ terwijl er maar data zit tot aan ongeveer #1200

ik ga kijken of ik het even kan testen op een nieuw tabblad, wish me luck!

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Usedrange heeft een geheugen. :)

De grap is dat je beter van beneden naar boven kunt denken:

code:
1
ActiveSheet.Range("A4", ActiveSheet.Range("H65536").End(xlUp)).Select

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • HerrProx
  • Registratie: Maart 2009
  • Laatst online: 27-05 16:24
Probleem via een andere manier opgelost. topic kan gesloten worden.

Acties:
  • 0 Henk 'm!

Verwijderd

en wat is de oplossing?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Visual Basic:
1
2
3
    Range("a4", Cells( _
        Range("a:h").Find("*",SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row, _
        8)).Select

Of dat ook TS zijn oplossing is weet ik niet, maar dit heeft voordelen ten opzichte van die andere (support voor meer dan 65536 rijen en data in laatste rij die niet in kolom h staat) ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • HerrProx
  • Registratie: Maart 2009
  • Laatst online: 27-05 16:24
Heb het als volgt opgelost:

Via VBA plaats ik de gegevens in een tabblad in cellen A t/m H, hierna via een loop worden tussen de ordernummers een witte regel geplaatst en aan het einde van de loop doet hij het volgende:
code:
1
2
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Cells(1)).Select


hierna gaat hij terug naar een ander tabblad en slaat hij het document op. (de selectie blijft in stand)
dan kan de gebruiker via een knop het bestand printen, hierbij staat weer ingesteld dat hij van dit tabblad de selectie doordraait.

voor de belangstellende hieronder de volledige code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Application.DisplayAlerts = False

    Sheets("BRF02").Select
    huidigeplaats = ActiveCell.Address      'onthoudt waar de cursor staat
    ditbestand = ActiveWorkbook.Name        'kijkt wat de naam van dit bestand is
    Workbooks.Open Filename:="P:\BRF02.CSV" 'opent het gegevensbestand
    gegevensbestand = ActiveWorkbook.Name   'onthoud hoe het gegevensbestand heet
    Cells.Copy                              'kopieert alle gegevens
    Windows(ditbestand).Activate            'Activeert dit bestand weer
    Range("A1").PasteSpecial                'Plakt de gegevens op A1
    Application.CutCopyMode = False         'Maakt het klembord leeg
    Windows(gegevensbestand).Close          'Sluit het gegevensbestand
    
    Columns("B:B").Cut                      'Knipt kolom B
    Range("HH1").Select                     'Selecteert cel HH1
    ActiveSheet.Paste                       'Plakt het klembord
    Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
        Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
        ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
        (20, 1), Array(21, 1))
    
    Range("HH2").Select                     'Selecteert cel HH2
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Cut                           'Knipt de selectie
    Range("H2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.TextToColumns Destination:=Range("H2"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
        Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
        ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
        (20, 1), Array(21, 1))
    Range(huidigeplaats).Select             'Springt terug naar de origine plaats
    
    Sheets("BRF02").Select 'Kopieert het blad van BRF02 naar het blad Data
    Cells.Select
    Selection.Copy
    Sheets("Data").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Sheets("Formules").Select
    Selection.Copy
    Sheets("Data").Select
    Range("A2:A4000").Select
    ActiveSheet.Paste
    Range("A2").Select
    Range("A1").Select
    Range("I2").Select
    ActiveCell.FormulaR1C1 = "=SUMIF(C[-8],RC[-8],C[-3])" 'Sommeert de bestelde aantallen
    Selection.Copy
    Range("I3:I4000").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("I2").Select
    
    Sheets("Doordraaien").Select  'Kopieert de formules in de verborgen regel
    Range("A3:J3").Select
    Selection.Copy
    Range("A4:A4000").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False 'Sorteert de gegevens op ordernummer
    Selection.Sort Key1:=Range("H4"), Order1:=xlDescending, Key2:=Range("A4") _
        , Order2:=xlAscending, Key3:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
    
    Rows("4:5065").Select
    Selection.Copy

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A9").Select
    Application.CutCopyMode = False
    
    Range("A4").Select 'Invoegen van witregels voor het doordraaien
    Selection.EntireRow.Borders.LineStyle = xlContinuous
    Do Until Selection = "" Or Selection = " " 'Doorgaan totdat geen gevens meer zijn
        zoeker = Selection
        Do While Selection = zoeker
            optel = ActiveCell.Offset(0, 3).Value
            If optel = " " Then Exit Do
            opteller = opteller + optel
            ActiveCell.Offset(1, 0).Select
            Selection.EntireRow.Borders.LineStyle = xlContinuous
        Loop
        
     opteller = 0
        Selection.EntireRow.Insert
        Selection.EntireRow.Borders.LineStyle = none
        ActiveCell.Offset(1, 0).Select
                
       Loop
       
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Cells(1)).Select
    
 Application.DisplayAlerts = True

    Sheets("Totaal Aantal VVP").Select
    Range("C4").Select
    ActiveWorkbook.Save 'Saved het document

Acties:
  • 0 Henk 'm!

Verwijderd

bedankt HerrProx!
pedorus schreef op maandag 10 oktober 2011 @ 18:25:
Visual Basic:
1
2
3
    Range("a4", Cells( _
        Range("a:h").Find("*",SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row, _
        8)).Select

Of dat ook TS zijn oplossing is weet ik niet, maar dit heeft voordelen ten opzichte van die andere (support voor meer dan 65536 rijen en data in laatste rij die niet in kolom h staat) ;)
de 65K rijen is gebonden aan de excelversie en kan makkelijk opgelost worden met ActiveSheet.rows.count ipv expliciet het getal.
maar jouw oplossing is iets beter in het vinden van de laatste rij.
Pagina: 1