L
LuigiB
Guest
nessun danno serve per consentire la visuaizzazione della tabella ordinabile che è un controllo ActiveX come ti ho detto il post sopra.
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
di nulla , ciaoTi ringrazio tanto Luigi, sei stato gentilissimo.
E' un capolavoro.
Function AlimentaArrayLunghette(aLunghette)
' per comodita le lunghette sono preimpostate ma nulla vieta di leggerle da un file o da inputbox
ReDim aLunghette(5)
' aLunghette(1) = Split("0,66,67,69,78,72,89",",") ' 6
' aLunghette(2) = Split("0,55,57,59,75,77,86",",") ' 6
' aLunghette(3) = Split("0,65,68,79,88",",") '4
' aLunghette(4) = Split("0,50,58,54,70,87",",") '5
' aLunghette(5) = Split("0,56,52,76,85",",") '4
Dim k , kk ,n, sLunghetta
For k = 1 To 5
sLunghetta = "0,"
For kk = 1 To 18
n = n +1
sLunghetta = sLunghetta & n & ","
Next
sLunghetta = RimuoviLastChr( sLunghetta , ",")
aLunghette(k) = Split ( sLunghetta ,",")
Next
' la funzione torna il numero di lunghette ( l'elemento a indice 0 non è usato)
AlimentaArrayLunghette = UBound(aLunghette)
End Function
Option Explicit
Sub Main
Dim aLunghette,nQuantitaLung,nClasseFormazione , nMaxClasse
Dim aRuote,nSorte
Dim Inizio,Fine
Inizio = EstrazioneIni
Fine = EstrazioneFin
nQuantitaLung = AlimentaArrayLunghette(aLunghette)
If nQuantitaLung >= 2 Then
If VerificaDoppi(aLunghette) Then
nMaxClasse = Iif (nQuantitaLung <=10 ,nQuantitaLung ,10 )
nClasseFormazione = Int(InputBox("Quanti numeri per ogni formazione in gioco da 2 a " & nMaxClasse ))
Call ScegliRuote(aRuote)
nSorte = ScegliEsito(2,2,nClasseFormazione)
If nClasseFormazione >= 2 And nClasseFormazione <= nMaxClasse Then
Call ProduciFormazioni(aLunghette,nClasseFormazione,aRuote,nSorte,Inizio,Fine)
Else
MsgBox "Quantità errata",vbExclamation
End If
End If
Else
MsgBox "Lunghette insufficient",vbExclamation
End If
End Sub
Function VerificaDoppi(aLunghette)
Dim k,j,n,sNumeriNonValidi,sNumeriDoppi
ReDim aB(90)
sNumeriNonValidi = ""
sNumeriDoppi = ""
For k = 1 To UBound(aLunghette)
For j = 1 To UBound(aLunghette(k))
n = Int(aLunghette(k)(j))
If n > 0 And n <= 90 Then
If aB(n) Then
sNumeriDoppi = sNumeriDoppi & " Lunghetta " & k & " numero " & n & ","
Else
aB(n) = True
End If
Else
sNumeriNonValidi = sNumeriNonValidi & " Lunghetta " & k & " numero " & n & ","
End If
Next
Next
If sNumeriNonValidi <> "" Or sNumeriDoppi <> "" Then
If sNumeriNonValidi <> "" Then
MsgBox "Numeri non validi " & vbCrLf & sNumeriNonValidi,vbExclamation
End If
If sNumeriDoppi <> "" Then
MsgBox "Numeri ripetuti " & vbCrLf & sNumeriDoppi,vbExclamation
End If
VerificaDoppi = False
Else
VerificaDoppi = True
End If
End Function
Function AlimentaArrayLunghette(aLunghette)
' per comodita le lunghette sono preimpostate ma nulla vieta di leggerle da un file o da inputbox
'ReDim aLunghette(5)
' aLunghette(1) = Split("0,66,67,69,78,72,89",",") ' 6
' aLunghette(2) = Split("0,55,57,59,75,77,86",",") ' 6
' aLunghette(3) = Split("0,65,68,79,88",",") '4
' aLunghette(4) = Split("0,50,58,54,70,87",",") '5
' aLunghette(5) = Split("0,56,52,76,85",",") '4
Dim k , kk ,n, sLunghetta
ReDim aLunghette(5)
For k = 1 To 5
sLunghetta = "0,"
For kk = 1 To 18
n = n +1
sLunghetta = sLunghetta & n & ","
Next
sLunghetta = RimuoviLastChr( sLunghetta , ",")
aLunghette(k) = Split ( sLunghetta ,",")
Next
' la funzione torna il numero di lunghette ( l'elemento a indice 0 non è usato)
AlimentaArrayLunghette = UBound(aLunghette)
End Function
Sub ProduciFormazioni(aLunghette,nClasseFormazione,aRuote,nSorte,Inizio,fine)
Dim I
Dim k,aRetColonna,sLungUsate
Dim aT
Dim nCombTraLunghette
aT = Array("","Formazione","Ritardo","Frequenza","RitardoMax")
Call InitTabella(aT)
ReDim aN(UBound(aLunghette))
For k = 1 To UBound(aN)
aN(k) = k
Next
nCombTraLunghette = Combinazioni ( UBound(aN) , nClasseFormazione )
If MsgBox ("Le combinazioni tra lunghette sono " & nCombTraLunghette & " continuo ?" , vbQuestion + vbYesNo) = vbYes Then
ReDim aSegni(nClasseFormazione)
Call InitSviluppoIntegrale(aN,nClasseFormazione)
Do While GetCombSviluppo(aRetColonna)
sLungUsate = ""
For k = 1 To nClasseFormazione
aSegni(k) = aLunghette(aRetColonna(k))
sLungUsate = sLungUsate & aRetColonna(k) & "-"
Next
Call Messaggio("Sviluppo colonne tra le lunghette " & RimuoviLastChr(sLungUsate,"-"))
Call SviluppaColonne(aSegni,I,aRuote,nSorte,Inizio,fine)
If ScriptInterrotto Then Exit Do
DoEventsEx
Loop
Call Scrivi(String(50,"="))
Call Scrivi("Colonne sviluppate : " & I)
Call Scrivi("Classe : " & nClasseFormazione)
Call Scrivi("Sorte : " & nSorte)
Call Scrivi("Ruote : " & StringaRuote(aRuote))
Call Scrivi(String(50,"="))
Call Scrivi
Call CreaTabellaOrdinabile(2)
End If
End Sub
Function CalcolaColonneDaSviluppare (aPresPerQ)
Dim t , k
t = 1
For k = 1 To UBound(aPresPerQ)
If aPresPerQ (k) > 0 Then
t = t * (k ^ aPresPerQ (k))
End If
Next
CalcolaColonneDaSviluppare = t
End Function
Sub SviluppaColonne(aSegni,I,aRuote,nSorte,Inizio,Fine)
Dim nClasse,K,aTmp,nPnt
Dim nRitardo,nRitardoMax,nFrequenza, nDaSviluppare , nSviluppate
ReDim aT(4)
nClasse = UBound(aSegni)
ReDim aColonna(nClasse)
ReDim aPuntatore(nClasse)
ReDim aQSegni(nClasse)
ReDim aPresPerQuantita (90)
For K = 1 To nClasse
aTmp = aSegni(K)
aPuntatore(K) = 1
aQSegni(K) = UBound(aTmp)
aPresPerQuantita (aQSegni(K)) =aPresPerQuantita (aQSegni(K)) +1
Next
nDaSviluppare = CalcolaColonneDaSviluppare(aPresPerQuantita )
nPnt = nClasse
Do
For K = 1 To nClasse
aTmp = aSegni(K)
aColonna(K) = aTmp(aPuntatore(K))
Next
I = I + 1
nSviluppate = nSviluppate + 1
Call AvanzamentoElab (1 ,nDaSviluppare , nSviluppate)
' Call Scrivi(FormatSpace(I,4,True) & ") " & StringaNumeri(aColonna))
Call StatFrzTurbo(aColonna,aRuote,nSorte,nRitardo,nRitardoMax,0,nFrequenza,,Inizio,Fine)
aT(1) = StringaNumeri(aColonna)
aT(2) = nRitardo
aT(4) = nRitardoMax
aT(3) = nFrequenza
Call AddRigaTabella(aT)
Do While aPuntatore(nPnt) + 1 > aQSegni(nPnt)
nPnt = nPnt - 1
If nPnt = 0 Then Exit Do
Loop
If nPnt > 0 Then
aPuntatore(nPnt) = aPuntatore(nPnt) + 1
For K = nPnt + 1 To nClasse
aPuntatore(K) = 1
Next
nPnt = nClasse
End If
If ScriptInterrotto Then Exit Do
DoEventsEx
Loop While nPnt > 0
End Sub
Option Explicit
Sub Main
Dim aLunghette,nQuantitaLung,nClasseFormazione
Dim aRuote,nSorte
Dim Inizio,Fine
Inizio = EstrazioneIni
Fine = EstrazioneFin
nQuantitaLung = AlimentaArrayLunghette(aLunghette)
If nQuantitaLung >= 2 Then'<<<<<<<<<<2
If VerificaDoppi(aLunghette) Then
nClasseFormazione = Int(InputBox("Quanti numeri per ogni formazione in gioco da 2 a " & nQuantitaLung))
Call ScegliRuote(aRuote)
nSorte = ScegliEsito(2,2,nClasseFormazione)
If nClasseFormazione >= 2 And nClasseFormazione <= nQuantitaLung Then
Call ProduciFormazioni(aLunghette,nClasseFormazione,aRuote,nSorte,Inizio,Fine)
Else
MsgBox "Quantità errata",vbExclamation
End If
End If
Else
MsgBox "Lunghette insufficient",vbExclamation
End If
End Sub
Function VerificaDoppi(aLunghette)
Dim k,j,n,sNumeriNonValidi,sNumeriDoppi
ReDim aB(90)
sNumeriNonValidi = ""
sNumeriDoppi = ""
For k = 1 To UBound(aLunghette)
For j = 1 To UBound(aLunghette(k))
n = Int(aLunghette(k)(j))
If n > 0 And n <= 90 Then
If aB(n) Then
sNumeriDoppi = sNumeriDoppi & " Lunghetta " & k & " numero " & n & ","
Else
aB(n) = True
End If
Else
sNumeriNonValidi = sNumeriNonValidi & " Lunghetta " & k & " numero " & n & ","
End If
Next
Next
If sNumeriNonValidi <> "" Or sNumeriDoppi <> "" Then
If sNumeriNonValidi <> "" Then
MsgBox "Numeri non validi " & vbCrLf & sNumeriNonValidi,vbExclamation
End If
If sNumeriDoppi <> "" Then
MsgBox "Numeri ripetuti " & vbCrLf & sNumeriDoppi,vbExclamation
End If
VerificaDoppi = False
Else
VerificaDoppi = True
End If
End Function
Function AlimentaArrayLunghette(aLunghette)
' per comodita le lunghette sono preimpostate ma nulla vieta di leggerle da un file o da inputbox
ReDim aLunghette(24)
aLunghette(1) = Split("0,90,89,88,87,86,85",",")
aLunghette(2) = Split("0,84,83,82,81,80,79",",")
aLunghette(3) = Split("0,78,77,76,75,74,73",",")
aLunghette(4) = Split("0,72,71,70,69",",")
aLunghette(5) = Split("0,68,67,66,65",",")
aLunghette(6) = Split("0,64,63,62",",")
aLunghette(7) = Split("0,61,60,59",",")
aLunghette(8) = Split("0,58,57,56",",")
aLunghette(9) = Split("0,55,54,53",",")
aLunghette(10) = Split("0,52",",")
aLunghette(11) = Split("0,51",",")
aLunghette(12) = Split("0,50",",")
aLunghette(13) = Split("0,49",",")
aLunghette(14) = Split("0,48,47,46",",")
aLunghette(15) = Split("0,45,44,43",",")
aLunghette(16) = Split("0,42,41,40",",")
aLunghette(17) = Split("0,39,38,37",",")
aLunghette(18) = Split("0,36,35,34",",")
aLunghette(19) = Split("0,33,32,31",",")
aLunghette(20) = Split("0,30,29,28,27,26,25",",")
aLunghette(21) = Split("0,24,23,22,21",",")
aLunghette(22) = Split("0,20,19,18,17,16,15",",")
aLunghette(23) = Split("0,14,13,12,11,10,09",",")
aLunghette(24) = Split("0,08,07,06,05,04,03,02,01",",")
'-----------------
Dim k,kk,n,sLunghetta
For k = 1 To 5
sLunghetta = "0,"
For kk = 1 To 18
n = n + 1
sLunghetta = sLunghetta & n & ","
Next
sLunghetta = RimuoviLastChr(sLunghetta,",")
aLunghette(k) = Split(sLunghetta,",")
Next
'-----------------------
' la funzione torna il numero di lunghette ( l'elemento a indice 0 non è usato)
AlimentaArrayLunghette = UBound(aLunghette)
End Function
Sub ProduciFormazioni(aLunghette,nClasseFormazione,aRuote,nSorte,Inizio,fine)
Dim I
Dim k,aRetColonna,sLungUsate
Dim aT
aT = Array("","Formazione","Ritardo","Frequenza","RitardoMax")
Call InitTabella(aT)
ReDim aN(UBound(aLunghette))
For k = 1 To UBound(aN)
aN(k) = k
Next
ReDim aSegni(nClasseFormazione)
Call InitSviluppoIntegrale(aN,nClasseFormazione)
Do While GetCombSviluppo(aRetColonna)
sLungUsate = ""
For k = 1 To nClasseFormazione
aSegni(k) = aLunghette(aRetColonna(k))
sLungUsate = sLungUsate & aRetColonna(k) & "-"
Next
Call Messaggio("Sviluppo colonne tra le lunghette " & RimuoviLastChr(sLungUsate,"-"))
Call SviluppaColonne(aSegni,I,aRuote,nSorte,Inizio,fine)
If ScriptInterrotto Then Exit Do
DoEventsEx
Loop
Call Scrivi(String(50,"="))
Call Scrivi("Colonne sviluppate : " & I)
Call Scrivi("Classe : " & nClasseFormazione)
Call Scrivi("Sorte : " & nSorte)
Call Scrivi("Ruote : " & StringaRuote(aRuote))
Call Scrivi(String(50,"="))
Call Scrivi
'Call CreaTabella(2)
Call CreaTabellaOrdinabile
End Sub
Sub SviluppaColonne(aSegni,I,aRuote,nSorte,Inizio,Fine)
Dim nClasse,K,aTmp,nPnt
Dim nRitardo,nRitardoMax,nFrequenza
ReDim aT(4)
nClasse = UBound(aSegni)
ReDim aColonna(nClasse)
ReDim aPuntatore(nClasse)
ReDim aQSegni(nClasse)
For K = 1 To nClasse
aTmp = aSegni(K)
aPuntatore(K) = 1
aQSegni(K) = UBound(aTmp)
Next
nPnt = nClasse
Do
For K = 1 To nClasse
aTmp = aSegni(K)
aColonna(K) = aTmp(aPuntatore(K))
Next
I = I + 1
' Call Scrivi(FormatSpace(I,4,True) & ") " & StringaNumeri(aColonna))
Call StatFrzTurbo(aColonna,aRuote,nSorte,nRitardo,nRitardoMax,0,nFrequenza,,Inizio,Fine)
aT(1) = StringaNumeri(aColonna)
aT(2) = nRitardo
aT(3) = nFrequenza
aT(4) = nRitardoMax
Call AddRigaTabella(aT)
Do While aPuntatore(nPnt) + 1 > aQSegni(nPnt)
nPnt = nPnt - 1
If nPnt = 0 Then Exit Do
Loop
If nPnt > 0 Then
aPuntatore(nPnt) = aPuntatore(nPnt) + 1
For K = nPnt + 1 To nClasse
aPuntatore(K) = 1
Next
nPnt = nClasse
End If
If ScriptInterrotto Then Exit Do
DoEventsEx
Loop While nPnt > 0
End Sub