Help!

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

Hulp bij posten

Recente topics

Auteur Topic: Namen uit lijst filteren  (gelezen 7615 keer)

0 leden en 1 gast bekijken dit topic.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Namen uit lijst filteren
« Reactie #30 Gepost op: 20 juli 2020, 21:20:01 »
Hallo Luc, je zit natuurlijk met een zeer groot bestand (in werkelijkheid. Dat kan ik niet nabootsen hier.)

Probeer mogelijk deze code eens, maar ik vermoed dat het geen verlichting gaat zijn...

Sub DeleteSomeShapes()
Dim shp As Shape

For Each shp In ActiveSheet.Shapes
  If shp.Type = 8 Or shp.Type = 12 Then shp.Delete
Next shp

Columns("I:I").ColumnWidth = 32
 Cells.RowHeight = 15

End Sub

Die foutmelding daar moet je waarschijnlijk niet te veel mee inzitten. Waarschijnlijk is de processor (of het RAM) gedeeld voor berekeningen en/of weergave.
Dan kan video even achter blijven wegens te weinig geheugen, omdat de berekeningen alles in beslag nemen.

Gebruik je onze code trouwens apart, of implementeer je deze in bestaande code?

:) 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 lco

  • Oplosser
  • ****
  • Berichten: 781
  • Geslacht: Man
Re: Namen uit lijst filteren
« Reactie #31 Gepost op: 20 juli 2020, 21:22:20 »
SoftAid,

 ik gebruik de code in de bestaande ,ga je nieuwe aanbreng proberen


      mvg,lco

Offline lco

  • Oplosser
  • ****
  • Berichten: 781
  • Geslacht: Man
Re: Namen uit lijst filteren
« Reactie #32 Gepost op: 20 juli 2020, 21:28:28 »
SoftAid,

dit werkt ook niet,met deze code gooit hij mijn macroknoppen ook weg :-X


    mvg,lco

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Namen uit lijst filteren
« Reactie #33 Gepost op: 20 juli 2020, 21:39:48 »
Luc,

Ik ben maar een beginner, en die maken beginnersfouten....

Sub DeleteSomeShapes()
Dim shp As Shape

For Each shp In ActiveSheet.Shapes
  If shp.Type <> 8 Or shp.Type <> 12 Then shp.Delete
Next shp

Columns("I:I").ColumnWidth = 32
 Cells.RowHeight = 15

End Sub

Maar probeer die code eerst als losstaande macro, en kijk naar de snelheid en afwerking.
Vergelijk daarna met deze macro-code opgenomen in je grote macro.

:) 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 SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Namen uit lijst filteren
« Reactie #34 Gepost op: 20 juli 2020, 21:44:56 »
Hopla,

kan niet werken want shp.Type <> 8 Or shp.Type <> 12 werken elkaar tegen.
12 valt onder <> 8 en
8 valt onder <> 12
Terug naar de tekentafel....  ;D

:) 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 lco

  • Oplosser
  • ****
  • Berichten: 781
  • Geslacht: Man
Re: Namen uit lijst filteren
« Reactie #35 Gepost op: 20 juli 2020, 21:47:18 »
SoftAid,

met de losstaande code is het op een paar seconde in orde;maar al mijn macroknoppen zijn ook verdwenen? :-\
Als de code kan aangepast worden zodat hij mijn macroknoppen laat staan zijn we er door.  ;)


    mcg,lco

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Namen uit lijst filteren
« Reactie #36 Gepost op: 20 juli 2020, 22:17:22 »
met de code apart is het op een paar seconde in orde;maar al mijn macroknoppen zijn ook verdwenen? :-\
Als de code kan aangepast worden zodat hij mijn macroknoppen laat staan zijn we er door.  ;)
Terug naar de code van cow18, lichtjes aangepast om geen onnodige loops te maken:

Sub shps()
   Dim shp As Shape
   
   For Each shp In ActiveSheet.Shapes
    If shp.Type <> msoFormControl And shp.Type <> msoOLEControlObject Then shp.Delete
   Next shp
     
   Columns("I:I").ColumnWidth = 32
   Cells.RowHeight = 14
     
End Sub

Deze werkt wel !!  :)

:) 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 lco

  • Oplosser
  • ****
  • Berichten: 781
  • Geslacht: Man
Re: Namen uit lijst filteren
« Reactie #37 Gepost op: 20 juli 2020, 22:37:11 »
SoftAid,

Deze werkt inderdaad \o/ \o/ \o/
Ik denk dat we erdoor zijn,heb enkele malen getest en geen problemen meer ondervonden.

Bedankt voor al u werk. :thumbsup: :thumbsup:

 ps: ook mijn dank aan al de andere helpers, dit maakt het werk vele malen gemakkelijker :thumbsup: :thumbsup: \o/ \o/


      mvg,lco

Offline Montagnard

  • Ambassadeur
  • *****
  • Berichten: 2.385
  • Geslacht: Man
Re: Namen uit lijst filteren
« Reactie #38 Gepost op: 21 juli 2020, 09:06:31 »
Goedemorgen !
ik wil eens iets duidelijk maken : ik ben absoluut géén Excel specialist , integendeel.....ik ben 45 jaar geleden begonnen met "computeren" , een Commodore 64 , en daarop ben ik begonnen met "programmeren" in die echte oude basic met regels en goto en gosub enz....
dat is stillekes gegroeid en op het einde kon ik er heel goed weg mee.
dan over gestapt naar een pc met een 286 , 386 enz en geëvolueerd naar een pc zoals we nu kennen...

pas veel later heb ik ook kennis gemaakt met Excel en VBA op het werk , ik kon daar ook mijn string in trekken maar met nog altijd die oude basic in mijn hoofd.
ik had/heb mijn eigen wel een truukje geleerd : als ik iets niet kon "programmeren" in VBA dan startte ik een Macro , deed wat ik wilde bereiken , stopte de Macro en ging dan de Macro bekijken/bewerken en leerde vooreerst wat er gebeurde èn haalde er de code uit die ik kon gebruiken.

ik heb dan ook niet gereageerd op de reacties #21 & 22 en volgende , heel eenvoudig omdat die code mij niets zegt , ik begrijp er zelfs geen snars van ( en ook veel ander code die ik hier zie passeren)!
daarom dat ik in een eerdere reactie van mezelf ook aangaf dat ik wilde helpen maar op "mijn eigen manier" , lukt het me niet dan is dat niet erg dan geef ik toe dat ik het niet kan oplossen.

ik ben ook NIET van plan om mij verder te verdiepen in het "moderne" VBA , daar heb ik geen goesting meer naar , ik ondervind ook dat het moeilijker en moelijker wordt voor mij om te begrijpen.

dus : ik ben bereid om te helpen waar ik kan , ik doe het heel graag , maar ik doe het dan op mijn eigen manier........
is mijn code oubollig : ja
is mijn code ouderwets : ja
is mijn code traag : ja
schiet ik soms te kort met mijn code : ja
maar het is code die ik begrijp en waarvan ik weet wat ze doet  ;)

iedereen nog een fijne dag !

Mvg,
Arnold.

Offline lco

  • Oplosser
  • ****
  • Berichten: 781
  • Geslacht: Man
Re: Namen uit lijst filteren
« Reactie #39 Gepost op: 21 juli 2020, 09:35:07 »
Montagnard,

Of dit oubollig is of niet dat geeft mij niet, ik word geholpen en dat is wat telt zonder jullie sta ik nergens :-[ :-[
zo wil ik jou en alle andere helpers nogmaals bedanken voor de hulp die jullie geboden hebt :thumbsup: :thumbsup: :thumbsup:

ps:Hopelijk kan ik in de toekomst nog eens gebruik maken van u kennis en al de andere helpers :-\ :-\


    mvg,lco

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Namen uit lijst filteren
« Reactie #40 Gepost op: 21 juli 2020, 11:50:20 »
Goedemorgen Arnold,

Weet je, iemand die minder weet, maar echt zijn best doet, is een beter helper dan iemand die veel weet, maar minder zijn best doet. Er zijn specialisten in elke discipline die er enkel op gebrand zijn om de code zo minimalistisch mogelijk te maken, en waardoor de code niet meer leesbaar is voor een beginner. Ook het toevoegen van REMarks achter de code zou de gebruikte code heel wat duidelijker maken voor veel beginners of vraagstellers. Dat zijn punten waar "ervaren" helpers aan zouden moeten denken, en er aan werken. Leren denken zoals je vraagsteller denkt, en daar op ingaan, en iets laten bijleren. De vraagsteller van zijn kant moet ook enige discipline aan de dag leggen. Eerst zelf iets proberen te maken (eventueel via de Macro-recorder, je leert daar veel van) en dan een goed onderbouwd voorbeeldbestand plaatsen.

Langs beide kanten is er dus nog genoeg ruimte voor verbetering.

De correctie op de code van Ico waar cow18 ons liet zoeken naar een manier om ze sneller te laten werken, daar ben ik zeker een uur mee bezig geweest. Try & Error. Uiteindelijk zag ik dat de aanpassing van kolommen en rijen OOK in de For-Next-lus stond, en die aanpassing dus tig keer als er gezocht werd naar een "form" mee uitgevoerd werd.

Toch werkte mijn macro nog niet. Mijn oude Excel 2007 geeft enkel weinigzeggende foutmeldingen als ik foute code uitvoer. En dan begin je dit en dat te proberen, maar het duurt soms lang voor ik "het licht" zie... :-[

Op deze site vond ik dan toch een kaarsje, dat mij het nodige licht bracht. Het bevestigde enkel dat ik niet ver mis zat met mijn code. De code verschilde met die van cow18, maar ze werkte.

Er zijn veel soorten Shapes, met nummers of namen (naar keuze), en cow18 had de keuze gemaakt met een methode die wij als beginners nauwelijks kennen en weinig of nooit gebruiken: Select Case
Sub shps()
   For Each shp In ActiveSheet.Shapes
      'MsgBox shp.TopLeftCell.Address & vbTab & shp.Type   'zeg per shape de cel linksboven en het type
      Select Case shp.Type                                                 'onderscheid maken in het type
         Case 8, 12                                                             '2 type shapes laten staan
         Case Else                                                               'al de rest
            shp.Delete                                                          'verwijderen
     
 Columns("I:I").ColumnWidth = 32
    Cells.Select
    Selection.RowHeight = 15
    End Select
   Next
End Sub

Er staan 3 aparte opdrachten in deze macro.
1- Een For-Next-loop om de juiste shapes verwijderen 'alles behalve shape 8 en shape 12
2- een opdracht om de kolom I een andere breedte te geven. 'waarom is me niet duidelijk
3- een opdracht om rijen een andere hoogte te geven. 'Ook hier is me het nut ervan niet onmiddellijk duidelijk

Belangrijkste "fout" of "vertragende factor" was dat opdracht 2 en 3 ook in de loop van opdracht 1 stonden.
Na deze opdrachten uitgeschakeld te hebben liep de macro nog niet veel sneller (volgens Ico).
Daarom vroeg ik hem om de macro apart te draaien, niet samen met een andere macro. En dan was de macro ineens flitsend snel.
Dan heb ik de opdracht 2 en 3 terug opgeschoond en geactiveerd, en alle bleef goed.

Maar ik ben wel afgestapt van de CaseSelect methode van cow18, omdat 1- dit niet noodzakelijk was en minder begrijpbaar voor "beginners" en 2, omdat de methode op bovenstaande site ook nog iets korter is als je ze met nummers gebruikt: Nu zou ik ze zo kunnen schrijven zonder dat er iets veranderd in snelheid, maar ze wel korter en leesbaarder wordt:

Sub shps()
   
   For Each shp In ActiveSheet.Shapes                                  'Bekijk de shape in het actief venster
    If shp.Type <> 8 And shp.Type <> 12 Then shp.Delete      'Als het type shape geen type 8 of 12 is, verwijder het.
   Next shp                                                                         'bekijk volgende shape.
     
   Columns("I:I").ColumnWidth = 32
   Cells.RowHeight = 14
     
End Sub
dus echt Old School code: een  For-Next loop met daarin een IF z AND y THEN ... do-this loop.

Reden van deze post: vooral uitleggen dat als je zoekt naar een oplossing voor een probleem, je altijd goed bezig bent. Je zoekt. Verder wilde ik de macro's verduidelijken omdat je scheef:
Citaat
Ik heb dan ook niet gereageerd op de reacties #21 & 22 en volgende , heel eenvoudig omdat die code mij niets zegt , ik begrijp er zelfs geen snars van...
Ik hoop dat de uitleg van een andere "welwillende maar niet erg snuggere" voor jou een hulp is om de code te gebruiken.
Vastroesten op wat je kent is ook geen uitdaging, je grenzen iets verzetten door één enkele routine per keer bij te leren en te gebruiken geeft je heel veel voldoening, denk ik zo... ;)

Bedankt om hier te helpen!  \o/

Groeten,

Theo

:) 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 lco

  • Oplosser
  • ****
  • Berichten: 781
  • Geslacht: Man
Re: Namen uit lijst filteren
« Reactie #41 Gepost op: 21 juli 2020, 12:13:40 »
SoftAid,

Nu zie ik het ook :-[

de breedte en hoogte van de kolommen was van een vroeger proberen en had ik laten staan :-X
Ik heb deze ondertussen dan ook verwijderd,bedankt voor de opmerking.

    mvg,lco

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.169
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Namen uit lijst filteren
« Reactie #42 Gepost op: 21 juli 2020, 12:53:32 »
Hallo Luc,

zo leren we allemaal bij  :)

Je kan de code die overblijft mogelijk gewoon in het begin van je 1 ste macro zetten, in plaats van die doorverwijzing naar
deze macro Sub shps()

Succes,

:) 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 cow18

  • Ervaren lid
  • ***
  • Berichten: 340
  • Geslacht: Man
  • Oplossing.be
Re: Namen uit lijst filteren
« Reactie #43 Gepost op: 21 juli 2020, 15:19:53 »
reactie #2
Citaat
best eerst je bestandje saven voor je deze macro laat lopen, mogelijks is er meer weg dan enkel je fotos ... (knoppen, ....)

reactie #6 alle soorten shapes kan je hier vinden
https://docs.microsoft.com/en-us/office/vba/api/office.msoshapetype

ik heb een hekel op de manier dat deze vraag aan het evolueren is !
Lees ik ergens gisteren een "sorry" van een andere helper, ik ken de achtergrond niet, maar het zal ook ergens verkeerde woordkeuze of gekwetste ego's zijn, gevaarlijk terrein.

Wat is de echte insteek van deze site ? Andere programmeurs of hobby-isten helpen op het ogenblik dat ze vastlopen of, in het geval van lco, hem van start tot finish, bij het handje vasthouden bij iedere scheet of iedere bobbel.
Ik hoop dat ik tot die categorie "helpers" behoor die zijn bijdragen vrij uitgebreid dokumenteer, maar in het geval lco, is dat parels voor de varkens.

Wat was zijn probleem in deze ? Een macro, die zijn werk deed, maar er eventjes een minuut over bezig was ipv. 8 sec.
Als dat een macro betreft, die iedere dag een tiental keer moet draaien, tot daar, maar een éénmalig proces, allez man.
In een vroeger gepostte bijdrage kreeg ik de kritiek dat de macro niet deed, ik vermoed dat mijn enige fout op dat ogenblik was, dat ik die macro niet onder de desbetreffende knop gehangen had. Na enige tijd hier meegedraaid te hebben, mag een beetje zelfredzaamheid tot een minimum vereiste zijn.

De bijdragen die gisterenavond de revue gepasseerd zijn, die hadden de aanpassing van de rijhoogte en de kolombreedte al buiten de loop en toch was er geen tijdswinst, zoek de oorzaak niet bij de helpers, ik denk dat lco ergens te veel solo-slim speelde en steeds zijn oude macro liet draaien, ik zie, op die "or" ipv "and" in de macro van SoftAid geen verschil met de definitieve versie. Die 8 en 12 vervangen door hun respectievelijke waarden is louter voor de leesbaarheid.

Sub MacroMetEenAndereNaamUitVeiligheidsoverwegingen()
   Dim shp     As Shape

   t = Timer

   For Each shp In ActiveSheet.Shapes
      If shp.Type <> 8 And shp.Type <> 12 Then shp.Delete   'geen van beide types = deleten
   Next shp

   t1 = Timer

   Columns("I:I").ColumnWidth = 32
   Cells.RowHeight = 15

   MsgBox "tijd voor verwijderen shapes " & t1 - t & " sec" & vbLf & "tijd voor kolommen en rijen " & Timer - t1 & " sec"

End Sub
Bovenstaand voorstel had volgende voordelen,
- de macro had een andere naam zodat TS zich niet kan vergissen
- er komt een terugkoppeling onder de vorm van een msgbox, dus die moet je zeker krijgen.
In die msgbox krijg je opgesplitst de tijd nodig voor het wissen van de shapes en de tijd voor de rest.
(nauwkeurigheid van die tijden mag je met een korrel zout nemen, max het 2e cijfer na de komma)


Verder was het in deze discussie over het feit dat je termen moest beoordelen of het voornamen waren of niet.
Bestaat er een site "Voornamen.be" waar alle mogelijke voornamen in alle mogelijke spellingsvormen voorkomen ?
Als je de oplossing van een probleem niet netjes op papier kan zetten, dan kan je ook de macro niet schrijven.
In deze vond ik de opmerkingen van TS zwaar beneden niveau, ik heb een schot voor de boeg gelost, waarbij er, in een tabel, een aantal termen konden ingegeven worden, die normaliter nooit in een voornaam zouden kunnen voorkomen. Die lijst kon steeds verder aangevuld worden.
Na enkele keren had je zo met een 20-tal termen je lijst al voor pak-en-beet 80% kunnen opschonen en de resterende 20% kon je dan eventueel met een 0 overschrijven en dus in de volgende run ook doen verdwijnen.
Ik denk dat TS dat nooit echt van dicht bekeken heeft.

Tot daar mijn aversie !
 
 

Offline lco

  • Oplosser
  • ****
  • Berichten: 781
  • Geslacht: Man
Re: Namen uit lijst filteren
« Reactie #44 Gepost op: 21 juli 2020, 19:11:40 »
cow18,

 had juist een hele brief geantwoord (verkeerde toets ingedrukt)-dus om in het kort te reageren,ik kan niet zonder jullie (tot 14 jaar naar school geweest) heb de kans niet gehad om verder te gaan.

in de toekomst ga ik mij verder onthouden van vragen stellen daar dit problemen geeft voor sommige helpers en mij tot andere forums proberen te richten.

ps:sorry nogmaals van jullie lastig te vallen,bedankt voor alle hulp in het verleden,en tot ziens


    mcg,lco

 


www.combell.com