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

scoreverwerking van competitie

Status
Niet open voor verdere reacties.

wil79

Gebruiker
Lid geworden
19 apr 2016
Berichten
40
Beste forumleden.

Als lid van een schietvereniging ben ik bezig om een excel sheet te maken waarin we een de scoreverwerking van een wedstrijd kunnen automatiseren.
De wedstrijd bestaat uit 2 ronden waarna de beste 16 via een stroomschema finalerondes tegen elkaar moeten schieten.

Nu heb ik het finale schema al opgebouwd, incl het verloop als de scores worden ingevuld.
Ook heb ik de sortering van de schutters op klasse en eindscore al op orde.

Alleen nu moet ik deze 2 gaan combineren.

Hier loop ik tegen 2 problemen aan:

Het eerste is dat ik (via de knop waarmee ik de eindscores naar klasse sorteer) een kopie van mn finale tabblad wil krijgen die de naam krijgt van de klasse waarin geschoten wordt.
Uiteindelijk wil ik dus net zoveel finale tabbladen krijgen als dat er klasse indelingen zijn gemaakt. Dit kan van wedstrijd tot wedstrijd varieren.
Ik heb in VBA al wel voor elkaar dat ie het finale tabblad kopieert, maar het krijgt nog niet de juiste naam mee en het aantal finale tabbladen is nog niet op orde

Het tweede is hoe ik de namen van de schutters vervolgens op de juiste plek (naar aanleiding van hun kwalificatie score) op de juiste plek in het juiste finale tabblad krijg.

Alvast heel erg dank voor alle hulp.
Alle hulp is dan ook welkom, ook als het maar een deeloplossing is, ben ik al ontzettend blij

Wil
 

Bijlagen

Bedoel je met de klasse indeling alleen de vier klassen of moet er ook onderscheid gemaakt worden tussen heren/dames en de verschillende leeftijdscategorien?
 
Hallo VenA

Bedoeling is dat er ook onderscheid wordt gemaakt tussen de heren/dames en leeftijdsklassen.
Bijv als de klasse is "compound" en "heren" en "senioren + veteranen", dan zou k eigenlijk willen zien dat er er een tabblad met finale indeling wordt gemaakt met de naam "Compound heren senioren + veteranen"
Alvast dank voor t meedenken aan een oplossing van dit probleem
 
Ik zou eerst eens beginnen met alle samengevoegde cellen te verwijderen. Je kan de rijhoogte ook aanpassen. Waarom staan er verbogen en lege tussenregels in in de tab 'Open ronde'? Jouw sortering werkt maar tot rij 55. Maak er eerst eens een aaneengesloten tabel van. De code is niet zo ingewikkeld maar deze opzet maakt het niet makkelijker.
 
Laatst bewerkt:
Hallo VenA.

Allereerst alvast bedankt voor al je hulp in dezen.

Ik heb in het nieuwe bestand alle samengevoegde cellen verwijderd.
Ook de "verborgen" cellen heb ik nu verwijderd. Deze had ik ooit bedoeld als een poging om t probleem zelf op te lossen.
(sorry, die had ik idd gewoon netjes moeten weghalen of open zetten).

Zelf ben ik ook nog steeds aan t puzzelen met VBA code, maar k blijf het lastige materie vinden.

Nogmaals dank voor je hulp
 

Bijlagen

Je hebt nog lang niet alle samengevoegde cellen verwijderd.

De naam van een tab kan uit maximaal 31 posities bestaan en dat gaat niet werken met de wens die jij voor de naamgeving hebt. Met een extra lusje de handel maar een beetje ingekort.

Code:
Sub CopySheetAndRename()
  Application.ScreenUpdating = False
  ar = Sheets("Open ronde").Cells(7, 2).CurrentRegion
  Set d = CreateObject("Scripting.Dictionary")
    For j = 2 To UBound(ar)
    c00 = ""
      x = Split(ar(j, 5), " + ")
      For jj = 0 To UBound(x)
        c00 = c00 & "_" & Left(x(jj), 3)
      Next jj
      d(ar(j, 3) & "_" & ar(j, 4) & c00) = ""
    Next j
    For Each it In d
      If IsError(Evaluate("'" & it & "'!A1")) Then
        Sheets("Finale").Copy , Sheets(Sheets.Count)
        ActiveSheet.Name = it
      End If
    Next it
End Sub

Probeer het gebruik van select en activate te vermijden.
Voor het leegmaken van het blad 'Open ronde' is dit voldoende.
Code:
Sub Werkblad_leegmaken()
  With Sheets("Open ronde").Range("C8:H55")
    .ClearContents
    .Offset(, 7).Resize(, 1).Value = "Ja"
  End With
End Sub

In de tab 'Finale' staan nog steeds veel samengevoegde cellen maar dan nog is dit voldoende.
Code:
Sub Werkblad_finale_leegmaken()
  Sheets("Finale").Range("D4,D6,D8,D10,D12,D14,D16,D18,D21,D23,D25,D27,D29,D31,D33,D35,F4,F8,F12,F16,F21,F25,F29,F33,J13,J24,J13,J24").Select
  Selection.ClearContents
End Sub
 
Beste VenA,

Allereerst heel erg dank voor de aangedragen oplossing.
Ik probeer de code te doorgronden hoe je die tabbladen aanmaakt, maar t is voor mij echt nog hogere VBA-kunde.....

Wat betreft de samengevoegde cellen heb je gelijk voor de finale tabblad ronde. Ik had alleen de open ronde alles (volgens mij) weggehaald.

Heb ik nog 2 vragen:
Je hebt het over het vermijden van select en activate. Waarom is dat een probleem eigenlijk ??
En de samengevoegde cellen, wat is daar het probleem mee ??

Ik hoor t graag van je.

k zal nu zelf proberen om de schutters op hun goede plek in t stroomschema te krijgen.

Nogmaals heel erg veel dank
 
Hogere VBA-kunde kan je doorgronden door in de VB-editor het scherm Locals aan te zetten en dan met <F8> door de code te wandelen.

Select en activate zijn vertragende zaken die eerst een cel of blad gaan activeren terwijl je deze direct kan gebruiken. Het geeft een knipperend effect wat vaak verbloemd wordt door gebruik te maken van Application.ScreenUpdating op False te zetten.

Samengevoegde cellen hebben in VBA het nadeel dat ze niet direct te adresseren zijn waardoor je onnodig lange code nodig hebt. (En nog wel een paar meer nadelen)

Code:
Sub Werkblad_finale_leegmaken()
  Sheets("Finale").Range("D4,D6,D8,D10,D12,D14,D16,D18,D21,D23,D25,D27,D29,D31,D33,D35,F4,F8,F12,F16,F21,F25,F29,F33,J13,J24,J13,J24").ClearContents
End Sub

Zal een foutmelding opleveren.
 
Persoonlijk zou ik in tabblad 'Finale' de formules iets anders inrichten.
Op deze manier staan er geen formules in de oranje cellen.
En is dus wat eenvoudiger te kopiëren en te legen.
 

Bijlagen

Beste Popipipo en VenA,

Heel erg bedankt voor jullie hulp zo ver.
VenA heeft me erg geholpen met de code om t finaleblad te kopieren met een naam in de tab voor wat betreft de categorie.
Popipipo , jouw code om de schutters op de juiste plek in t diagram te krijgen helpt zeker.
Alleen moet ik nu jullie beider oplossingen gaan combineren (een tabblad per klasse en de juiste groep schutters op de juiste plek in t diagram).
Ik denk dat ik er met jullie beider hulp uit ga komen.

Dank voor alles

Wil
 
De namen in tabblad finale (kolom C) heb ik gekoppeld aan de nummers in kolom B en deze weer aan de nummers in tabblad Open ronde (kolom A).
Door deze nummers of de nummers in kolom B te veranderen krijg je de juiste groep schutters in het diagram.
 
Als je maar maximaal 48 deelnemers hebt en zoveel verschillende finales dan denk ik dat je eerst moet bedenken hoe je het geheel gaat inrichten. Stel drie dames in de categorie Veteranen + Senioren + Junioren en schieten met een Longbow. Hoe wil je dat in jouw schema verwerken?
 
Beste VenA,

Goede opmerking over het inrichten van het schema.
Het schema is een officieel door de nationale bond uitgegeven schema wat we moeten volgen.
Wijzelf kunnen maar maximaal 48 deelnemers kwijt, maar er zijn ook verenigingen die 64 of zelfs meer deelnemers kwijt kunnen.
En ja, er kunnen in een categorie misschien maar 3 deelnemers zijn, maar ook die horen dan via het schema de finales in te gaan.
Alleen kom je dan door alle legen plekken (bye's; die scoren standaard 0 punten) als snel in de halve finales terecht; maar nog steeds moet het complete schema gevuld worden.
Ik snap dus je opmerking wel, maar we worden van hogerhand gedwongen het gehele schema te gebruiken...... ;-(

Beste popipipo,

Dat is inderdaad een deel-oplossing van het probleem.
Zoals je misschien al terug hebt gelezen heeft VenA een VBA code gegenereerd wat er voor zorgt dat ook iedere categorie zn eigen finale-sheet (kopie van de originele finale sheet) krijgt, met de naam van de categorie als tabblad naam.
Zoals aangegeven ben ik dus op zoek naar de oplossing van jullie beiden, maar met deze aanvulling zou het zeker moeten lukken. Te meer omdat je in de tabblad naam een restrictie hebt op het maximaal aantal te gebruiken karakters en met jouw oplossing je dat gewoon in de cel kunt plaatsen. Beide opties zou dus het ideaal zijn......

Dank beiden voor de inbreng

Wil
 
Beste Popipipo,

Ik heb inmiddels een aanpassing gemaakt op jouw sheet, want nu kijkt ie nl niet alleen naar de leeftijdsklasse, maar ook naar geslacht en type boog.
Weer een stapje gemaakt in de goede richting....
 

Bijlagen

Hier nog een stapje
In tabblad 'finale' kies je in rij 2 welke competitie je wilt hebben.

Je kunt dit tabblad kopiëren naar een nieuw tabblad en daarin een andere selectie doen.
 

Bijlagen

En dat is dan ook wel weer te automatiseren.

Code:
Sub CopySheetAndRename()
  Application.ScreenUpdating = False
  ar = Sheets("Open ronde").Cells(7, 2).CurrentRegion
  Set d = CreateObject("Scripting.Dictionary")
    For j = 8 To UBound(ar)
      If ar(j, 2) <> "" Then
        c00 = ""
        x = Split(ar(j, 5), " + ")
        For jj = 0 To UBound(x)
          c00 = c00 & "_" & Left(x(jj), 3)
        Next jj
        d(ar(j, 3) & "_" & ar(j, 4) & c00) = ar(j, 4) & "||" & ar(j, 3) & "||" & ar(j, 5)
      End If
    Next j
    For Each it In d
      If IsError(Evaluate("'" & it & "'!A1")) Then
        Sheets("Finale").Copy , Sheets(Sheets.Count)
        With ActiveSheet
          .Name = it
          .Cells(2, 5).Resize(, 5) = Split(d.Item(it), "|")
        End With
      End If
    Next it
End Sub
 
Popipipo en VenA,

Wat een geweldige hulp hebben jullie geboden. Ik kan niet zeggen hoe super blij ik met jullie ben.
Het is uiteindelijk geworden zoals ik helemaal voor ogen had.

Maar nu kreeg ik nog een laatste verzoek van mn trainer:
Niet alle schutters willen deelnemen aan de finale, vandaar dat ik ooit al kolom J had bedacht.
Als een schutter bijv plek 5 inneemt op de lijst, maar aangeeft geen finales te willen schieten, dan is de bedoeling dat het hele rijtje onder hem als t ware opschuift, dus 6 wordt dan 5, 7 wordt dan 6 enz.
Is er nog een makkelijke oplossing om evt deze schutters er tussen uit te halen, of wordt het dan gewoon handmatig er uit halen......??

Nogmaals, ik ben nu al helemaal blij.

Wil
 
Miischien deze formule eens grondig analyseren en er een extra voorwaarde aan toevoegen?
Code:
=IFERROR(INDEX('Open ronde'!$C$8:$C$55;MATCH($A$2&B6;'Open ronde'!$K$8:$K$55;0));"bye")
(Staat in Blad Finale in C6)
 
Of je laat de schutter de laatste wedstrijd gewoon verliezen dmv hem negatieve punten te geven.
Aan het getal zie je dan wel of hij de wedstrijd evt gewonnen heeft en aan het min teken zie je dat hij geen finale wilt spelen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan