Novità

EXCEL E DINTORNI

Gentile e disponibile come pochi, vedi se è possibile nel ragionevole e grazie...
sei forte 💪 (y)
Come sospettavo i tempi di ricerca sono impossibili da gestire col VBA.
Ho chiesto alla AI: la macro sta lavorando e immagino che saranno necessari tempi biblici. Visto che col VBA non si riesce ad avere in tempi ragionevoli un qualche risultato. Che linguaggio si potrebbe utilizzare?
Questa la sua risposta:

Per questo tipo di analisi, che richiede calcoli intensivi, i linguaggi più adatti sarebbero:


  1. Python

  • Vantaggi:
    • Librerie specializzate come NumPy e Pandas per gestione dati
    • Multiprocessing per sfruttare tutti i core del CPU
    • Ottimo per manipolazione di dati e calcoli matriciali
    • Può leggere direttamente file Excel
  • Esempio di approccio:
    • Usare Pandas per leggere il file Excel
    • NumPy per i calcoli vettoriali
    • Multiprocessing per parallelizzare l'analisi dei terni

  1. C++

  • Vantaggi:
    • Prestazioni molto elevate
    • Ottima gestione della memoria
    • Possibilità di multithreading
  • Svantaggio: richiede più tempo per lo sviluppo

  1. Rust

  • Vantaggi:
    • Prestazioni paragonabili a C++
    • Sicurezza della memoria garantita dal compilatore
    • Eccellente supporto per la concorrenza
  • Svantaggio: curva di apprendimento ripida

Tra questi, Python sarebbe probabilmente la scelta migliore per il tuo caso perché:


  1. Facile da imparare e usare
  2. Ottimo per prototipazione veloce
  3. Ampia disponibilità di librerie per l'analisi dei dati
  4. Buon compromesso tra velocità di sviluppo e prestazioni

Vuoi che ti mostri un esempio di come strutturare il codice in Python?

Al mio SI ha risposto con questo listato:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import pandas as pd
import numpy as np
from datetime import datetime
from itertools import combinations
from multiprocessing import Pool, cpu_count
import time

def load_data(file_path, ruota):
"""Carica i dati della ruota specificata dal file Excel."""
# Mappa delle colonne per ogni ruota
ruote_cols = {
'Bari': ['D', 'E', 'F', 'G', 'H'],
'Cagliari': ['I', 'J', 'K', 'L', 'M'],
'Firenze': ['N', 'O', 'P', 'Q', 'R'],
'Genova': ['S', 'T', 'U', 'V', 'W'],
'Milano': ['X', 'Y', 'Z', 'AA', 'AB'],
'Napoli': ['AC', 'AD', 'AE', 'AF', 'AG'],
'Palermo': ['AH', 'AI', 'AJ', 'AK', 'AL'],
'Roma': ['AM', 'AN', 'AO', 'AP', 'AQ'],
'Torino': ['AR', 'AS', 'AT', 'AU', 'AV'],
'Venezia': ['AW', 'AX', 'AY', 'AZ', 'BA']
}

# Leggi solo le colonne necessarie
cols_to_read = ['C'] + ruote_cols[ruota]
df = pd.read_excel(file_path, usecols=cols_to_read, skiprows=7)

# Rinomina le colonne
df.columns = ['Data'] + [f'N{i+1}' for i in range(5)]
return df

def analizza_terno(args):
"""Analizza un singolo terno."""
terno, numeri_estrazione = args
ultima_estrazione = None

# Converti il terno in set per confronto più veloce
terno_set = set(terno)

# Cerca l'ultima estrazione del terno
for idx, numeri in enumerate(numeri_estrazione):
if len(terno_set.intersection(set(numeri))) == 3:
ultima_estrazione = idx
break

return {
'terno': terno,
'ultima_estrazione': ultima_estrazione,
'ritardo': len(numeri_estrazione) if ultima_estrazione is None else ultima_estrazione
}

def analizza_ruota(file_path, ruota, min_ritardo=6000):
"""Analizza tutti i terni per una ruota specifica."""
print(f"Caricamento dati per la ruota {ruota}...")
df = load_data(file_path, ruota)

# Prepara i dati per l'analisi
numeri_estrazione = df.iloc[:, 1:].values.tolist()
numeri_estrazione.reverse() # Inverti per avere le estrazioni più recenti prima

# Genera tutti i possibili terni
print("Generazione terni...")
terni = list(combinations(range(1, 91), 3))

# Prepara gli argomenti per il multiprocessing
args = [(terno, numeri_estrazione) for terno in terni]

# Usa multiprocessing per l'analisi
print(f"Inizio analisi con {cpu_count()} processori...")
start_time = time.time()

with Pool() as pool:
results = pool.map(analizza_terno, args)

# Filtra i risultati per ritardo minimo
risultati_filtrati = [r for r in results if r['ritardo'] >= min_ritardo]

# Ordina per ritardo decrescente
risultati_filtrati.sort(key=lambda x: x['ritardo'], reverse=True)

# Converti i risultati in DataFrame
df_risultati = pd.DataFrame(risultati_filtrati)

# Aggiungi la data dell'ultima estrazione
df_risultati['ultima_data'] = df_risultati['ultima_estrazione'].apply(
lambda x: df.iloc[-(x+1)]['Data'] if x is not None else 'Mai uscito'
)

# Converti i terni in stringhe
df_risultati['terno'] = df_risultati['terno'].apply(lambda x: '-'.join(map(str, x)))

print(f"\nAnalisi completata in {time.time() - start_time:.2f} secondi")
return df_risultati

def salva_risultati(df_risultati, ruota, output_file):
"""Salva i risultati in un nuovo file Excel."""
with pd.ExcelWriter(output_file) as writer:
df_risultati.to_excel(writer, sheet_name='TerniRitardo', index=False)

# Applica formattazione
workbook = writer.book
worksheet = writer.sheets['TerniRitardo']

# Formatta le intestazioni
header_format = workbook.add_format({'bold': True})
for col_num, value in enumerate(df_risultati.columns.values):
worksheet.write(0, col_num, value, header_format)

# Aggiusta larghezza colonne
worksheet.set_column('A:D', 15)

def main():
# Configurazione
file_path = 'archivio.xlsx' # Aggiusta il percorso del tuo file
output_file = 'risultati_terni.xlsx'

# Lista delle ruote disponibili
ruote = ['Bari', 'Cagliari', 'Firenze', 'Genova', 'Milano',
'Napoli', 'Palermo', 'Roma', 'Torino', 'Venezia']

# Menu di selezione ruota
print("Seleziona la ruota da analizzare:")
for i, ruota in enumerate(ruote, 1):
print(f"{i}. {ruota}")

scelta = int(input("\nInserisci il numero della ruota: ")) - 1
if scelta < 0 or scelta >= len(ruote):
print("Selezione non valida")
return

ruota_scelta = ruote[scelta]

# Esegui l'analisi
df_risultati = analizza_ruota(file_path, ruota_scelta)

# Salva i risultati
salva_risultati(df_risultati, ruota_scelta, output_file)
print(f"\nRisultati salvati in {output_file}")
print(f"Trovati {len(df_risultati)} terni con ritardo >= 6000")

if __name__ == '__main__':
main()

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Ecco una versione in Python che sfrutta il multiprocessing per velocizzare l'analisi:
In questo caso si riferisce solo ad una ruota, prendendo in considerazione solo i terni aventi ritardo di almeno 6000 estrazioni.
La scelta l'avevo fatta per cercare di velocizzare VBA.

Quello che importa è che per chi conosce il linguaggio Python probabilmente è fattibile creare qualcosa per soddisfare la tua richiesta.
Ho provato a guardare qualcosa di python ma mi perdo dopo due righe...
Se non sbaglio sul forum c'è qualcuno che lo conosce, forse potrebbe dare una mano...
------------------------------------------------------------------------------------------------------------------------------------------------------
Restando al VBA avevo pensato che se si disponesse di tabelle con i ritardi dei terni già calcolati si potrebbe fare qualcosa, ma dove trovare queste tabelle? Basterebbe che riportassero anche solo gli ultimi 500/1000 ritardi.

Se qualcuno ha qualche idea parli ora e continui a farlo fintantoché non abbiamo risolto il problema.
 
Grazie Baciccia, immaginavo fosse più semplice, neppure io di linguaggi non capisco una cippa, grazie per il tentativo e la Tua grande disponibilità.. 💪 ;) (y)
 
Carissimo Pandit
non rompi affatto. Sei sempre il benvenuto. Ci proverò però il VBA forse non è il più indicato per ricerche di questo tipo. Il numero di terni da controllare, su tutte le ruote, è grande e i tempi rischiano di essere biblici. Comunque vedremo.
Un saluto fraterno
Baciccia

Prova a porre la domanda in altri termini.
Quante volte ed in quali estrazione si è verificata la presenza di 1 terno uguale su 3 ruote.
 
Prova a porre la domanda in altri termini.
Quante volte ed in quali estrazione si è verificata la presenza di 1 terno uguale su 3 ruote.
Ciao Claudio8
Proverò a fare come suggerisci, d'altra parte la AI risponde in maniera corretta solo quando le poni le corrette domande corredate se possibile da quante più informazioni puoi.
Spesso, avendo le idee poco chiare, le pongo le domande nel modo non corretto o facilmente comprensibile.
Di conseguenza le risposte sono non funzionanti oppure, come per i terni, con tempi lunghissimi.
Ti farò sapere
Ciao
Baciccia
 
Ciao Buongiorno Baciccia
volevo farti notare che il foglio ( RisAnalisi )
non va ce qualcosa che Blocca Lanalisi
Grazie.
ho provato e mi sembra funzioni. Quello che mi lascia perplesso è che le previsioni, al cambiar delle estrazioni, sembrano sempre le stesse. Poi avevo modificato affinché considerasse, effettivamente, tutte le coppie possibili e non solo quelle che contemplano uno dei tre numeri.
A volte mi capita di cancellare la versione corretta e tenere quella che ha problemi (fanc... all'Alzheimer!).
Appena posso cerco di capire che è successo
Bacciccia Pasticcia
 
Prova a porre la domanda in altri termini.
Quante volte ed in quali estrazione si è verificata la presenza di 1 terno uguale su 3 ruote.
Ho provato. in due sessioni. Sembra che io non riesca a spiegarmi con sufficiente chiarezza, o, come diceva LuigiB, ... ne capiscono meno di te.
A volte ho l'impressione che mi prendano in giro, dopo aver spiegato con immagini e dovizia di particolari com'era strutturati il mio archivio, mi sono reso conto che gestiva i numeri, tutti i numeri, come se fossero formati da due cifre: 01, 02, ecc.
Poi, troppo spesso, vi sono variabili non dichiarate, errore vari e incomprensibili.
Tra un errore e l'altro finisce il tempo e devi, nella sessione successiva iniziare da capo.
Per ora rinuncio, con questo sono almeno 6 le mie rinuncie, perché macro, a mio avviso non complesse, non andavano a buon fine.
Peccato. Il tempo passa e le mie capacità di (non mi viene la parola)... diminuiscono.
Ma anche le capacità di altri diminuiscono. Se se la prendono perché qualcuno non capisce.
L'intelligenza, e il rispetto per gli altri, si misurano non sulle cose che si sanno, ma sulla capacità di spiegarle e rispiegarle, e rispiegarle, e rispiegarle agli altri, finché non comprendono. E se non comprendono è colpa di chi spiega.
Abbiate pazienza, non sentitevi Dio che elargisce con parsimonia la sua (si fa per dire) conoscenza. Siate uomini consci che alcuni hanno più difficoltà a comprendere e non per questo devono essere offesi ma aiutati, nelle piccole come nelle grandi cose.
Il rispetto per voi stessi e per gli altri vi guidi
Baciccia (finché c'è)
 
Ho provato. in due sessioni. Sembra che io non riesca a spiegarmi con sufficiente chiarezza, o, come diceva LuigiB, ... ne capiscono meno di te.
A volte ho l'impressione che mi prendano in giro, dopo aver spiegato con immagini e dovizia di particolari com'era strutturati il mio archivio, mi sono reso conto che gestiva i numeri, tutti i numeri, come se fossero formati da due cifre: 01, 02, ecc.
Poi, troppo spesso, vi sono variabili non dichiarate, errore vari e incomprensibili.
Tra un errore e l'altro finisce il tempo e devi, nella sessione successiva iniziare da capo.
Per ora rinuncio, con questo sono almeno 6 le mie rinuncie, perché macro, a mio avviso non complesse, non andavano a buon fine.
Peccato. Il tempo passa e le mie capacità di (non mi viene la parola)... diminuiscono.
Ma anche le capacità di altri diminuiscono. Se se la prendono perché qualcuno non capisce.
L'intelligenza, e il rispetto per gli altri, si misurano non sulle cose che si sanno, ma sulla capacità di spiegarle e rispiegarle, e rispiegarle, e rispiegarle agli altri, finché non comprendono. E se non comprendono è colpa di chi spiega.
Abbiate pazienza, non sentitevi Dio che elargisce con parsimonia la sua (si fa per dire) conoscenza. Siate uomini consci che alcuni hanno più difficoltà a comprendere e non per questo devono essere offesi ma aiutati, nelle piccole come nelle grandi cose.
Il rispetto per voi stessi e per gli altri vi guidi
Baciccia (finché c'è)

Premesso che a mio parere c'è chi merita e chi non merita, a te Baciccia va l'elogio di prodigarti per altri con impegno, simpatia ed ironia.
Io questo spirito lo ho messo in disparte da tempo per motivi che non sto qui a riprendere e per questo spesso vengo additato come burbero e magari considerato "rompitore e distruttore di tread ecc. ".

Lasciando perdere la volontà di fare tutto per forza con l'ausilio della AI che come avrai preso atto velocizza la costruzione dei progetti ma spesso non segue il tuo ragionamento o non lo capisce proprio, facendoti girare come una trottola tra i suoi meandri senza arrivare all'obbiettivo, proviamo a ragionare seguendo una logica di processo e me ne dispiaccio che Pandit non ti sia di ausilio visto che la cosa è di suo interesse e richiesta e visto che qualcosina di script la conosce.

Non ho intenzione di scrivere nessuna blocco di costrutto ( parlo di spazioscript cioè del VBScript usato in Spaziometria) perchè il web è pieno di script che sviluppano le basi dell'argomento di cui ti stai occupando, se comunque hai bisogno di aiuto sono a disposizione .

Entro nel merito del ragionamento suggeritoti: " Quante volte ed in quali estrazione si è verificata la presenza di 1 terno uguale su 3 ruote."

Cosa implica questo in termini di ragionamento/sequenza logico/a?
1) se si verifica che ci sia 1 terno uguale in 3 ruote nella stessa estrazioni si deve obbligatoriamente verificare che un singolo numero del terno sia presente in 3 ruote nella stessa estrazione
2) se si verifica che ci sia 1 terno uguale in 3 ruote nella stessa estrazioni si deve obbligatoriamente verificare che una coppia del terno sia presenti in 3 ruote nella stessa estrazione
3) se si verifica che ci sia 1 terno uguale in 3 ruote nella stessa estrazioni si deve obbligatoriamente verificare che una terzina sia presenti in 3 ruote nella stessa estrazione.
4) usando la condizione di verifica del punto 3, si estrapolano le ruote e la data/numero estrazione che sottratta adeguatamente alla finale in uso ci darà il ritardo richiesto.

Ognuno di questi punti di verifica è verificabile con script dal più semplice (punto 1) al più impegnativo (punto 3) e di script riferiti alle coppie su almeno 2 ruote non e difficile rintracciali sul web o in questo forum.

Passare quindi all'inserimento della 3a ruota partendo dalla ricerca dell'ambo non è difficile, basta capirne e copiarne la logica usata per le coppie ( se serve aiuto, no problem).

Il passo successivo è gestire la cosa con 3 numeri invece di 2 e rilevare quanto specificato al punto 4.

Sicuramente scrollare tutto l'archivio per una ricerca di 3 terni uguali su tre ruote è meno impegnativo in termini di tempo, anche con uno script, invece di elaborare i ritardi dei 117480 terni su 10/11 ruote e poi sincronizzarli in termini temporali.

Questa è la strada che io percorrerei senza o ( vel caso tuo) con l'ausilio dell'AI. Il passaggio dallo script (VBScript) fatto in SPMT al VBA di excel per l'AI è un gioco da ragazzi.

Ciao
 
Ultima modifica:
Ciao Baci ma in tutti fogli vi è una scritta: in fondo a destra cosa devo fare, grazie Super Ciccia.

Vedi l'allegato 2293260
1731851141904.png

A me non succede. Hai scaricato l'ultima versione? L'unica cosa che puoi fare nel foglio Tabellone è inserire dei numeri nelle caselline gialle, rosse e celesti: gialle e celesti evidenziano sul tabellone, in tutte le ruote, i numeri scelti, le celle rosse, oltre a questo, mostrano sulla loro destra i minimi e i massimi del numero sulle ruote. Il foglio dovrebbe essere protetto, per impedire involontari cambiamenti, ma acc. non ricordo come si fa, o meglio lo ricordo ma non riesco acc. Qualcun altro ha lo stesso problema? Baciccin
1731851293849.png
 
Baciccia, a me funziona tutto benissimo, copresi gli aggiornamenti, dall'immagine di Alien, mi pare abbia tolto la protezione e cliccato su una casella, dando l'errore visualizzato..
 
Ciao Pandit non ho tolto nessuna protezione ma devo cambiare il nome ad ogni aggiornamento in quando se lascio il nome originale mi blocca tutto il programma mi dice :come non sicura delle macro(ma se cambio il nome tutto va ok)
 
Si certo Pandit lo avevo capito "mi pare" lungi da me alludere ad altre cose ma a digitare qua si prendono cavoli per peperoni .




tumblr_nnalwj5EWs1s2f16eo3_r1_400.gifv
 
Ciao Pandit non ho tolto nessuna protezione ma devo cambiare il nome ad ogni aggiornamento in quando se lascio il nome originale mi blocca tutto il programma mi dice :come non sicura delle macro(ma se cambio il nome tutto va ok)
forse è da rivedere come hai settato le macro, appena ho tempo o meglio appena mi ricordo o vado a cercare come si fa, ti dico qualcosa
ciao
Baciccia
 
Ciao Baci non ho settato nulla scarico ed apro il tuo megagalattico programma ed appare la scritta in rosso che la macro sono dannose ma se invece lo apro con un altro nome va tutto ok si vede che non gli piace il nome Baciccia hhahahhaha
 
Si certo Pandit lo avevo capito "mi pare" lungi da me alludere ad altre cose ma a digitare qua si prendono cavoli per peperoni .




tumblr_nnalwj5EWs1s2f16eo3_r1_400.gifv
Dal Vangelo delle Macro secondo Le AI:

Le principali opzioni di sicurezza per le macro in Excel sono:


  1. Per aprire le macro in Excel, devi:
    • Andare su File > Opzioni > Centro protezione > Impostazioni Centro protezione > Impostazioni macro
    • Scegliere tra:
      • Disattiva tutte le macro senza notifica
      • Disattiva tutte le macro con notifica (consigliata)
      • Disattiva tutte le macro tranne quelle firmate digitalmente
      • Attiva tutte le macro (non consigliata)
  2. Per utilizzare la macro dopo averla inserita:
    • Al primo avvio vedrai una "Barra gialla dei messaggi" con "Avviso di sicurezza"
    • Clicca su "Abilita contenuto" per attivare le macro nel documento
    • Se non vedi la barra gialla, verifica nelle opzioni che le macro non siano completamente disabilitate
  3. Per salvare il file con la macro:
    • Devi usare l'estensione .xlsm (Excel con supporto macro)
    • Non può essere salvato come .xlsx normale
    • Puoi scegliere "Excel Macro-Enabled Workbook" dal menu a tendina del formato file
  4. Se hai problemi con l'esecuzione, controlla anche:
    • Che il file non sia in "Visualizzazione protetta"
    • Che non sia bloccato perché scaricato da Internet (tasto destro sul file > Proprietà > "Sblocca")

Vuoi che ti spieghi come impostare qualcuna di queste opzioni nel dettaglio?
si

Ok, vediamo passo per passo come configurare la sicurezza delle macro:


  1. ACCESSO ALLE IMPOSTAZIONI:
    • Apri Excel
    • Clicca File (o il pulsante Office)
    • Clicca Opzioni
    • Seleziona "Centro protezione"
    • Clicca "Impostazioni Centro protezione"
    • Seleziona "Impostazioni macro"
  2. LE 4 OPZIONI DISPONIBILI:a) "Disattiva tutte le macro senza notifica"
    • Le macro vengono sempre bloccate
    • Non ricevi nessun avviso
    • Massima sicurezza ma poco pratico se usi macro affidabili
    b) "Disattiva tutte le macro con notifica" (CONSIGLIATA)
    • Vedi la barra gialla quando apri un file con macro
    • Puoi scegliere se abilitare le macro per quel file
    • Buon compromesso tra sicurezza e usabilità
    c) "Disattiva tutte le macro tranne quelle firmate digitalmente"
    • Accetta solo macro con certificato digitale valido
    • Utile in ambiente aziendale
    • Richiede che gli sviluppatori firmino le macro
    d) "Attiva tutte le macro" (NON CONSIGLIATA)
    • Nessun controllo di sicurezza
    • Rischio di macro dannose
    • Da usare solo in ambiente di test isolato
  3. SBLOCCARE UN FILE SCARICATO:
    • Tasto destro sul file .xlsm
    • Proprietà
    • In basso cerca "Sicurezza: Il file proviene da un'altra posizione..."
    • Spunta "Sblocca"
    • OK
  4. PERCORSI ATTENDIBILI:
    • Nelle stesse impostazioni del Centro protezione
    • "Percorsi attendibili"
    • Puoi aggiungere cartelle del PC dove metti file fidati
    • Le macro in questi file verranno sempre abilitate
    • Utile per le tue macro personali

Per la tua macro del Lotto, ti consiglio:


  1. Usa "Disattiva tutte le macro con notifica"
  2. Salva il file come .xlsm
  3. La prima volta clicca "Abilita contenuto" sulla barra gialla
  4. Se lo usi spesso, mettilo in una cartella "attendibile"

Vuoi che approfondisca qualcuno di questi punti?

Se lanci Copilot gratuito, quello della Microsoft, puoi fare tu stesso le domande che desideri. A volte riescono ad essere precise. Prova
E scarica la nuova versione
Baciccia
 

Nuova versione modificato il foglio RisAnalisi:

1731859276980.png

Testate, controllate e se qualcosa non va *********! *********! Chiaro?

1731859734898.png

Su due ruote avrebbe preso il 7 sia a Bari che a Cagliari (è sempre un caso, non succede ogni volta, purtroppo)
Salutate il mio cervello, se lo vedete...
Baciccia
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 16 novembre 2024
    Bari
    17
    28
    73
    90
    07
    Cagliari
    41
    07
    61
    17
    06
    Firenze
    24
    88
    48
    02
    16
    Genova
    13
    87
    35
    62
    75
    Milano
    14
    75
    67
    88
    06
    Napoli
    10
    09
    63
    53
    78
    Palermo
    48
    07
    76
    86
    42
    Roma
    77
    75
    06
    14
    29
    Torino
    29
    23
    68
    70
    72
    Venezia
    88
    12
    09
    45
    30
    Nazionale
    73
    21
    67
    02
    84
    Estrazione Simbolotto
    Torino
    28
    33
    23
    03
    31

Ultimi Messaggi

Indietro
Alto