| | Post: 7.237 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
04/05/2023 08:48 | |
Ciao mi occorrerebbe una formula che calcoli la percentuale, ma non so come spiegarla, so che la percentuale si calcola facendo la differenza tra 2 numeri
una cella mi deve portare il valore percentuale, pero dovrebbe essere calcolata con un ciclo For...next
for x = 1 to y
la cella in oggetto mi dovrebbe portare un valore da 1 a 100 in base ad i valori x e y, cioè più sale x più aumenta la percentuale finche sarà 100% quando x sarà uguale ad y, non so se sono riuscito a spiegarmi
Ciao By Sal (8-D se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
|
| | Post: 2.950 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
04/05/2023 09:00 | |
No🤣
scrivi quattro righe di esempio della struttura
|
| | Post: 7.237 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
04/05/2023 09:56 | |
Ciao Federico grazie per la risposta, girando sul web ho visto uno short di Emmanuele Vietti riguardo ad un grafico ad anello.
Pensandoci bene a volte ho delle macro che ci mettono alcuni minuti per eseguirle, ho già una macro che mi mette una barra di riempimento in basso a sx nella barra di stato, come vedi, per vedere l'esecuzione della macro.
però sarebbe carino cambiarla con un anello che si completa al completamento della macro, perche pure se non ce niente non sai se la macro sta lavorando e quando tempo ci metterà per finire.
ho preparato un file, che allego, il valore incremetale della percentuale andrebbe nella cella gialla B2, ma potrebbe essere qualsiasi cella
ho creato una macro per il conteggio temporizzata che si blocca ogni volta per 5 secondi, non funziona a dovere perche non mi fa vedere lo scorrimento dell'anello, ma è un fatto secondario al momento, troverò il modo di visualizzarlo.
metti un valore manualmente in b2 e vedrai, al momento il ciclo va da 1-x a 100-y ma potrebbe anche essere 1-10 oppure 1-20000 o ancora 1-3543 mi serve una formula che questi 2 valori x-y li riporti come da 1 a 100 ed inserirei il valore in B2 per alimentare il grafico, maggiormente il valore x dovrebbe andare da 1 a 100, visto che è quello da visualizzare
non so se la spiegazione sia stata esauriente.
Ciao By Sal (8-D
[Modificato da by sal 04/05/2023 10:05] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 601 | Registrato il: 02/04/2018
| Città: PESCARA | Età: 75 | Utente Senior | EXCEL 2016 - SPREAD32 | | OFFLINE |
|
04/05/2023 10:29 | |
Ciao Sal
spero che Federico mi permetta di inserirmi
da quello che scrivi io non ho capito niente
comunque per vedere se per sbaglio ho indovinato qualcosa inserisci un tuo valore in G2 , e non in B2
e modifica un po' la tua macro così
macro Option Explicit
Sub ritardo()
Dim x
Dim y
y = Range("G2")
For x = 0 To 100 Step 5
Cells(2, 2) = x
Cells(2, 7) = y / 100 * x
Application.Wait (Now + TimeValue("0:00:01"))
DoEvents
Next x
End Sub
vediamo se è quello che vuoi tu, altrimenti scusatemi entrambi
Leo
LEO
https://t.me/LordBrum |
| | Post: 7.238 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
04/05/2023 19:24 | |
Ciao Leo non devi scurarti ognuno può intervenire con il proprio consiglio, ora provo e vediamo se va bene
Ciao Salvatore (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 1.103 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Veteran | Excel2019 | | OFFLINE |
|
05/05/2023 19:36 | |
Ciao
@by sal
Salvatore, ti do uno spunto (ma è solo uno spunto, bada bene)
Clicca sul pulsante in verde.
Fai sapere. Ciao,
Mario |
| | Post: 3.492 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
06/05/2023 09:45 | |
ciao Salvatore
ti ellego il file che normalmente utilizzo per le progr. bar.
Ce ne sono di due tipi: quella classica con userForm (cui vengono tolti i bordi) ed un'altra grafica sul foglio.
In L2 inserisci il valore alto del loop ...
saluti
relativamente a rapportare a 100 la tua "Y":
For i = 1 To Y
Incremento = i / Y
Progressivo_Percentuale = Round(Incremento * 100, 0)
comunque lo vedi nel file [Modificato da dodo47 06/05/2023 09:51] Domenico
Win 10 - Excel 2016 |
| | Post: 1.104 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Veteran | Excel2019 | | OFFLINE |
|
06/05/2023 10:19 | |
Ciao
@dodo47
Domenico, perfetto!!!! E non poteva essere altrimenti.
Ma mi chiedo, e vi chiedo, come fare quando NON si conosce a priori il tempo che impiegherà una macro a svolgere il proprio lavoro?
Per es. sto aprendo un altro file. Quanto tempo impiegherà? Quanto tempo la "progress" deve restare in funzione?
Se non ricordo male da qualche parte avevo letto che c'è un modo di conoscere già all'inizio il tempo di download.
Ciao a tutti, Mario |
| | Post: 3.493 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
06/05/2023 10:32 | |
Ciao Mario
se guardi questa sub, per esempio:
Sub ProgGraf()
Dim mProgr As Object, mLoop As Double, Increment As Double, ProgPerc As Double
Range("b2") = 0
mLoop = Range("L2") 'indice alto del loop
For i = 1 To mLoop
Increment = i / mLoop
ProgrPerc = Round(Increment * 100, 0)
Range("b2") = ProgrPerc / 100
DoEvents
ActiveSheet.ChartObjects("mProgr").Chart.Refresh
DoEvents
For j = 1 To 1000000
Next
Next
End Sub
la parte in grasssetto corrisponde a tutte le operazioni ( ByStep)che la macro deve fare (aggiornamenti-formule-etc-etc) prima di passare al successivo incremento della barra.
Questo nel caso ci fosse un ciclo for...next tipo quello della suddetta sub (For i = 1 To mLoop)
Se non c'è, bisogna vedere cosa fa la macro, se per esempio aggiorna n files, prima va calcolato il numero di files ed il loop si baserà su quello.
Forse da qualche parte ho una Prog.Bar basata sul tempo.....se la trovo la pubblico.
cari saluti
[Modificato da dodo47 06/05/2023 12:06] Domenico
Win 10 - Excel 2016 |
| | Post: 7.240 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
06/05/2023 11:32 | |
Ciao Domenico, Grazie per il file, la menu bar con il form la sapevo già, mi hai risparmiato tempo per quella con il grafico
io invece uso spesso la StatusBar, con una macro non troppo invasiva, questo il risultato col funzionamento
questa la macro usata
Sub BarP(Progress, TotalSteps, Testo) 'tutt'è due as long inserisce una progressbar
Dim Progress_Char As String
Dim Space_Char As String
Dim Start_Char As String
Dim End_Char As String
Dim CompletedSteps As Long
Dim RemainingSteps As Long
Const MaxWidth = 40
CompletedSteps = Progress / TotalSteps * MaxWidth
RemainingSteps = MaxWidth - CompletedSteps
Start_Char = "[ "
End_Char = " ] "
Progress_Char = "|" ' [|||| ]
'Progress_Char = ":" ' [:::: ]
Space_Char = " "
Application.StatusBar = Start_Char & WorksheetFunction.Rept(Progress_Char, Round(CompletedSteps, 0)) & _
WorksheetFunction.Rept(Space_Char, Round(RemainingSteps, 0)) & _
End_Char & Round(CompletedSteps / MaxWidth * 100, 0) & "% " & Testo
DoEvents
'Se si desidera solo un messaggio e nessun bar animato quindi utilizzare questa linea
' Application.StatusBar = Round (passaggi completati / Max larghezza * 100, 0) e "% Complete"
End Sub
come vedi mi indica anche quale archivio sta lavorando, e molto facile da usare, basta inserirla nel ciclo For..Next cosi
For x = 2 To Ur(Sh7.Name, 7)
BarP x, Ur(Sh7.Name, 7), "Scrivo gli ospiti"
dove la x è il contatore, Ur(Sh7.Name, 7) è una funzione per l'ultima riga e dopo viene il messaggio da visualizzare
la inserisco solamente se il ciclo è lungo, non vale la pena per i cicli brevi, non si riuscirebbe nemmeno a vederla
ora vedo come sfruttare il tuo grafico.
Ciao e grazie per il file, By Sal (8-D
[Modificato da by sal 06/05/2023 11:34] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 3.494 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
06/05/2023 13:14 | |
@Mario
ciao
non ho trovato nei miei archivi quanto detto....
Se fai un esempio (a parole naturalmente) di cosa potrebbe fare una macro per durare molto e senza che abbia un loop, forse si riesce a venirne a capo.
saluti
[Modificato da dodo47 06/05/2023 13:14] Domenico
Win 10 - Excel 2016 |
| | Post: 1.105 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Veteran | Excel2019 | | OFFLINE |
|
06/05/2023 14:29 | |
@dodo47
Ciao Domenico.
Molto tempo fa feci un lavoro per un mio parente commerciante. In un Foglio principale vi è l'elenco dei Fornitori (poco meno di 150) ed ognuno di loro presenta da una decina ad oltre 5000 prodotti. Per non creare un file con 150 fogli (ognuno con una diversa lunghezza in righe) optai per la creazione di tanti file quanti sono i Fornitori ed ognuno, ovviamente, col proprio numero di prodotti in un unico Foglio.
Dal Foglio principale "richiamo" il Fornitore. Ed ecco il punto: se il fornitore ha un numero limitato di prodotti, l'apertura del file è .... istantanea (quasi) mentre impiega un po' di tempo (anche parecchi secondi) se i prodotti sono tanti, come più sopra detto.
A suo tempo (non avevo le conoscenze di oggi) adottai un escamotage: una UserForm con la dicitura "Attendere, prego. Sto lavorando" che alla fine del download scompare.
Non ho provato a modificare il file (anche perchè va bene e non vorrei creare problemi all'Utente) inserendo una Progress.
Mi piacerebbe, però, capire come realizzarla.
Spero sia tutto chiaro e grazie per l'attenzione.
Ciao,
Mario |
| | Post: 7.241 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
06/05/2023 16:23 | |
Ciao Marius, forse si può fare, ma con le formule, il mio problema è a conoscenza di tutti, credo che basterebbe moltiplicare il tempo di 1 ciclo per il max del ciclo e si avrebbe il tempo di esecuzione totale, logicamente il tempo di 1 ciclo sarebbero millesimi di secondo o anche meno.
a questo punto basta contare il tempo di esecuzione in progressione con un timer e sottrarlo al tempo totale calcolato, a questo punto avremo quanto manca alla fine della macro o veramente del ciclo di quella macro perche se sarebbero più cicli separati non si potrebbe avere il tempo totale.
vedo se riesco a realizzarlo.
P.S. non avevo visto che mi avevi risposto prima di Domenico ora guardo
Ciao By Sal (8-D [Modificato da by sal 06/05/2023 16:24] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 2.951 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
06/05/2023 18:01 | |
ciao
spiace non partecipare
ma non ho capito cosa devi fare con la formula
😞 |
| | Post: 3.495 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
06/05/2023 18:19 | |
@Mario
ciao
basta che conti quanti file devi eleborare e poi assegni a mLoop tale numero
'con una semplice dir conti quanti file ci sono nella cartella
Filename = Dir(TuaCartella & "\*.xls*")
Do While Filename <> ""
Count = Count + 1
Filename = Dir()
Loop
mLoop = Count '<<<<<<<<<<<<<<<<<<<<<<<<<<
'CICLO LETURA A APERTURA FILES (anche con Dir o, meglio con _
' CreateObject("Scripting.FileSystemObject")
for each file......
i = i + 1
apri file.....
fai quello che devi fare
Increment = i / mLoop
BarWidth = PrBarW * Increment
ProgrPerc = Round(Increment * 100, 0)
ProgressUF.bar.Width = BarWidth
ProgressUF.Border.Caption = ProgrPerc & "% Complete"
DoEvents
chiudi il file
Next
saluti
[Modificato da dodo47 06/05/2023 18:27] Domenico
Win 10 - Excel 2016 |
| | Post: 7.242 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
06/05/2023 18:34 | |
Ciao Federico, ho detto formula per indicare quale tipo di calcolo applicare per poi tradurla per il vba, non una formula excel.
con la matematica sono rimasto al conteggio delle dita, per poi arrivare a 10 e dire "molti" quanto il numero è più grande 🤣🤣
Ciao Salvatore (8-D [Modificato da by sal 06/05/2023 18:35] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 1.106 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Veteran | Excel2019 | | OFFLINE |
|
06/05/2023 18:46 | |
Ciao a tutti
Vedo, con piacere, che le fila si ingrossano.
Sicuramente mi sono spiegato male. Nel lavoro che ho fatto per il mio parente viene aperto un file alla volta, ci si lavora sopra (carico, scarico, aggiornamento prezzi, ecc.). Quindi salva e riappare la videata principale in cui si sceglie altro fornitore.
Non avrebbe senso "contare quanti file devi elaborare". Primo perchè non lo so. Può darsi che si debba lavorare su un solo fornitore oppure su dieci. Secondo perchè ne lavoro uno per volta, lo chiudo e ne apro un altro, se serve.
Ciao,
Mario
PS - Faccio un esempio banale. Nella cartella di download ognuno di noi ha dei files. Questa cartella evidenzia anche la "dimensione". Potrebbe servire questo parametro? E se sì, come si potrebbe fare per estrapolarlo e calcolare su questo il tempo necessario. |
| | Post: 604 | Registrato il: 02/04/2018
| Città: PESCARA | Età: 75 | Utente Senior | EXCEL 2016 - SPREAD32 | | OFFLINE |
|
06/05/2023 19:21 | |
ciao,anche se rispetto al vostro VBA io sono un vaso di coccio, mi permetto:
Un download manager decente per prima cosa rileva la lunghezza del file da scaricare.
Poi comincia e ad ogni istante misura la quantità scaricata nel tempo, la rapporta al totale e in questo modo predice ad ogni istante il tempo rimanente aggiornando proprio la previsione, e di solito indovina bene e la formula è semplicissima.
Per le esigenze dichiarate qui bisogna in qualche modo trovare un totale con cui fare a priori una proporzione
ricordiamoci però che la lunghezza di un xlsm o xls o xlsx non è come trattare i CSV fatti puramente di dati.
a voi l'incombenza
Leo
pure ipotesi
per piu files si potrebbe vedere quanto "costa" 1 file e moltiplicare per gli altri secondo la loro grandezza
oppure una macro intelligente potrebbe, la prima volta, scrivere il tempo da qualche parte, e nei successivi interventi ripartire col dato di quel tempo memorizzato,per predire comodamente, ma temo che si debba salvare il tempo impiegato la prima volta.
VBA non ne so
Leo [Modificato da L2018 06/05/2023 19:33]
LEO
https://t.me/LordBrum |
| | Post: 3.496 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
06/05/2023 20:34 | |
Marius44, 06/05/2023 18:46:
Nel lavoro che ho fatto per il mio parente viene aperto un file alla volta, ci si lavora sopra (carico, scarico, aggiornamento prezzi, ecc.)
...e magari ti vai a prendere un caffè... eheheh.
Non è pensabile Mario, i fattori sono molteplici dalla potenza della macchina al tempo che impieghi a fare quello che devi...
E poi non ha senso, le progbar sono destinate ad un uso massivo da parte di un programma senza l'intervento dell'operatore, vedi per esempio quando installi un programma etc etc
saluti
[Modificato da dodo47 06/05/2023 22:02] Domenico
Win 10 - Excel 2016 |
| | Post: 1.108 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Veteran | Excel2019 | | OFFLINE |
|
07/05/2023 16:04 | |
Buon pomeriggio a tutti
@dodo47
Sai che sono testardo e, secondo, me si può fare. Ecco come.
Nell'allegate vedrai che ci sono una cartella compressa con dentro il file Main ed una cartella ElencoFiles. In quest'ultima ci sono due files di differente pesantezza.
Apri il File "Main" e clicca sul pulsante "Avvia".
Vedrai che in col A verrà scritto il nome del primo file e in col.B la sua dimensione. Contemporaneamente si avvia la tua macro per il ProgrGraf.
Nel mio codice vedrai che a questo punto c'è uno STOP che ho remmato perchè qui ci dovrebbe andare il codice per aprire il file. Alla fine dell'apertura dovrebbe sparire il ProgrGraf e mostrare il file appena aperto.
Per una dimostrazione della veridicità della mia tesi ho inserito due file (ma non li apro) e vedrai che il ProgrGraf appare due volte e per tempi differenti.
Cosa ne pensi/pensate?
Ciao,
Mario |
| | Post: 3.497 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
07/05/2023 17:03 | |
Mario....stai barando" ?!!!
la progBar mostrata non è il tempo che ci mette excel ad aprire il file di x dimensioni, ma un loop qualsiasi basato si su una diversa durata, ma che nulla ha a che fare con i tempi di apertura del file, infatti tale loop viene eseguito completamente prima che il file venga aperto.
Purtroppo in vba (al contrario di vbNet) non c'è un evento After Open che forse in qualche modo si potrebbe sfruttare.
Non ho capito??
saluti
[Modificato da dodo47 07/05/2023 17:15] Domenico
Win 10 - Excel 2016 |
| | Post: 1.109 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Veteran | Excel2019 | | OFFLINE |
|
07/05/2023 17:16 | |
Ciao Domenico
No, non credo di barare. Volevo solo far notare che il tempo di esecuzione della macro è bastato sulla dimensione del file.
Infatti il primo impiega qualche secondo, il secondo è quasi istantaneo. La tua casella gialla (per il loop) io non la tocco ma utilizzo la dimensione del file.
Ciao,
Mario |
| | Post: 3.498 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
07/05/2023 17:24 | |
Ciao Mario
Partiamo con un chiarimento di base:
- si vorrebbe una progBar per mostrare il tempo di apertura di un file
E' Così??
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 1.110 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Veteran | Excel2019 | | OFFLINE |
|
07/05/2023 18:45 | |
Ciao
Laconicamente, SI
Ciao,
Mario |
| | Post: 3.499 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
08/05/2023 09:36 | |
ciao
e come pensi di poterlo attuare ?
Anche se il loop corrisponde al size del file, nopn "scorre" unitamente alla sua apertura.
Sai cosa pensavo ? A mostrare il tempo trascorso (elapsed time) dal click per l'apertura alla sua completa disponibilità.
Al riguardo in particolare a intercettare la presenza del file $xxxxx che, come sai, è il temporaneo quando apri il file xxxxx; mi sembra che tale file venga "creato" appena il principale è disponibile, non prima.
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 1.112 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Veteran | Excel2019 | | OFFLINE |
|
08/05/2023 10:24 | |
Ciao
@dodo47
Domenico quello che mi piacerebbe è che un file come quello che t'ho detto come esempio, facesse "girare" il tuo "ProgrGraf" mentre sta cricando altro file e terminasse quando il detto file è caricato.
Ma forse (anzi certamente) sia "fuori tema" in questa discussione. Mi scuso con tutti.
Ciao,
Mario |
| | Post: 3.500 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
08/05/2023 10:58 | |
ciao Mario
si ho capito....forse con qualche API e comunque c'è da considerare anche che excel non è asincrono e può fare una cosa per volta
saluti
Domenico
Win 10 - Excel 2016 |
|
|