È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Excel 2007 macro

Ultimo Aggiornamento: 18/05/2017 10:51
Post: 184
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
16/05/2017 22:01

Ciao, a tutti, con il vostro aiuto vorrei realizzare se possibile quanto segue:
Ho un foglio in excel denominato "foglio1" che contiene un archivio del 10elotto 5minuti, questo si aggiorna automaticamente dal web attraverso un pulsante. I numeri vengono disposti nelle celle da C2:V2 a fine giornata abbiamo aggiornata circa 300 estrazioni poi si riazzera e riparte con la nuova estrazione all 00.05 del giorno successivo. L'ultima estrazione viene sempre posizionata nelle celle C2:V2.
Io ho creato un altro foglio denominato Frequenza giornaliera dove ho disposto in verticale i 90 nr.
nella colonna A2:A31 i numeri da 1 a 30 nella colonna E2:E31 per ogni numero dovrebbe riportare il ritardo attuale mentre nella colonna f2:F31 il ritardo storico basandosi sulle estrazioni in archivio. Stessa cosa per il resto dei numeri che ho disposto cosi:
h2:H31 nr da 31 a 60 nelle celle L2:L31 dovrebbe riportare il ritardo attuale nelle celle M2:M31 rit storico.
Infine Nelle celle O2:O31 disposto i nr da 61 a 90, nelle celle S2:S31 vorrei il ritardo attuale nelle celle T2:T31 il ritardo storico.
Il tutto dovrebbe essere aggiornato da un pulsante che inserirò nel foglio "Frequenza giornaliera"
Se invece c'è una formula con excel forse è tutto più facile.
Spero di trovare qualcuno che mi possa aiutare in questo
Allego file
Post: 1.315
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
17/05/2017 09:35

Ciao
non so nulla di lotto ecc

puoi fare un esempio che spieghi cos'è il ritardo attuale e quello storico?

saluti
Domenico
Win 10 - Excel 2016
Post: 184
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
17/05/2017 11:12

Ciao Domenico, intanto grazie della tua cortesia
Cerco di essere più chiaro possibile:
Consideriamo il nr 1 che si trova nella colonna A2 per trovare il ritardo attuale. La ricerca consiste nel verificare nell'archivio "Foglio1" l'ultima volta che è sortito l'1, mi spiego meglio se l'1 è sortito all'estrazione nr 100 ed adesso l'ultima estrazione in archivio è la 105 ciò significa che l'1 ha ritardo attuale 5, è così per tutti gli altri numeri.
Per quanto riguarda lo storico dovrebbe avvenire il controllo andando a verificare tutti i ritardi e riportare solo quello maggiore .
Faccio un esempio: Se l'1 ha un ritardo attuale di 5 per capire qualè quello storico devo necessariamente verificare tutto l'archivio per vedere quale è stato il maggior ritardo e lo riporto sulla cella corrispondente.
Spero di essere stato discretamente chiaro
Buona giornata

[Modificato da satos 17/05/2017 11:13]
Post: 1.317
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
17/05/2017 16:58

Ciao
il numero va cercato anche nella colonna n.oro???

Comunque credo no.

La routine interviene ogni volta che attivi il foglio "frequenza giornaliera", pertanto va inserito nel vb del foglio stesso.

Fai bene i tuoi controlli e, non guasterebbe una sana gestione di errori.

saluti

Private Sub Worksheet_Activate()
Dim mRng As Range, Cel As Range, c As Object
Dim firstaddress As String, k As Byte
Dim mNum As Integer, ur As Long, ritS As Long, rPre As Long
Range("E2:F31,L2:M31,S2:T31").ClearContents
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Set mRng = Range("A2:A31,H2:H31,O2:O31")

ur = Sheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
k = 0
For Each Cel In mRng
    mNum = Cel.Value
    With Worksheets("Foglio1").Range("C2:V" & ur)
        Set c = .Find(mNum, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
            firstaddress = c.Address
            Do
                If k = 0 Then
                    Cells(Cel.Row, Cel.Column + 4) = c.Row - 2
                    k = 1
                    ritS = c.Row - 2
                    rPre = c.Row
                Else
                    If c.Row - rPre > ritS Then
                        ritS = c.Row - rPre
                    End If
                    rPre = c.Row
                End If
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstaddress
            Cells(Cel.Row, Cel.Column + 5) = ritS
        End If
        
    End With
    k = 0
    ritS = 0
    rPre = 0
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
MsgBox "Fine elaborazione"
End Sub




[Modificato da dodo47 17/05/2017 18:04]
Domenico
Win 10 - Excel 2016
Post: 185
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
17/05/2017 23:18

Grazie Domenico,faccio delle prove
Post: 5.177
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
18/05/2017 08:15

10elotto5
Ciao Satos, anche io seguo il 10elotto5, ma solo per passione, non gioco, tanto per passatempo, e vedere se riesco a combinare numeri.

ti passo uno dei miei primi file che ho creato, spero non me ne voglia Domenico che Saluto.

vedi ce un foglio Help per le spiegazioni sull'uso, molto stringato.

il foglio fa solo il ritardo attuale e non lo storico, in quanto su 288 estrazioni quale storico pensi sia affidabile, almeno ci vorrebbe l'archivio da inizio anno.

all'apertura del file ti aggiorna all'ultima estrazione.

Ciao By Sal [SM=x423051]

[Modificato da by sal 18/05/2017 08:17]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 186
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
18/05/2017 08:58

Ciao by sal
Grazie infinite
Inoltre volevo dirti. Tu hai provato il file mio con la macro di dodo ?
perché io non riesco a farla funzionare........
Ho molto da imparare
forse sbaglio qualcosa ?
Post: 1.319
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
18/05/2017 09:11

Cial
by sal...ci mancherebbe....

satos: hai letto bene quanto ho scritto e dove va quella macro?

saluti
Domenico
Win 10 - Excel 2016
Post: 187
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
18/05/2017 09:15

Ciao, l'ho inserita nel foglio "Frequenza giornaliera"
Poi ho creato un bottone per la macro
Post: 1.321
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
18/05/2017 09:43

Ciao
quella macro agisce ogni volta che selezioni il foglio. Es: selezioni il Foglio1 e poi selezioni il foglio frequenza.

Quindi lo fa automaticamente ogni volta che selezioni quel foglio; e te ne saresti dovuto accorgere dal nome: Private Sub Worksheet_Activate()

se non ti piace questo modo, la metti in un modulo, la chiami sub cometipare() e la leghi ad un pulsante.

saluti
Domenico
Win 10 - Excel 2016
Post: 5.178
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
18/05/2017 09:54

10elotto5
Ciao Satos, non ce bisogno di pulsante, quando l'hai inserita nel modulo del foglio, quando passi al foglio "Frequenza giornaliera" si aggiorna in automatico.

Ciao Domenico Ho controllato la macro, ma non credo che funzioni a dovere, in quanto per il ritardo attuale ci dovrebbero essere 20 numeri con valore 0zero, me ne trovo 19.

i numeri estratti sono 20 quindi ogni numero uscito il ritardo è 0zero

ho guardato solo quello per un controllo veloce.

ti allego il file con la macro inserita, ho fatto evidenziare gli 0zeri.

anche aggiornando me ne trovo sempre 19.

ciao By Sal [SM=x423051]

se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 188
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
18/05/2017 10:09

Grazie by sal, che excel usi
io ho il 2007
infatti non riesco ad aprire il file che tu hai messo
Post: 1.322
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
18/05/2017 10:11

Ciao
hai ragione Sal ... è il problema del Find che "scarta" la cella di partenza.
Non ho potuto valutare da riga 1 in quanto ci sono numeri.

@satos Comunque basta correggere:

With Worksheets("Foglio1").Range("C2:V" & ur)

con

With Worksheets("Foglio1").Range("B2:V" & ur), visto che la col. B è vuota

grazie e saluti
[Modificato da dodo47 18/05/2017 10:12]
Domenico
Win 10 - Excel 2016
Post: 5.179
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
18/05/2017 10:12

10elotto5
Ciao, il 2013, ma deve aprirsi anche con il 2007, che errore ti dice?

Ciao Domenico, si ho corretto la macro col tuo codice, è funziona tutto a dovere.

Ciao By Sal [SM=x423051]

[Modificato da by sal 18/05/2017 10:15]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 1.323
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
18/05/2017 10:14

qui il file

satos il tuo file è xls quindi 2003

[Modificato da dodo47 18/05/2017 10:15]
Domenico
Win 10 - Excel 2016
Post: 189
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
18/05/2017 10:16

Scusatemi la mia poca preparazione vi elenco quello che faccio.
Apro il file excel, alt+F11 accedo in visual, vado sul foglio (Frequenza giornaliera) inserisci modulo e copio all'interno la macro salvo esco e riapro il file.
Però non vedo i ritardi.
cosa sbaglio ?
[SM=x423023] [SM=x423023] [SM=x423023]
Post: 1.324
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
18/05/2017 10:22

Intanto guarda il file che ti ho inviato. Ogni volta che passi da un foglio qualsiasi a quello delle frequenze la macro parte, aggiorna e mostra msgbox di avvenuta elaborazione.

Procedura:

nel vba > a sinistra doppio click sul foglio frequenze > nella finestra a destra (senza inserire modulo incolli il codice.

Se invece la vuoi legare ad un pulsante gli cambi il nome (per es: Sub Frequenze() la copi in un modulo (non nel vb del foglio) e la colleghi al pulsante.

spero sia chiaro

saluti

Domenico
Win 10 - Excel 2016
Post: 190
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
18/05/2017 10:28

Finalmente ci sono......!!!!
Grazie alla tua pazienza.
Chissà che o prima o poi riesco ad imparare
Ciao domenico
[SM=x423025] [SM=x423025] [SM=x423025] [SM=x423025] [SM=x423025]
Post: 1.325
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
18/05/2017 10:39

satos

in sintesi: nel vb dei fogli ci vanno quegli eventi che interessano il foglio stesso.

Per esempio:
- se vuoi che cambiando il valore di una cella succeda qualcosa dovrai utilizzare l'evento Private Sub Worksheet_Change(ByVal Target As Range) del foglio

- se vuoi che spostandoti con il cursore succeda qualcosa dovrai utilizzare l'evento Private Sub Worksheet_SelectionChange del foglio

- se vuoi che attivando il foglio succeda qualcosa dovrai utilizzare l'evento Private Sub Worksheet_Activate() del foglio, e questo è il tuo caso.

- etc..etc

il resto va sui moduli generici

saluti
Domenico
Win 10 - Excel 2016
Post: 191
Registrato il: 29/04/2002
Utente Junior
2007
OFFLINE
18/05/2017 10:51

Grazie Infinite
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Excel 2007 forse macro (17 messaggi, agg.: 13/05/2017 11:40)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 18:39. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com