› Excel e gli applicativi Microsoft Office › Bloccare la data del Lunedì
-
AutoreArticoli
-
Buongiorno a tutti, ho un problemino che all'apparenza sembra normale ma che alla fine non riesco a risovere:
dato un file excel devo fare in modo che la data solo il lunedì si aggiorno e che per tutta la settimana mantenga il valore, e fin qui non ci sono problemi: =SE(GIORNO.SETTIMANA(OGGI();2)=1;OGGI();"")
problema 1: devo visualizzare per tutta la settimana la data del lunedì e deve essere fissata x quando il foglio viene salvato settimanalmente
Problema 2: quando sostituisco il file utilizzato la settimana precedente con il nuovo file per la settimana entrante (identico) deve automaticamente avere la data aggiornata della cella preposta (D4) e così via x tutte le settimane
La prima domanda che sicuramente sorge spontanea è : ma non puoi aggiornalo manualmente? risposta se fosse un unico file e fossi in prima persona ad utilizzare tale file si ma siccome chi deve utilizzare tale file è un opratore produttivo non si vuole dare la possibilità di cambiare celle ove non necessario, poi i file da sostituire settimanalmente sono molti pertanto.......
Allegati:
You must be logged in to view attached files.Quando scrivi che quella indicata è la "Cella che deve modificarsi automaticamente e deve mantenere la data del lunedì", intendi che io posso aprire il foglio in un giorno qualsiasi della settimana, ma la prima data (quella del lunedì) punta al primo lunedì della settimana in cui mi trovo (e quindi i giorni successivi sono in funzione della data indicata). Cioè se io apro il file oggi che è martedì 27, la cella D4 del file postato contiene "26/08/2019" (ieri, che era lunedì). Se apro il file martedì prossimo, 3 settembre la cella furbescamente mostrerà la data di lunedì 2 settembre (e i giorni successivi saranno 3/9, 4/9 eccetera).
Credo che sia complicato scriverlo in formula. Non mi ci sono mai messo in verità.
Un paio di righe di codice VBA risolverebbero, ma il prezzo da pagare in questo caso è che devi cambiare il formato di file (da xlsx a xlsm) e far attivare le macro ai tuoi utenti (altrimenti non funziona).
Comunque forse non è complicato 🙂
Una formula come questa nella cella del lunedì:
=OGGI()-GIORNO.SETTIMANA(OGGI();3)dovrebbe restituire la giornata di lunedì.
Nelle celle di martedì, mercoledì, eccetera, la formula deve tener conto dell'avanzamento di un giorno rispetto a tale lunedì:
cella di martedì: =OGGI()-GIORNO.SETTIMANA(OGGI();3)+1 cella di mercoledì: =OGGI()-GIORNO.SETTIMANA(OGGI();3)+2 cella di giovedì: =OGGI()-GIORNO.SETTIMANA(OGGI();3)+3 ecceteraCiao
io ho capito così:
tu apri il file e per tutti i giorni della settiama corrente vuoi che il rprimo giorno rimanga il luned' della settimana corrente.
Allora puoi usare
=TODAY()-WEEKDAY(TODAY();3) =OGGI()-GIORNO.SETTIMANA(OGGI();3)
Quando sei a mercoledì la data varra il mercoledì meno 2 (giorno settimana con secondo parametro 3 vale 0 (zero) il lunedì
@ VF non è per niente difficile.....
Ciao
Luca
Per i giorni successivi al lunedì in alternativa a qanto scritto da VF puoi semplicemente sommare 1 alla data della cella a sinistra
Uffa anticipato di un soffio, come sempre
Se ho detto qualcosa di giusto sono contento, vuol dire che ho ragionato bene. Non ricordo di averci avuto a che fare con un problema simile, e credevo fosse più complicato.
Luca la dificoltà è che quando lunedi 2 settembre(in questo caso) archivio il file la cella del lunedì non deve più modificarsi ma mantenere sempre la data (in questo caso) del 26 agosto anche nel caso lo aprissi tra 3 mesi; nella stesso tempo quando io sostituisco il file "vecchio" con il nuovo file Master la data al^'apertura deve essere quella del lunedì della settimana stessa.
Allora devi congelare le formule manualmente prima di archiviare il file e iniziare quello nuovo. Oppure usi VBA per questo compito. Non c'è altra soluzione.
Grazie ma non risolvo così facilmente il tuo suggerimento è lo stesso impostato inizialmente da me ma la cella si aggiorna sempre ogni lunedì a seguire che non è ciò che voglio. Immaginavo che forse l'unica soluzione è il VBA anche se devo modificare l'estensione del file e non sono avvezzo a questa tipologia di programmazione pertanto sono a chiedere aiuto Help me.
Ciao.
la soluzione proposta sia da me che da VF partiva dal fatto che non avevamo capito bene il problema.
Se vuoi congelare per sempre una data allora l'unica soluzione è che non sia una formula altrimenti si continuerebbe ad aggiornare.
Le soluzioni che vedo fattibili sono:
- scrivi a mano la data del lunedì ogni volta che cominci una nuova settimana.
- lasci la formula che ti calcola il lunedì ed inserisci un pulsante o similare che premuto durante la settimana trasforma le date in numeri
- lasci la data non come formula e aggiungi un pulsante oppure una domanda automatica ad inizio lavoro che chiede se vuoi aggiornare le date
Le soluzioni potrebbero essere diverse e dipende anche da come gestisci il file. Mi spiego. tu conservi il file di tttte le settimane. quindi saranno salvate con un certo nome. Per creare il file nuovo come procedi? Hai un modello? apri qullo della settimana prima e cancelli i dati? apri un file master?
A seconda di qyuale metodo utilizzi allora potresti pensare ad una soluzione,
Secondo me però non te la sfanghi solo con le formule.
Se vuoi passare al VBA e vuoi un aiuto cerca di spiegare cosa preferiresti che il programma facesse e come usualmente lo utilizzate.
Ciao
Luca
Pensavo di averlo scritto :
- il lunedì il file che chiamiamo "A" viene archiviato mediante schedulazione e non si tocca + a meno di effettuare controlli
- lo stesso lunedì in automatico mediante schedulazione viene copiato un file (Master) "B"nella stessa locazione del file "A" precedentemente archiviato
1) le date del file A non devono subire variazioni
2) le date del file "B" (che sostituirà il file "A" nella stessa cartella) devono assumere il valore partendo dal lunedì stesso di quando è stata effettuata la copia.
Spero di essere stato sufficentemente chiaro edi avere esposto il problema in modo esaustivo sul cosa vorrei avere.
Ciao
Se vuoi congelare per sempre una data allora l'unica soluzione è che non sia una formula
Eh già. Per congelare la data si seleziona la cella con la formula (o meglio tutte le celle dei giorni della settimana), si entra nella cella in modalità editing, si preme il tasto giusto e si salva tutto.
Quindi una serie F2 - F9 a catena. Senza VBA bisogna fare tutto a mano necessariamente.
Quanto alla nota sub 1) dell'ultimo post, chiaro che le date congelate sono normali valori e non più formule, quindi una volta trasformate non si cambiano più. Quanto alla nota sub 2) possono valere le formule già viste, dal momento che prendono in considerazione sempre =OGGI(). Il file master (B) potrebbe essere un modello di Excel (di estensione ".xlst") che contiene già le formule suddette.
Il punto chiave è che l'utente deve essere in grado di congelare le formule prima di archiviare il file... a meno che non venga fatto centralmente... il che potrebbe anche essere una buona idea: se tu, come amministratore del progetto, raccogli i file modificati dai tuoi operatori in nua cartella comune (o se ti fai mandare i file, è lo stesso), tu puoi avere una macro che apre ogni singolo file, congela le date, salva il file e lo piazza nella cartella di archivio... non so se sono stato chiaro. In tal modo nessuno dei tuoi utenti deve attivare le macro, lo fai solo tu quando serve (una volta alla settimana).
viene archiviato mediante schedulazione
Come avviene tale schedulazione?
Non voglio manualmente gestire c.a 40 file a settimana cosa mi suggerisci con il VBA?
Ma lo scenario prospettato è fattibile? Cioè, c'è un momento in cui riesci ad avere la disponibilità dei quaranta file settimanali per procedere all'archiviazione?
Suggerisco solo che tu dedichi un attimo lunedì mattina all'apertura di un file Excel di gestione, con cui avvii la macro che acceda alla cartella dove sono depositati i file da trattare, li apra, congeli le celle con formule nei corrispondenti valori, li chiuda (salvando) e li trasferisca nella cartella di archivio. Cioè esattamente quello che dovresti fare a mano.
Se poi (adesso devo studiarlo un attimo) si può anche fare in modo che il file di gestione sia lanciabile dallo stesso file bat, sarebbe ancor meglio.
Se poi (adesso devo studiarlo un attimo) si può anche fare in modo che il file di gestione sia lanciabile dallo stesso file bat
Si può anche fare, ma la macro deve risiedere nell'evento Open del Workbook e devi essere presente per attivare le macro (in alternativa: posizioni il file xlsm in un percorso "attendibile": in tal modo la macro viene eseguita senza conferma).
Una domanda: Visto che il file viene rinominato e salvato da un file .bat ha una data nel nome del file? o della cartella?
Il nome file è accessibile come formula pertanto potresti calcolare la data a partire dal nome del file.
Costruito oppurtunamente il file basterebbe comunque cambiare una ed una sola cella e lasciare le altre come funzione collegata alla prima che diventa fissa.
Ciao Luca
Ciao altra proposta.
E pensare di generare un file excel che contiene solo una macro che viene lanciato dal file.bat con una macro autopartente che apre e modifica tutti i file che ha appena generato/copiato?
E pensare di generare un file excel che contiene solo una macro
Ho pensato anch'io così. Siamo proprio in sintonia
Ciao
ci potrebbe essere una soluzione fattibile ma molto "sporca" accettando di avere calcoli ricorsivi.
in una cella inserire una formula se con una consdizione che verifica se il file è compilato (ad esempio una cella <>"" oppure il contegio delle celle da compilare = 0) e se non è compilato allora la cella vale oggi() altrimenti vale se stessa
Esempio
in A1 che verifica se A2 scritto
=IF(A2="";TODAY()-WEEKDAY(TODAY();3);A1)
oppure
in A1 che verifica se A8 c'e almeno una cella scritta
=IF(COUNT(A2:A8)=0;TODAY()-WEEKDAY(TODAY();3);A1)
Ciao
Luca
-
AutoreArticoli
