Novità

Un aiuto per codice VBA excel

claudio8

Premium Member
Intoppo ..... :cool::cool:
Lanciando questa Sub anche più volte cliccando sul tasto cui è assegnata opero l'elaborazione dei dati ed ottengo i valori previsionali (profile ) sempre costanti chiaramene a parità di input in foglio UserInput e idenico blocco di estrazioni, la rete si compora in maniera stabile.

Codice:
Sub InputRead()
    Call Utilities.UnLockApplication                  ' Sprotegge i fogli
    Set UInput = ThisWorkbook.Worksheets("UserInput")    ' UInput  è il foglio UserInput
    Set DataSheet = ThisWorkbook.Worksheets("Data")
    Set FinalData = ThisWorkbook.Worksheets("Processed Data")    ' FinalData  è il foglio ProcessedData
    Set Calc = ThisWorkbook.Worksheets("Calc")
    Set OutputSheet = ThisWorkbook.Worksheets("Output")
    Set ProfileSheet = ThisWorkbook.Worksheets("Profile")
    Call InputCheck     ' check  dei dati nel foglio UserInput e richiamando l'istruzione NumberCheck
    Call DataRead        ' legge i dati  nel foglio Data e  li copia nel  "Processed Data" 'normalizzandoli
    Call FFBPdriver       'in Modulo Common,
    MsgBox (" Built Model completato ")
    Call Utilities.ExitApplication  '  ( che comprende  il famoso End)
End Sub

Ciclando invece questa nuova Sub modificata per ovviare al blocco dell' End non ottengo i valori previsionali (profile ) costanti, chiaramente a parità di input in foglio UserInput e idenico blocco di estrazioni, la rete in questo caso si compora in maniera instabile incrementando di poco i valori di Output - Predicted ( foglio Calc cella af110 ) .
Codice:
Sub MultiInputRead()

    Call Utilities.UnLockApplication
    Set UInput = ThisWorkbook.Worksheets("UserInput")    ' UInput  è il foglio UserInput
    Set DataSheet = ThisWorkbook.Worksheets("Data")
    Set FinalData = ThisWorkbook.Worksheets("Processed Data")    ' FinalData  è il foglio ProcessedData
    Set Calc = ThisWorkbook.Worksheets("Calc")
    Set OutputSheet = ThisWorkbook.Worksheets("Output")
    Set ProfileSheet = ThisWorkbook.Worksheets("Profile")
    Call InputCheck
    Call DataRead   
    Call FFBPdriver
      ' Call Utilities.ExitApplication ' remmato e sostituto con solo
    Call CleanUp 'pulisce le aree di lavoro liberare la memoria assegnata 'agli array dinamici e
    Call LockApplication                        'protegge tutti i fogli
End Sub

Considerando la tua pigrizia ti metto anche la sub ExitApplication.
Codice:
 Sub ExitApplication()  '
'Questa routine provvede a una uscita comune per l'intera applicazione. Prima di uscire libera
'la memoria assegnata agli array dinamici. Questo è molto importante. '«Se non liberiamo la memoria,
' dopo un paio di esecuzioni, la dimensione del file diventa enorme e  Excel si arresta in modo anomalo.
    Call CleanUp          'pulisce le aree di lavoro
    Call LockApplication  'protegge tutti i fogli
    End
End Sub

Come vedi le prime 2 sub differenziano solo per il modo di uscita dalle stesse.
La domanda da profano è:
perchè a parità (relativamene alle mie conoscenze) di "costutti" i risultati sono diversi?
Inoltre, ti chiedo se esiste una istruzione da inserire a monte di Call Utilities.ExitApplication per idenificare la posizione in cui questa Sub agisce?
Io ho optato per un MsgBox fai da te, tipo "MsgBox ("Blocco riga 168 ")
grazie
 
Ultima modifica:
L

LuigiB

Guest
il fatto è che non ho capito che vuoi fare. Perche dovresti lanciare qualla funzone dentro un ciclo ?
 
L

LuigiB

Guest
e durante questo ipotetico ciclo chi li sostituisce i dati da leggere ?
 
L

LuigiB

Guest
io da un esame veloce penso che le routine che eventualmente devono andare dentro al ciclo sono queste

1691488031093.png


attento che FFBPdriver contiene uan exit application che va remmata cosi facendo anche se il processo lo esegue 3 volte mi pare che dia fli stessi risultati di quando uno lo esegue uan volta sola.

per fermare il codice in un dato punto si usano i breakpoint premi F9 sullla riga di codice in cui vuoi bloccare l'esecuzione , poi per proseguire uan riga alal volta si fa con F8, ad ogni riga puoi esaminare i valori delle variabili o altre cose che ti interessano
 

claudio8

Premium Member
For ES = 1 To Cell 'Cell = range in pagina inserimeno dati
Call MultiInputRead ' ripete anche tutt i settaggi
Next ES

in FFBPdriver ho modificato così

'Call Utilities.ExitApplication 'sostituito con Call CleanUp e Call LockApplication che vedi sotto
Call CleanUp 'pulisce le aree di lavoro
Call LockApplication 'esegue la protezione fogli

Luigi, se il processo lo fai e lo ripeti attraverso il tasto Built model la rete è stabile, da gli stessi risultati anche a me.
Se lo fai fare con il ciclo for invece non è sabile, i risultati variano.
tu hai fatto questa ultima prova?
 
Ultima modifica:

claudio8

Premium Member
per fermare il codice in un dato punto si usano i breakpoint premi F9 sullla riga di codice in cui vuoi bloccare l'esecuzione , poi per proseguire uan riga alal volta si fa con F8, ad ogni riga puoi esaminare i valori delle variabili o altre cose che ti interessano
Io ti chiedevo se esiste una istruzione da inserire nel codice a monte di Call Utilities.ExitApplication per identificare la riga, e Modulo la in cui questa Sub agisce?

Io ho optato per un MsgBox fai da te, tipo "MsgBox ("Blocco riga 168 ")
grazie
 
L

LuigiB

Guest
ho fatto la prova che ti ho detto e mi sembra che i risultati siano uguali a quado lo fai una volta sola. Dentro userinput ho messo quel ciclo da 1 a 3 per fare uan prova
devi mettere un brreackpoint sulal funzione o fare un semplice trova sull'intero progetto per vedere dove viene richiamata
 

claudio8

Premium Member
Non sono stato chiaro, ma non importa.
il breackpoint lo uso già(F9) con anche F8 per seguire il funzionameno passo passo delle procedure
 

claudio8

Premium Member
ho fatto la prova che ti ho detto e mi sembra che i risultati siano uguali a quado lo fai una volta sola. Dentro userinput ho messo quel ciclo da 1 a 3 per fare uan prova
Relativamene alla prova che vorresi fare,
questi sono i valori del range AF109 foglio Calc con l'uso del ciclo for

Codice:
For ES = 1 To Cell   'Cell = range in pagina inserimeno dati con valore 10
Call MultiInputRead ' ripete anche tutt i settaggi
Call CopiaDati
Next ES
TEST 1.JPG

Devo trovare una alternativa per risolvere questo problema e penso di averla.
Ciao
 

claudio8

Premium Member
Una prima tabella di dati e previsione (predicted) è pronta, sicuramente grezza ed incompleta.

TEST 2 .JPG
Una,cento domande possono nascere, ma

...

solo con quano sopra hai modo di valutare.

saluti
 

claudio8

Premium Member
Ciao @LuigiB

Ho bisogno di una mano per poter usare nel tuo AnalisiNNpredLB_32 le estrazioni al completo quali input di ingresso (V1, V2,V3, V4) con o senza data e Output/targhet.
Vorrei in sostanza caricare in foglioData di NNpred le normali estrazioni così come presenti in questo screenshot.

Dalla lettura del Vba , si deduce che inserisce i numeri in foglioData di NNpre "filtrandoli" con il Gruppo scelto e quindi credo bisognerebbe sostituire questa procedura, o lasciarla in opzione per poter fare quanto di mio interesse.

Personalmente ho fatto diversi tentativi ma non sono riuscito a venirne a capo non avendo grossa dimestichezza del VBA excel.

Per la restante parte di selezione dei valori P1,P2 ecc ecc, ho visto che non ho difficoltà a fare altro genere di ricerca, senza doverti disturbare.


1694116031501.png
Ti chiedo quindi qualche indicazione per riprovare a creare quanto di mio interesse.
Se poi ti viene + semplice passarmi il pescato, io resto sull'argine in attesa :cool:
Grazie :cool:
 
L

LuigiB

Guest
il pescato .. ahahh che è una battuta ? te lo puoi scordare ... il problema è la poca dimestichezza che dici tu stesso .. acquisicila .. . si tratta di traslare nelle celle del foglio di nnpred i numeri delel estrazioni. banalmente per scrivere un valore da una cella ad un altra
sii fa foglio1.cells(1,1) = foglio2.cells(1,1)
oppure si usa la proprietà range alla quale passi le coordinate foglio1.range("a1") = foglio2.range("a2")
quindi il tuo problema è fare una semplice routine che prende le estrazioni da un foglio e le scrive in un altro .

nel progetto che è senza password apposta ci sono tutte le istruzioni che dovrai usare pure tu , è chiaro che quindi devi padroneggiarle
per poterle congegnare nel modo che ti serve , ma prendendo sputo un pezzetto di qua e uno di la si hanno tutte le soluzioni ai microproblemi che compongono il tuo problema principale , quindi studi e al lavoro che il lotto non scappa :)
 

claudio8

Premium Member
il pescato .. ahahh che è una battuta ? te lo puoi scordare
:ROFLMAO: :ROFLMAO::ROFLMAO:
... il problema è la poca dimestichezza che dici tu stesso .. acquisicila .. . si tratta di traslare nelle celle del foglio di nnpred i numeri delel estrazioni. banalmente per scrivere un valore da una cella ad un altra
sii fa foglio1.cells(1,1) = foglio2.cells(1,1)
oppure si usa la proprietà range alla quale passi le coordinate foglio1.range("a1") = foglio2.range("a2")
quindi il tuo problema è fare una semplice routine che prende le estrazioni da un foglio e le scrive in un altro .
no, queste che hai elencato sono elementari, il mio problema è dare istruzioni complete ad es: nQNumAssociatiGrp che se non inserisco nelle modifiche in maniera corretta, mi fa saltare il resto delle Sub che lo contengono ecc. ecc
Hai realizzato un costrutto abbastanza articolato e non è semplice metterci le mani per modifiche da inserire.
Sfido chiunque a farlo senza intoppi ( scripter e maestri scripter )
nel progetto che è senza password apposta ci sono tutte le istruzioni che dovrai usare pure tu , è chiaro che quindi devi padroneggiarle
per poterle congegnare nel modo che ti serve , ma prendendo sputo un pezzetto di qua e uno di la si hanno tutte le soluzioni ai microproblemi che compongono il tuo problema principale ,
tutto vero ma padroneggiare in excel non è semplice, mi viene + semplice far lavorare il foglio NNpred guidandolo da uno script.
quindi studi e al lavoro che il lotto non scappa :)
E' vero, ma il ferro bisogna batterlo quando è caldo ed adesso è caldo

1694120925752.png
il tutto senza analisi di convergenze... clicca il bottone e prendi i numeri ( per andare a cassa )
Ciao Luigi
 
L

LuigiB

Guest
e bwe questo perche il foglio è basato su quanto mi ha detto Halmun , quel nQNum .. serve per sapere quante sono le previsioni che dovrà fare che corrispondono al numero di input.
Nella versione base, la prima che abbiamo fatto ogni numero target aveva 4 numeri input , corrispondenti a 4 previsoni quel nQNum valeva 4 fisso , poi abbiamo fatto la modifica di arrivare fino a 50 input , quindi 50 possibili previsioni quella variabile vale 50 ...
 
L

LuigiB

Guest
tanto per cominciare nelal versione orginale i numeri dell'estrazione vengono messi uno sotto l'altro , una sola estrazione da luogo a 5 righe nel foglio npred. 18 estrazioni = 90 righe,

Tu che vuoi usare tutti i numeri della ruota che intendi ? che invece di metterli uno sotto l'altro li vuoi mettere in riga ? Quali sono i valori destinati agli input e i valori destinati ai target ?

riguardo alla cassa attento ad amare sorprese ...il lotto rimane un gioco che per vincere 100 euro ne devi investire 5000 e manco basta puo darsi..
 

claudio8

Premium Member
tanto per cominciare nelal versione orginale i numeri dell'estrazione vengono messi uno sotto l'altro , una sola estrazione da luogo a 5 righe nel foglio npred. 18 estrazioni = 90 righe,
si, lo ho letto perfettamente dal costrutto
Tu che vuoi usare tutti i numeri della ruota che intendi ? che invece di metterli uno sotto l'altro li vuoi mettere in riga ?
si, perfettamente, vedi screenshot del post 34. ( compresa la data in 1a in colonna) che serve a non perdere il senso del tempo.
Come vedi la 1a colonna delle date viene impostata in Omit (omessa e non viene considerata nella elaborazione), di seguito ci sono i primi 4 estratti ( v1, v2,v3,v4 impostate in Cont ) della estrazione riferita alla data in colonna 1 (Data) .
Nella sesta colonna vi è il 5° estratto che chiameremo "Targhet"& siglaRuota.
Il file NNpred originale prevede anche la possibilità di scambiare queste colonne definendo ogni colonna a proprio scelta. ( scelta a cascata)

Si può quindi nel file NNpred originale foglio Data, scegliere di definire qualsiasi colonna con qualsiasi delle 4 tipologie che si dispone.
e quindi predisporre manualmete uno schema a piacere del tipo:
Omit - cont-cont-cont-cont-Output ( cioe Data + quello che tu hai predisposto con Sub AlimentaFoglioData in Analisi )
oppure
Omit -Output -cont-cont-cont-cont
oppure
Output-cont-cont-cont-cont-Omit
Onde variare la posiz e quindi poter usare qualsiasi estratto quale "targhet"
il programma gestisce queste colonne a seconda della specifica definizione riportando comunque nel foglio Processed Data sempre solo una specifica Sequenza di colonne.
Train / ValidRandomObs. No.TarghetV1V2V3V4Predicted Targhet
Quali sono i valori destinati agli input e i valori destinati ai target ?
Il modo + semplice è definirli nel foglio NNpred a proprio piacimento, partendo dallo schema classico
Omit - Cont-Cont-Cont-Cont-Output ( cioe Data + quello che tu hai predisposto con Sub AlimentaFoglioData in Analisi )
riguardo alla cassa attento ad amare sorprese ...il lotto rimane un gioco che per vincere 100 euro ne devi investire 5000 e manco basta puo darsi..
Lo sappiamo caro Luigi,
scusami se ti ho risposto solo adesso ma ho avuto una giornata piena, " sudata e garantita" come si fa di solito,.... lavorando.

Un saluto
 
L

LuigiB

Guest
embhe qual'è il problema , se hai notato in funzione di quanti input si scelgono la sub che alimenta il foglio data va impostare le tipologie delle colonne dati , se devono essere target oppure input , tutto gestito dinamicamente da codice.

Allora tu che devi fare innanzi tutto devi andare a remmare questa parte di codice che riabiliterai in un secondo momento


1694241679007.png

e pure questa

1694241840531.png


dopo di che devi andare ad agire sulla sub

1694241890294.png


come vedi sei pure fortunato perche a questa funzione gli arriva già l'id dell'estrazione dalla quale prendere i numeri e anche un array che contiene le ruote che vuoi coinvolgere.
Gli arriva pure aGPR ma quell ono nti servirà.

embe in questa routine devi alimentare il foglio di nnpred , 'l'id estrazione lo sai , le estrazioni si leggono dall'array delel estrazioni aEstr che hai gia in memoria

aEstr(idEstr).aRuote(idRuota).aNum(idPos) .


remma pure queste 2 righe cosi il foglio nnpred non si chiuderà

scrivi Oexcel.visible = true al loro posto.


1694242270218.png


Cosi facendo esegui l'analisi per una sola estrazione , non sarà proditta nessuna previsione visto che hai remmato il codice in compenso potrai verificare se hai alimentato bene il foglio nnpred , cioè se la nuova funzione AlimentaFoglioData che dovrai scrivere funziona oppure no.


una volta stabilito che riesci a scrivere nel foglio sia le tue estrazioni che i nomi delle tipologie delle colonne si passa ariabilitare le parti remmate e a modificarle eventalmente.
 

Allegati

  • 1694242263614.png
    1694242263614.png
    2,7 KB · Visite: 7
Ultima modifica di un moderatore:

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 04 maggio 2024
    Bari
    02
    31
    81
    52
    21
    Cagliari
    39
    88
    84
    01
    67
    Firenze
    36
    30
    70
    06
    41
    Genova
    59
    23
    61
    22
    27
    Milano
    05
    17
    69
    57
    39
    Napoli
    81
    62
    82
    43
    50
    Palermo
    73
    55
    62
    45
    18
    Roma
    76
    70
    01
    64
    15
    Torino
    82
    55
    35
    70
    46
    Venezia
    58
    23
    61
    29
    21
    Nazionale
    10
    14
    01
    43
    09
    Estrazione Simbolotto
    Milano
    30
    01
    05
    32
    11

Ultimi Messaggi

Alto