Help!

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

Hulp bij posten

Recente topics

Auteur Topic: Sudoku oplossen.  (gelezen 22527 keer)

0 leden en 1 gast bekijken dit topic.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.178
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #30 Gepost op: 25 december 2019, 13:51:44 »
Goedemiddag pitufo,

je macro is net wat ik nodig heb, omdat deze (weer) een 100-tal loops moet draaien.
Maar net daarom, en door mijn nul-kennis van functies, laat ik je functies even aan de kant.

Ik ben natuurlijk met teveel zaken gelijktijdig bezig, elk idee zet ik snel om in voorlopige code, want straks ben ik het weer vergeten.

Eigenlijk ben ik (toch weer) de Sudoku gedeeltelijk aan het laten oplossen door macro's. Nu ik toch al zo ver ben.
Maar het moet leesbaar blijven voor mij, en dat is je vorige code zeker. Die kan ik goed gebruiken.

De Sudoku volledig laten oplossen zal er wel niet in zitten, ik weet hoeveel valkuilen er zijn. Maar we zien wel.... 0:-)

In bijlage mijn versie.5, waarin:
1 - In het werkblad, rechts van de linker sudoku (de echte waar het om gaat) heb ik een =Als(Aantal.als()) formule gezet
     en doorgetrokken. En deze toont mij alle cijfers die maar 1 keer voorkomen in de horizontale Range. Spijtig dat ik
     MergeCell niet tot mijn beschikking heb in het werkblad, want nu toont hij ook de cijfers in de Merged Cells.
     En omdat dit dus toch naar VBA moest durfde ik, na zelf goed gezocht te hebben, om hulp vragen.
2 - Er staan nu een reeks knoppen onder de Sudoku, die natuurlijk moeten gaan dienen om de macro in te vullen.
     Deze zijn er enkel grafisch, nog niet in gebruik dus.
3 - Omdat je bij het invullen van een definitief (gevonden) cijfer een Niet-Samengevoegde veld (van 3 x 3) moet omzetten
     naar een Samengevoegde wil ik beneden een cijfer-Commandbutton de focus geven bij click, en dan op de cellen in de
     Sudoku klikken om de cellen te Mergen, en de waarde te geven onder de CommandButton.
     Maar.... dan moet je de linker-boven cel van dat groepje klikken. Dat wilde ik opvangen door een transparante knop
     over elk veld te zetten. toch hoop ik het straks in de code te kunnen doen zonder die transparante drukknoppen, want
     dat lijkt me toch een heel gedoe (81 knoppen extra  :default_thumpdown:).
     Die transparante heb ik als proef al eens aangemaakt in het rechter Sudoku-test-veld.

Dat zal het wel geweest zijn voor vandaag. als ik hiermee al iets vooruitgang boek ben ik al blij.

Bedankt en 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 cow18

  • Ervaren lid
  • ***
  • Berichten: 340
  • Geslacht: Man
  • Oplossing.be
Re: Sudoku oplossen.
« Reactie #31 Gepost op: 25 december 2019, 20:16:44 »
Kleine workaround.
Die 9 waarden in je tabblad "data", voeg daar een waarde achter de komma aan toe.
1 wordt dus 1.1, 2 wordt 2.1, etc.
Nu moet je in je formules in de kolommen AG:AI ook dat cijfer gebruiken.
Aangezien je samengevoegde cellen alleen integers zijn, kan je die op die manier uitsluiten en tel je op deze manier alleen je hulpcellen.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.178
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #32 Gepost op: 25 december 2019, 21:13:20 »
Holy Cow  ;D,

Eerst en vooral de beste wensen,
maar zeker heel erg welkom op Oplossing.be  :)

Dank voor je reactie.
Ik weet wat je bedoeld, en ik ben er van overtuigd dat dit kan werken :thumbsup:
Enkel... dat stadium met hulpgetallen zijn we weeral voorbij.
Alhoewel ik er nog wel gebruik, maar dat is echt maar tijdelijk.
Volgende stap zou de macro de cel met de "eenzame" waarde zelf moeten selecteren. Voorlopig moet ik nog handmatig de bovenste linker cel van de blok die ik wil invullen selecteren, en dan de CommandButton drukken die daar de waarde invult en Merge, Interior en Font juist zet. Daarna opnieuw op de knop  "Maak hulpcellen" drukken om te Updaten....

Intussen zijn mijn macro's bij de CommandButtons() ook actief.
Ik had (om wat minder code te zien) 95% van elke routine in een aparte macro gezet, en daar naartoe gestuurd met een GoSub, maar daar kreeg ik een foutmelding "Object vereist" en dat zegt mij niet veel.

Ik hang even de laatste versie aan maar hou altijd in gedachten dat ik een "nonneke" ben  ;D 0:-)

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 cow18

  • Ervaren lid
  • ***
  • Berichten: 340
  • Geslacht: Man
  • Oplossing.be
Re: Sudoku oplossen.
« Reactie #33 Gepost op: 25 december 2019, 22:54:56 »
grappig, in data is de eerste waarde toch 1,1.
Toch had zo'n aanpassing voor alle getallen de code kunnen vereenvoudigen ...

Sub ZoekenBart()
   Dim LB As Range, c As Range, Tel
   Set LB = Sheets("blad1").Range("D4")                              'cel linksboven je raster, geen samengevoegde cellen in rij 4 en kolom D !!!!

   'methode 1 : kijken naar rasters van 3*3 met 1 resterend getal
   For rij = 1 To 27 Step 3
      For kol = 1 To 27 Step 3
         Set c = LB.Offset(rij, kol)                                 'cel linksboven van zo'n 3*3
         If Not c.MergeCells And WorksheetFunction.Count(c.Resize(3, 3)) = 1 Then
            MsgBox "in raster van cel " & c.Address & " is er nog 1 optie": c.Select: Exit Sub
         End If
      Next
   Next
   
   'methode 2 : tellen resterende opties per rij
   For rij = 1 To 27 Step 3
      Set c = LB.Offset(rij, 1).Resize(3, 27)                        'cel linksboven van zo'n 3*3
      ReDim Tel(9)                                                   'alle tellers op 0
      For i = 1 To 9                                                 'alle waarden aflopen
         Tel(i) = Application.CountIf(c, i)                          'aantal keer een bepaalde waarde
      Next
      For kol = 1 To 27 Step 3
         Set c1 = LB.Offset(rij, kol)
         If c1.MergeCells Then                                       'correctie voor de samengevoegde cellen
            If IsNumeric(c1) Then
               If WorksheetFunction.Median(1, 9, c1.Value) = c1.Value Then Tel(c1.Value) = Tel(c1.Value) - 1
            End If
         End If
      Next
      i = Application.Match(1, Tel, 0)
      If IsNumeric(i) Then
         Set c2 = c.Find(i - 1)
         c2.Select
          Set c3 = LB.Offset(((c2.Row - LB.Row) \ 3) * 3 + 1, ((c2.Column - LB.Column) \ 3) * 3 + 1).Resize(3, 3)
         MsgBox "in de rij " & c.Row & " is er slechts 1 maal de waarde " & i - 1 & " in de cel " & c2.Address & vbLf & "raster " & c3.Address
            Exit Sub
      End If
   Next
   
   'methode 3 : tellen resterende opties per kolom
   For kol = 1 To 27 Step 3
      Set c = LB.Offset(1, kol).Resize(27, 3)                      'cel linksboven van zo'n 3*3
      ReDim Tel(9)                                                   'alle tellers op 0
      For i = 1 To 9                                                 'alle waarden aflopen
         Tel(i) = Application.CountIf(c, i)                          'aantal keer een bepaalde waarde
      Next
      For rij = 1 To 27 Step 3
         Set c1 = LB.Offset(rij, kol)
         If c1.MergeCells Then                                       'correctie voor de samengevoegde cellen
            If IsNumeric(c1) Then
               If WorksheetFunction.Median(1, 9, c1.Value) = c1.Value Then Tel(c1.Value) = Tel(c1.Value) - 1
            End If
         End If
      Next
      i = Application.Match(1, Tel, 0)
      If IsNumeric(i) Then
         Set c2 = c.Find(i - 1)
         c2.Select
         Set c3 = LB.Offset(((c2.Row - LB.Row) \ 3) * 3 + 1, ((c2.Column - LB.Column) \ 3) * 3 + 1).Resize(3, 3)
         MsgBox "in de kolom " & c.Column & " is er slechts 1 maal de waarde " & i - 1 & " in de cel " & c2.Address & vbLf & "raster " & c3.Address
         Exit Sub
      End If
   Next

End Sub



Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.178
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #34 Gepost op: 25 december 2019, 23:16:04 »
Hallo Bart,

chapeau voor je code \o/
Echter.... als je het draadje gelezen hebt dan weet je dat ik vroeg om de code eenvoudig te houden voor een beginner als ik.
Hier leer ik niets uit, en kan er zelf niet mee verder werken. Ik weet wel dat je het goed bedoeld, maar voor mij liever iets langer dat ik begrijp, dan inkorten en door het bos de bomen niet meer zien.
Nu kan ik wel hele stukken lezen en begrijpen in je code (voornamelijk omdat ik er de laatste week veel mee bezig geweest ben) maar moest ik deze code zo op mijn bord krijgen... dan moet ik passen. En sta ik nog even ver.
Ik ga je code zeker bewaren, en misschien kan ik er wel nog uit leren.
Ik hoop ook dat je de essentie van mijn programmeren inziet, namelijk "Al doende leren".
Ik heb echt geen knobbel voor programmeren, al ben ik 45 jaar geleden begonnen in Basic en DOS.
Wat For-next'en en Do while'n, afgewisseld met iffen en offen en ENnen moet ik langzaamaan aanvullen met voor mij begrijpbare code  ;D ;D ;D.

En IK kan dat niet leren door een complexe code (proberen) te lezen.
Lees dit draadje anders even door van voor af aan, dan begrijp je mogelijk wat ik kan en niet kan.

Een regel die ik als helper (nu al meer dan 20 jaar) gebruik is: kijk eerst wat het niveau is van de vraagsteller!!!

Groeten,

:) SoftAid :)             


ps: die 1,1 in A1 van "Data" heb ik er ingezet na jou eerst bericht, maar ik zag dadelijk in dat dit enkel werkte met volledig andere code, dus ben ik er ook maar dadelijk mee gestopt.
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.178
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #35 Gepost op: 25 december 2019, 23:41:53 »
Hallo Bart,

ik heb je code even getest "in de vlugte..." en hij geeft mij enkel een melding bij cel U18 (waarde 5) bij horizontaal zoeken.
Ik heb even handmatig gezorgd dat er in het linksboven raster van 3 x 3 maar één 5 staat.
maar als je macro gaat kijken naar "rasters van 3*3 met 1 resterend getal", dan geeft hij geen melding.

Ook staat er voor het zoeken in verticale Ranges ( in F29) een enkele waarde 2, en ook daar geeft de macro geen melding van.

Het lezen gaat wel redelijk, omdat ik weet wat ik mag verwachten, maar ik zal nooit de skills hebben die jij hebt,
laat dat duidelijk zijn  ;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 cow18

  • Ervaren lid
  • ***
  • Berichten: 340
  • Geslacht: Man
  • Oplossing.be
Re: Sudoku oplossen.
« Reactie #36 Gepost op: 26 december 2019, 00:41:13 »
er staat in de code op 3 plaatsen "Exit Sub", haal die weg, dan loopt hij telkens door op zoek naar een volgende treffer.
Ipv. die exit sub had je dan kunnen springen naar een macro die dat deelraster samenvoegde en de juiste waarde toekende.

Ik laat het voorlopig hierbij, dan kan je op je tempo leren.

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.178
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #37 Gepost op: 26 december 2019, 13:44:52 »
Dag Bart,

Dank je om mij op mijn tempo te laten leren  0:-)

? Is er iets mis met deze lijn in je code:
 MsgBox "in raster van cel " & c.Address & " is er nog 1 optie": c.Select: Exit SubMag dit mogelijk zo zijn:
MsgBox "in raster van cel " & c.Address & " is er nog 1 optie:" & c.Select
Je hebt ook geen code om via Msgbox weer te geven als er 2 verschillende maar unieke waarden staan (in dezelfde Range).
Normaal verwacht je dan dat de macro je één Msgbox geeft, na een OK terug gaat kijken of er nog een tweede (of derde) moet gemeld worden? Dat zit er dus niet in  :'(.

Maar, we geraken er wel aan uit  :)
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: Sudoku oplossen.
« Reactie #38 Gepost op: 26 december 2019, 15:01:23 »
Hallo SoftAid,

Anders even terug naar #30?
Ik heb enkele kleine wijzigingen aangebracht aan je bijlage bij die post.

Citaat
Spijtig dat ik MergeCell niet tot mijn beschikking heb in het werkblad, want nu toont hij ook de cijfers in de Merged Cells
Je hulpkolommen met de formules "=ALS(AANTAL.ALS(..." heb ik wat naar rechts geschoven (als mijn oplossing je bevalt mogen die gewoon weg). 'k Had ze eerst door een zelf ontworpen functie vervangen maar wegens echt te traag is het nu een macro "aantal_enkelvoudig" (what's in a name) geworden. Daar is géén knop voor voorzien omdat deze wordt aangesproken vanuit andere procedures, namelijk uit "Maak_hulpcellen" en uit een Worksheet_Change-event.

Dat laatste heeft hier mee te maken:
Citaat
Maar.... dan moet je de linker-boven cel van dat groepje klikken. Dat wilde ik opvangen door een transparante knop over elk veld te zetten
Dat event zorgt ervoor dat je in gelijk welk van de 9 vakjes zomaar een cijfer kan invullen (dus zonder gebruik te moeten maken van de 9 knoppen onder je kader). Bekijk misschien eens regel per regel; ik denk dat die allemaal vrij duidelijk zullen zijn. De enige 'moeilijkheid' was die linkerbovenhoek te vinden. Dat gebeurt met
y = (Int((Target.Row - 5) / 3) * 3) + 5
x = (Int((Target.Column - 5) / 3) * 3) + 5
Vervolgens wordt eerst je ingevoerd getal in die hoek gezet en daarna de cellen samengevoegd.

Ik denk dat daarmee je 3 aandachtspuntjes uit die post van de baan zijn?

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

Offline cow18

  • Ervaren lid
  • ***
  • Berichten: 340
  • Geslacht: Man
  • Oplossing.be
Re: Sudoku oplossen.
« Reactie #39 Gepost op: 26 december 2019, 15:15:33 »
Citaat
MsgBox "in raster van cel " & c.Address & " is er nog 1 optie": c.Select: Exit Sub
je voorstel om dit aan te passen werkt niet, in mijn regel waren dat 3 verschillende acties, gescheiden door die ":".
Voor de leesbaarheid had ik daar dus beter 3 regels van gemaakt.
Jouw voorstel zal dus met een foutboodschap eindigen, want die messagebox moet iets fouts weergeven.

Andere opmerking, als er meerdere unieke getallen voorkomen binnen een "grote" rij (= 3 kleine rijen), dan werd er maar 1 afgewerkt.
Klopt inderdaad. Voor methode 2 heb ik daar een do-loopje bijgezet en die werkt ze dan alle af.
Mits je wilde leren, kan je dit anders ook overzetten naar methode 3

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.178
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #40 Gepost op: 26 december 2019, 16:10:46 »
Hallo cow18,

Citaat
in mijn regel waren dat 3 verschillende acties, gescheiden door die ":"

Had ik nog nooit gehoord, en nergens gezien, dat je verschillende acties op dezelfde regel kan zetten als je ze scheid door een ":"... ? Weer wat bijgeleerd dus, waarvoor dank.
Of  ik dat vaak ga gebruiken betwijfel ik, omdat het voor mijn leesbaarheid duidelijker is om met aparte regels te werken.

Citaat
Andere opmerking, als er meerdere unieke getallen voorkomen binnen een "grote" rij (= 3 kleine rijen), dan werd er maar 1 afgewerkt.
Klopt inderdaad. Voor methode 2 heb ik daar een do-loopje bijgezet en die werkt ze dan alle af.
Mits je wilde leren, kan je dit anders ook overzetten naar methode 3

Graag, ik ga de code straks bekijken en aanpassen:Alvast bedankt:Groeten  ;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 pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Sudoku oplossen.
« Reactie #41 Gepost op: 26 december 2019, 18:11:32 »
Hallo SoftAid,

Je versie 5 stond al bij me klaar toen ik voor een tijdje werd weggeroepen, en heb daarna zonder aan te melden de volgende posts diagonaal gelezen waardoor ik niet had gezien dat je al versie 6 had meegegeven...
Het meeste uit mijn #38 is dus achterhaald, maar een ander deel is wel degelijk bruikbaar. Ik heb het op de juiste plaats in mijn huidige bijlage aan de code toegevoegd.

Even een kleinigheid tussendoor : je interne bladnaam Blad1 heette voor jou Blad2, en vice versa. Die heb ik toch maar aangepast om latere verwarring uit te sluiten...
Alle code in de modules heb ik ongewijzigd gelaten (maar je weet maar nooit of je in een latere fase misschien toch nog eens de efficiëntere werkwijze die ik je in een veel eerder stadium had aangeboden nog eens bovenhaalt).

Dus: enkel met de code die aan Blad1 gekoppeld is heb ik een beetje gespeeld. Je vindt er ook wat 'algemene leerstof' in terug. Ik zag daar namelijk ergens een Gosub staan, maar dat werkt niet op die manier. Een blik op de code zal meteen duidelijk maken hoe het wel kan.

In de code "oplossing" zitten een paar kleine dingetjes om te vermijden dat een ongelukkige klik roet in het eten gooit. Vooreerst wordt gekeken of je wel binnen je kader staat, én in een niet-samengestelde cel, én in niet meer dan één. Daarna wordt de samen te stellen range bepaald, om het even welke cel geselecteerd is binnen die 9 cellen (dat is het stukje dat ik uit mijn voorgaande code heb geplukt).
Een lichte verbetering?

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

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.178
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #42 Gepost op: 26 december 2019, 20:41:23 »
Hallo pitufo,

Sorry dat ik niet sneller reageerde.

Ik zie dat je mooi werk hebt verricht, met die code:
rij = (Int((rij - 5) / 3) * 3) + 5
De code:
oplossing (1)heb ik ook begrepen. Zo iets als GoSub (1), maar dan beter  ;D
Ik zal het proberen te onthouden voor later.
Krijg er wel een zwaar hoofd van, of is die fles Chiraz daar de oorzaak van?
Ik moet nog veel leren....  :-[
Maar....
We zijn toch, dank zij jullie hulp, al heel ver gekomen. Er zijn nog horden te nemen, en die zullen waarschijnlijk nog veel moeilijker zijn. Maar als ze te moeilijk zijn dan stoppen we op dat punt. Anders moeten we niets meer doen dan op een knop drukken, en de Sudoku is opgelost. Dergelijke software vindt je op elke hoek van het internet, dus die gaan we niet trachten na te maken.

Ik ga aan de slag hiermee.

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 SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.178
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #43 Gepost op: 28 december 2019, 16:51:48 »
Hallo cow18,

Voor methode 2 heb ik daar een do-loopje bijgezet en die werkt ze dan alle af.
Mits je wilde leren, kan je dit anders ook overzetten naar methode 3

Inderdaad. Ik wil graag bijleren. Maar soms gaat het niet zoals verwacht.

Ik wilde de Do-While-loop eerst in de eerste routine zetten, deze die al de 3*3 aanpakt op maar 1 getal.
Als je deze routine maar éénmaal laat lopen, dan vind hij ook maar een beperkt aantal "singles".
Daarom moet hij gevonden singles eerst omzetten naar Merged cells en dan opnieuw de hulpcellen aanpassen.
Na die Maak_hulpcellen() vindt de routine nieuwe singles, en zal deze ook aanpassen.
Als er geen singles meer gevonden worden moet de routine uit de Do-While-loop gaan, en beginnen aan de 2 de methode: zoeken per Rij.
Wat is mijn probleem: ik kan uit je code geen argument kan aanhalen die de Do-While-loop stopt zonder vast te lopen, zonder macro-onderbreking.
Ik had nu maar het meest voor de hand liggende genomen:

Loop While Not c.MergeCells And WorksheetFunction.Count(c3) > 1
Ik voeg een voorbeeldbestand bij. Mocht je zin en tijd hebben....  :thumbsup:

:) 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.178
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Sudoku oplossen.
« Reactie #44 Gepost op: 28 december 2019, 17:19:47 »
Hallo pitufo,

je interne bladnaam Blad1 heette voor jou Blad2, en vice versa. Die heb ik toch maar aangepast om latere verwarring uit te sluiten...
Fijn me er op te wijzen.
Ik ben enkele uren bezig geweest met in alle versie's de Blad-naam aan het juist excel-blad te koppelen.
Ik heb ook liever dat dit conform blijft, anders krijg ik op het laatste onoverzichtelijke werkboeken.  :thumbsup:
Dus: enkel met de code die aan Blad1 gekoppeld is heb ik een beetje gespeeld. Je vindt er ook wat 'algemene leerstof' in terug. Ik zag daar namelijk ergens een Gosub staan, maar dat werkt niet op die manier. Een blik op de code zal meteen duidelijk maken hoe het wel kan.
Ik heb het bestudeerd en inderdaad stonden daar enkele kemels en ezels tussen (een hele weide vol zelfs  :-[).
In de code "oplossing" zitten een paar kleine dingetjes om te vermijden dat een ongelukkige klik roet in het eten gooit. Vooreerst wordt gekeken of je wel binnen je kader staat, én in een niet-samengestelde cel, én in niet meer dan één.
Dat zou inderdaad roet in het eten kunnen gooien, dus die code ga ik zeker verwerken.
Daarna wordt de samen te stellen range bepaald, om het even welke cel geselecteerd is binnen die 9 cellen.
Dat werkt fijn, maar het is uiteindelijk (voorlopig althans) mijn bedoeling om, zodra de macro een single cel vindt, hij deze omzet naar een samengevoegde. Een aparte macro die aangesproken wordt vanuit de Zoek-macro werkt prima als je uit de Zoek-macro de linkerboven cel krijgt als een variabele. Dan is het maar één regel om te "mergen":
Range(Cells(c.Row, c.Column), Cells(c.Row + 2, c.Column + 2)).MergeDaarna een kleurtje en het lettertype.
Dat heb ik al toegepast op de macro van cow18.
Na het eten ga ik dit proberen toe te passen op ons Oplossing.be werkstukje  8) 8) Als ik een variabele vind...?  :'(

En na die handeling zit het "singels-werk" er op voor de macro's, en kan ik handmatig verder oplossen.
Per slot willen we die Sudoku wel ZELF oplossen, en daar gebruik ik dan toch graag de knoppen voor.
Die werken prima zoals jij de code "Sub oplossing() hebt aangepakt  \o/.

Zelf verwacht ik dat er nog veel zal "geloopt" moeten worden, om tot een voor mij "bevredigend" resultaat te komen.
En tja, je denkt steeds: dat kan eigenlijk ook nog geautomatiseerd worden....

Ik ga nu eten, maar straks ben ik er weer.

Groeten, en bedankt!

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 !

 


www.combell.com