Help!

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

Hulp bij posten

Recente topics

Auteur Topic: voor de VBA programmers  (gelezen 16352 keer)

0 leden en 1 gast bekijken dit topic.

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: voor de VBA programmers
« Reactie #15 Gepost op: 20 april 2014, 18:36:38 »
Dag Firmin,

Hier ben ik er dan mee, zoals beloofd  ::)

Blad 1 is je originele structuur, op blad 2 en blad 3 vind je een identieke werkwijze, met dat verschil dat ik op blad 3 ook je formules heb weggehaald waardoor nog een tikkeltje sneller een opgave wordt gevonden.

Het maakt voor de rest niets uit, de knoppen op beide werkbladen verwijzen naar dezelfde procedures (ik heb er wel voor gezorgd dat ze op je blad 1 niet kunnen uitgevoerd worden).

Nog een folietje : zowel voor als na het maken van een opgave kan je de oplossing (on)zichtbaar maken (voor als je misschien voor jezelf een opgave wil maken...)

Bedenk wel dat we door deze werkwijze (eerst een oplossing en dan vakjes leegmaken) altijd een opgave krijgen met minstens 1 goede oplossing, maar misschien ook meerdere.

Zoals je eerder kon lezen zal je ook merken dat er regelmatig moet herbegonnen worden (door de procedure, niet door jou !) om een oplossing te creëren, maar 't zal toch al een hele vooruitgang zijn, durf ik hopen  8)

Mvg,
pitufo

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

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: voor de VBA programmers
« Reactie #16 Gepost op: 20 april 2014, 18:39:55 »
 :D Deze keer MET bijlage  :D :D :D :D :D

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

Offline firmin

  • Ervaren lid
  • ***
  • Berichten: 442
  • Geslacht: Man
  • Excel Specialist
Re: voor de VBA programmers
« Reactie #17 Gepost op: 20 april 2014, 19:57:41 »
Hallo SoftAid,

WOW  ;D ;D ;D ;D

Firmin
PB easynote LE69KB,AMD quad-core,1000GB HDD,AMD Radeon HD8330,8GB DDR3
Windows 10,office 2007
MSE, Internet Explorer 11

Offline firmin

  • Ervaren lid
  • ***
  • Berichten: 442
  • Geslacht: Man
  • Excel Specialist
Re: voor de VBA programmers
« Reactie #18 Gepost op: 20 april 2014, 23:22:49 »
pitufo
WOW werkt ook zoals het moet

SoftAid
Foutje gevonden

'Controle of er vertikaal geen 3 dezelfde cijfers worden ingevoerd
    If rij >2 Then    'hier stond er een 3
        If Cells(rij, kolom).Value = Cells(rij - 1, kolom).Value And Cells(rij, kolom).Value = Cells(rij - 1, kolom).Value Then
            GoTo Opnieuw
        End If
    End If

Beide heren hartelijk dank

Firmin
PB easynote LE69KB,AMD quad-core,1000GB HDD,AMD Radeon HD8330,8GB DDR3
Windows 10,office 2007
MSE, Internet Explorer 11

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: voor de VBA programmers
« Reactie #19 Gepost op: 21 april 2014, 08:35:38 »
Firmin,

Ik heb, denk ik, ergens iets gemist.
WOW ?

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

Online SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.128
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: voor de VBA programmers
« Reactie #20 Gepost op: 03 mei 2014, 16:20:24 »
SoftAid
Foutje gevonden

'Controle of er vertikaal geen 3 dezelfde cijfers worden ingevoerd
    If rij >2 Then    'hier stond er een 3
        If Cells(rij, kolom).Value = Cells(rij - 1, kolom).Value And Cells(rij, kolom).Value = Cells(rij - 1, kolom).Value Then
            GoTo Opnieuw
        End If
    End If
Hallo Firmin,

ik hoop dat je er iets aan hebt.
Wat het gevonden foutje betreft, dit moet toch wel degelijk een 3 zijn, omdat deze code moet controleren of er geen 3 dezelfde cijfers verticaal worden ingevoerd.

De variabele "rij" loopt van 2 tot 11, dus is rij 2 de eerste gebouwde rij ("C2:L2") in je Binero.
Rij 3 is de tweede gebouwde rij ("C3:L3").

Als rij >3 (dus rij 4 ingevuld wordt) dan moet je controleren of er geen 3 dezelfde cijfers zijn geplaatst in de derde gebouwde rij ("C4:L4") als in de eerder gebouwde 2 rijen.
enzovoort....  :)

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 !

Online SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.128
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: voor de VBA programmers
« Reactie #21 Gepost op: 03 mei 2014, 19:36:55 »
Firmin,

Ik heb, denk ik, ergens iets gemist.
WOW ?

Mvg,
pitufo

Hallo pitufo,

WOW is een uiting van enthousiasme en bewondering (gebaseerd op het Engels).
En je hebt ook knap werk geleverd.

Toch kan ik het niet nalaten om op te merken dat je werkstuk nog geen bevredigend resultaat geeft.

Voorwaarden voor een Binero:
Er mag horizontaal en vertikaal slechte 2 maal het zelfde cijfer achter elkaar staan
bij een "paar-Binero" moeten er evenveel enen als nullen zijn per rij of kolom
Bij een "onpaar-Binero" moet er een nul meer zijn dan het aantal enen
Er mogen geen 2 rijen hetzelfde zijn
Er mogen geen 2 kolommen hetzelfde zijn


Aan de eerste vereisten voldoet je programma (uitgaand van een "paar-Binairo"), maar de 2 laatste voorwaarden worden niet vervuld: er staan soms gelijke rijen of/en kolommen in je Binairo.

Mijn bijgevoegd voorbeeld werkt "bijna" perfect, maar soms gebeurt er toch nog wel eens dat het programma een fout (niet-gelijke rijen/kolommen) doorlaat. Dit is dan wel onmiddellijk te zien aan de kleuropmaak. Herstarten is dan de enige optie (tot nu toe  ;) 0:-)).
Wordt aan gewerkt....  8)

De knopjes en macro's om bvb een kopie te maken (of dergelijke) heb ik achterwege gelaten, dat kan ieder voor zich gemakkelijk zelf doen.

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 RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.277
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: voor de VBA programmers
« Reactie #22 Gepost op: 04 mei 2014, 12:52:23 »
@SoftAid, eigenlijk heb ik geen recht van spreken omdat ik niet mee speel, maar je - zéker knap gemaakte programma - levert maar 1 oplossing. Tenminste... Bij mij. Hoe vaak ik ook op het knopje klik, krijg ik telkens weer hetzelfde grid voorgeschoteld. Gaat dit nog niet goed?
______________________________

Groet, Leo

Online SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.128
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: voor de VBA programmers
« Reactie #23 Gepost op: 04 mei 2014, 16:02:13 »
Dag Leo,

Blij je er bij te hebben  ;D :)

Ik druk 5 maal, en krijg 5 maal een ander grid.... Dit gaat bij mij dus niet fout.

Wat er wel heel soms gebeurt is dat hij mij een MsgBox geeft die zegt dat er geen dubbels zijn, waar er wel nog dubbele rijen of kolommen zijn. Het is zeldzaam, maar dus niet foolproof....(daarom ook al die controle-cellen, zodat ik kan zien of het programma me niet bedonderd  0:-))

Ik vind op internet geen enkele "Binero-builder" in VBA (Excel), wel in andere, voor mij onbekende talen.

Daarom vond ik het een uitdaging om er eentje te bouwen.
Een probleem is nog om de moeilijkheidsgraad voor de oplosser vast te stellen. Het aantal vakjes dat je random weghaalt uit de gegenereerde grid is niet alleen bepalend voor de moeilijkheidsgraad, en men zou de zekerheid moeten hebben dat de Binero oplosbaar is. Daar ben ik toch al een keertje over gestruikeld...  >:(

Voor de rest moet de code nog een beetje gecomprimeerd worden, indien mogelijk.

Alle input is welkom ;)

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

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: voor de VBA programmers
« Reactie #24 Gepost op: 10 mei 2014, 00:57:05 »
Hey SoftAid,

Zware (werk)week achter de rug, heb hier dus niet eerder kunnen naar kijken  :(

Eerst 2 misverstanden opruimen :
- de "WOW" in jouw betekenis is me natuurlijk bekend  >:D , maar de zinsbouw van Firmin had me op het verkeerde spoor gezet. Had ik ook naar zijn reactie op jouw bijdrage gekeken, dan was het me misschien niet overkomen. My mistake...
- alle binero's die ik in mijn leven heb gezien bevatten 10x10 vakjes, zo ook die van Firmin  :-\ , en daarbij kan dus van een "onpaar-binero" geen sprake zijn. Goed om weten natuurlijk dat die ook bestaan !

Ook nieuw voor mij is dat er geen gelijke rijen of kolommen mogen zijn. Sorry !
Los daarvan vond ik mijn oplossing niet van de slechtste  8) , dus ik zou daar nog even op doorborduren om ook die controle uit te voeren. Kan weer niet te moeilijk zijn...

Ik moet trouwens nog iets kwijt over je laatste bijlage : je hebt zelf al opgemerkt dat je systeem soms fouten doorlaat bij de controle op gelijke kolommen en rijen, maar daarnaast worden ook kolommen met meer dan 5 nullen of enen geaccepteerd.

Als ik dit weekend tijd vind (met toch wel een nogal nadrukkelijke "als"  :( ) los ik dit alvast op.

Je stelt ook in vraag of we wel oplosbare binero's aan het maken zijn. Wel, ja en neen  ::) . Vermits we met een oplossing beginnen moet het rooster met leeggemaakte cellen nadien wel oplosbaar zijn, maar zoals ik vroeger al heb aangegeven kunnen we op geen enkele manier met zekerheid weten dat er slechts één oplossing zal zijn.

Om ook dat te regelen zullen we helaas ook een "oplosser" moeten schrijven... en vervolgens :
1) met ons huidige systeem een willekeurige oplossing maken en een "redelijk" aantal vakjes leegmaken
2) hiervan een kopie opzij zetten
3) oplosser laten werken maar NIET laten stoppen bij een gevonden oplossing
4) als hij ook een tweede vindt laten stoppen
5) uit de kopie één willekeurig extra vakje vullen en vanaf punt 3 hervatten tot hij slechts één oplossing vindt

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

Online SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.128
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: voor de VBA programmers
« Reactie #25 Gepost op: 10 mei 2014, 14:26:05 »
- de "WOW" in jouw betekenis is me natuurlijk bekend  >:D , maar de zinsbouw van Firmin had me op het verkeerde spoor gezet. Had ik ook naar zijn reactie op jouw bijdrage gekeken, dan was het me misschien niet overkomen. My mistake...
Het is je vergeven  ;D ;) :)
- alle binero's die ik in mijn leven heb gezien bevatten 10x10 vakjes, zo ook die van Firmin  :-\ , en daarbij kan dus van een "onpaar-binero" geen sprake zijn. Goed om weten natuurlijk dat die ook bestaan !
Binero's bestaan in alle afmetingen en verhoudingen, ze kunnen ook rechthoekig zijn, en paar-onpaar gemengd...
Ook nieuw voor mij is dat er geen gelijke rijen of kolommen mogen zijn. Sorry !
Dat is een van de belangrijkste, maar ook vaakst over het hoofd geziene onderdeel waaraan een oplossing moet voldoen. Anders zouden veel "Moeilijke" Binero's heel makkelijk op te lossen zijn.
Los daarvan vond ik mijn oplossing niet van de slechtste  8) , dus ik zou daar nog even op doorborduren om ook die controle uit te voeren. Kan weer niet te moeilijk zijn...
Je werkstukje vond ik ook goed, maar er moet dus wel degelijk met alles rekening worden gehouden, als je een echte Binero wilt maken toch...
Ik moet trouwens nog iets kwijt over je laatste bijlage : je hebt zelf al opgemerkt dat je systeem soms fouten doorlaat bij de controle op gelijke kolommen en rijen, maar daarnaast worden ook kolommen met meer dan 5 nullen of enen geaccepteerd.
Er zitten nog veel fouten in mijn oefening. Ik denk dat ik op de goede weg was, maar dat de "controles" in een verkeerde volgorde of op een verkeerd moment in de cyclus worden uitgevoerd. Er is nog een heel lange weg te gaan...
Zo dien ik een tussencontrole te maken die controleert of er in de eerste (+/- 6 rijen) niet te veel enen of nullen worden gebruikt, want dan kan in de overblijvende rijen enkel 3 of vier gelijke cijfers plaatsen, simpelweg omdat er niets anders meer over is.
Je stelt ook in vraag of we wel oplosbare binero's aan het maken zijn. Wel, ja en neen  ::) . Vermits we met een oplossing beginnen moet het rooster met leeggemaakte cellen nadien wel oplosbaar zijn, maar zoals ik vroeger al heb aangegeven kunnen we op geen enkele manier met zekerheid weten dat er slechts één oplossing zal zijn.

Om ook dat te regelen zullen we helaas ook een "oplosser" moeten schrijven... en vervolgens :
1) met ons huidige systeem een willekeurige oplossing maken en een "redelijk" aantal vakjes leegmaken
2) hiervan een kopie opzij zetten
3) oplosser laten werken maar NIET laten stoppen bij een gevonden oplossing
4) als hij ook een tweede vindt laten stoppen
5) uit de kopie één willekeurig extra vakje vullen en vanaf punt 3 hervatten tot hij slechts één oplossing vindt

Hier volg ik niet helemaal. Voorbeeld: afhankelijk van welke vakjes die (nu random) leeggemaakt worden in de Binero-builder, kan de Binero oplosbaar of niet oplosbaar zijn. Ik heb er al enkele uit de boekjes proberen op te lossen. Dat lukt altijd. Haal ik een cijfer weg uit de opgave, en plaats een cijfer bij die ik heb bekomen uit een juiste oplossing, dan krijg ik deze Binero niet altijd meer opgelost. En dit omdat er niet genoeg aanknopingspunten zijn, of te veel keuzes.
Er zal dus inderdaad een binero-oplosser moeten geschreven worden om via software te controleren of die opgave ook oplosbaar is.
Als er twee (of meer) mogelijkheden zijn om de Binero op te lossen (en dat kan soms), dan mag dat natuurlijk.

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 pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: voor de VBA programmers
« Reactie #26 Gepost op: 10 mei 2014, 14:57:51 »
Hallo SoftAid,

Eventjes iets compleet naast de kwestie : toen ik ook probeerde om een citaat in te voegen wou dat maar niet lukken. Kijk ik ergens over (of moet ik een nieuw topic starten  :D ) ?

Vervolgens terzake (betreffende het stukje waar je me niet volgt) : we beginnen met een correcte oplossing (of gaan die binnenkort toch voorstellen  0:-) ). Letterlijk om het even hoeveel vakjes we dan leegmaken moet er toch altijd minstens één oplossing mogelijk zijn, namelijk die waar we mee gestart waren !

Hoe meer vakjes we evenwel leegmaken hoe meer mogelijke oplossingen we wellicht creëren, en dat kan inderdaad zodanig hoog oplopen dat hem manueel oplossen niet meer doenbaar is. Maar louter technisch gezien blijft hij dus "oplosbaar", ik denk dat je me enkel daarin misbegrepen hebt  ;)

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

Online SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.128
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: voor de VBA programmers
« Reactie #27 Gepost op: 10 mei 2014, 15:28:29 »
Eventjes iets compleet naast de kwestie : toen ik ook probeerde om een citaat in te voegen wou dat maar niet lukken. Kijk ik ergens over (of moet ik een nieuw topic starten  :D ) ?

Er zijn twee manieren om een citaat toe te voegen:

1- Open een bericht door bij het bericht waaruit je wilt citeren je op de knop "Citaat" te klikken.
Een nieuw bericht opent met bvb:
[ quote author=pitufo link=topic=41976.msg215360#msg215360 date=1399726671]
"Tekst"
[/quote]en geeft als resultaat:
"Tekst"
Je kan de "Tekst" bewerken door onnodige zinnen te verwijderen. Onder "[/quote]" kan je jou reactie plaatsen op dat citaat.

2- Je kan de knop "Voeg citaat toe" gebruiken in een gewoon bericht, en tekst kopiëren/plakken vanuit een voorgaand bericht. Voorbeeld:
[ quote]"Tekst"[ /quote] (hier is er dan wel geen TimeStamp, waardoor je niet vermeld van wie de quote komt).
Het resultaat is dan:
Citaat
Tekst


Vervolgens terzake (betreffende het stukje waar je me niet volgt) : we beginnen met een correcte oplossing (of gaan die binnenkort toch voorstellen  0:-) ). Letterlijk om het even hoeveel vakjes we dan leegmaken moet er toch altijd minstens één oplossing mogelijk zijn, namelijk die waar we mee gestart waren !
Hoe meer vakjes we evenwel leegmaken hoe meer mogelijke oplossingen we wellicht creëren, en dat kan inderdaad zodanig hoog oplopen dat hem manueel oplossen niet meer doenbaar is. Maar louter technisch gezien blijft hij dus "oplosbaar", ik denk dat je me enkel daarin misbegrepen hebt  ;)

Laten we je antwoord even Extreem beschouwen, en we maken 99 vakjes van de 100 leeg. Dan blijft er maar één 1 of één nul over. Moeilijk om dan een Binero op te lossen, je zal er dan zelf een moeten creëren...

Maar ook als je 50 vakjes (of meer) van een correcte Binero leegmaakt, dan bepaald dit nog niet de moeilijkheidsgraad, of de oplosbaarheid.

Er moet tijdens het oplossen steeds een mogelijkheid zijn om via elimineren en logisch denken verder te kunnen naar een volgende stap in de oplossing. Ik hoop dat ik me goed uitgedrukt heb en mijn zin begrijpelijk is.

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

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: voor de VBA programmers
« Reactie #28 Gepost op: 10 mei 2014, 15:54:33 »
Geen probleem, SoftAid, want eigenlijk zeggen we beiden in se precies hetzelfde waar we het over de oplosbaarheidsgraad hebben  ;)

Na mijn vorig bericht heb ik me trouwens nog even gebogen over het reglement dat zegt dat er geen identieke rijen of kolommen mogen voorkomen. Die buiten beschouwing gelaten waren we het al eens dat mijn systeem correcte oplossingen genereerde. In het bijgevoegde bestandje is ondertussen ook die extra controle opgenomen.

Ik zie voorlopig niet waar het fout zou kunnen gaan, en neem voetstoots aan dat jij er nogmaals met de loupe zal over gaan  8) ? Ik hoor het dan wel als je nog iets vindt  :glare:

Mvg,
pitufo

PS : thanks voor de "citaat"-uitleg. Ik had het zo ook al geprobeerd, maar niet stilgestaan bij de mogelijkheid dat het er bij verzenden anders zou uitzien  :-[
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Online SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.128
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: voor de VBA programmers
« Reactie #29 Gepost op: 10 mei 2014, 17:58:13 »
Hallo pitufo,

ik heb je macro even getest, en deze werkt vlekkeloos. In een periode van 15 minuten bracht hij 25 binero's voort, dat is geen slechte tijd. Proficiat met het behaalde resultaat  8)

Nu moeten we nog een manier bedenken om:
- weten hoeveel cellen we moeten leegmaken om:
- welke moeilijkheidsgraad te halen en dan:
- controleren of de Binero ook op te lossen is.

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

 


www.combell.com