Ciao a tutti, come posso far imputare in automatico la data del giorno
corrente in una cella prescelta, a seguito di valore "imputato o variato" in
un'altra cella.
Tale necessità è sorta in quanto in un foglio di calcolo dove vengono
aggiornate le ore di straordinario, spesso ci si dimentica di aggiornare la
data della variazione effettuata.
Se possibile, è gradito un esempio a prova di scimmia.
Mille grazie, Bruno
>Excel - Office XP
>
>Ciao a tutti, come posso far imputare in automatico la data del giorno
>corrente
Imputare? http://www.demauroparavia.it/53970
Non ha molto senso: anche nel caso di giornate particolarmente storte è
difficile attribuir loro un reato specifico.
--
Tiziano "Lapalissiano" Marmiroli
Ma la data da aggiornare si trova nello stesso foglio?
Mettiamo sia Foglio1.
ALT+F11 e sei nell'editor del vba di Excel
Individua la finestra: Progetto-VBAProject
Fai doppio click su: Foglio1
Nel modulo di codice(foglio bianco)
copia incolla questo:
Private Sub Worksheet_Change(ByVal Target As Range)
Range("A1").Value = Format(Now, "mm/dd/yyyy")
End Sub
La data da aggiornare si trova in un altro foglio?
Mettiamo sia nel Foglio1 e tu stia operando
nel Foglio2
ALT+F11 e sei nell'editor del vba di Excel
Individua la finestra: Progetto-VBAProject
Fai doppio click su: Foglio2
Nel modulo di codice(foglio bianco)
copia incolla questo:
Private Sub Worksheet_Change(ByVal Target As Range)
With Worksheets("Foglio1")
.Range("A1").Value = Format(Now, "mm/dd/yyyy")
End With
End Sub
ALT+F11 e torni in Excel
Prova un po'...
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Ciao Mauro, grazie per la dritta che mi hai dato, funziona; così ho risolto
il problema dell'aggiornamento data, ma c'è un problema: le celle dove
vengono scritte le ore di straordinario sono "tre" (una per ogni reparto di
lavoro) ed ognuna ha associata una cella con la relativa data; cosa devo
aggiungere nel codice affinchè aggiorni la data nella cella quando vado a
variare il valore nella cella dello straordinario associata al reparto X.
Grazie, Bruno
Ancora mille grazie Mauro.
Ho risolto da solo vedendo cosa scriveva luna macro.
Ciao, Bruno
> Ciao Mauro, grazie per la dritta che mi hai dato, funziona; cosě ho
> risolto il problema dell'aggiornamento data, ma c'č un problema: le celle
> dove vengono scritte le ore di straordinario sono "tre" (una per ogni
> reparto di lavoro) ed ognuna ha associata una cella con la relativa data;
> cosa devo aggiungere nel codice affinchč aggiorni la data nella cella
> quando vado a variare il valore nella cella dello straordinario associata
> al reparto X.
> Grazie, Bruno
________________________
Scusa Mauro, pensavo di esser riuscito a risolvere, ma mi son sbagliato alla
grande. Puoi aiutarmi ?
Grazie, Bruno
"Bruno - S95" ha scritto:
>
> [CUT]
>
> > Ciao Mauro, grazie per la dritta che mi hai dato, funziona; così ho
> > risolto il problema dell'aggiornamento data, ma c'è un problema: le celle
> > dove vengono scritte le ore di straordinario sono "tre" (una per ogni
> > reparto di lavoro) ed ognuna ha associata una cella con la relativa data;
> > cosa devo aggiungere nel codice affinchè aggiorni la data nella cella
> > quando vado a variare il valore nella cella dello straordinario associata
> > al reparto X.
> > Grazie, Bruno
> ________________________
>
> Scusa Mauro, pensavo di esser riuscito a risolvere, ma mi son sbagliato alla
> grande. Puoi aiutarmi ?
>
> Grazie, Bruno
>
Ciao Bruno.
Mauro fino a domani non si vede: ha il weekend sacro.:-))
Comunque, quando si riceve un consiglio e non si è posta correttamente la
domanda, non sarebbe male tentare di capire cosa fa la routine proposta e
tentare di apportargli le variazioni necessarie.
Se ho capito bene, prova:
'data da aggiornare sullo stesso foglio -> su Foglio1
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then Range("A1").Value = Format(Now, "mm/dd/yyyy")
If Target.Column = 2 Then Range("B1").Value = Format(Now, "mm/dd/yyyy")
If Target.Column = 3 Then Range("C1").Value = Format(Now, "mm/dd/yyyy")
End Sub
e
'data da aggiornare su Foglio1 - Lavoro su Foglio2 -> su Foglio2
Private Sub Worksheet_Change(ByVal Target As Range)
With Worksheets("Foglio1")
If Target.Column = 1 Then .Range("A1").Value = Format(Now, "mm/dd/yyyy")
If Target.Column = 2 Then .Range("B1").Value = Format(Now, "mm/dd/yyyy")
If Target.Column = 3 Then .Range("C1").Value = Format(Now, "mm/dd/yyyy")
End With
End Sub
Sempre ammesso che abbia capito il problema; facci sapere.
Eliano
Ciao Eliano, grazie per il tuo aiuto.
Voglio precisare che ho provato a capire qualcosa e variare il codice di
Mauro e il tuo usando la condizione IF , ma senza riuscire nell'intento;
conosco a malapena il VBA, da me utilizzato in Access.
Il mio obiettivo è il seguente: se scrivo/modifico un valore nella cella
C19, far inserire la data in automatico in C16; se scrivo/modifico un valore
nella cella C26, far inserire la data in automatico in C23; se
scrivo/modifico un valore cella C33, far inserire la data in automatico in
C30. Il foglio è stato rinominato da Foglio1 a Straord_DEC.
Ho provato a risolvere anche con l'help, ma non ci ho capito molto perchè
non ho trovato un esempio per aiutarmi.
Grazie da Bruno
P.S. cerco di non essere una remora (il pesce).
Oltre al tuo codice, ho provato:
'Private Sub Worksheet_Change(ByVal Target As Range)
If Range.Select("C19") Then Range("C16").Value = Format(Now, "mm/dd/yyyy")
If Range.Select("C26") Then Range("C23").Value = Format(Now, "mm/dd/yyyy")
If Range.Select("C33") Then Range("C30").Value = Format(Now, "mm/dd/yyyy")
End Sub
'Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Select("C19") Then Range("C16").Value = Format(Now, "mm/dd/yyyy")
If Target.Select("C26") Then Range("C23").Value = Format(Now, "mm/dd/yyyy")
If Target.Select("C33") Then Range("C30").Value = Format(Now, "mm/dd/yyyy")
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("C19,C26,C33")
If Not Intersect(Target, rng) Is Nothing Then
Target.Offset(-3, 0).Value = Format(Now, "mm/dd/yyyy")
End If
Set rng = Nothing
End Sub
Grazie infinite Mauro.
Saluti, Bruno
Ciao Mauro, ho provato questa sub, ma nelle celle d'interesse non appare
nessuna data, come mai ?
Grazie, Bruno
Ma l'hai inserita nel modulo *del foglio*
dove vuoi il tuo giochino?
Ma non importa. Se va va, qui o lě.
E qui va.
Questo codice:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("C19,C26,C33")
If Not Intersect(Target, rng) Is Nothing Then
Target.Offset(-3, 0).Value = Format(Now, "mm/dd/yyyy")
End If
Set rng = Nothing
End Sub
Inserito nel modulo del Foglio1,
fa si che ad ogni *modifica* in C19(Foglio1),
si aggiorni la data in C16(Foglio1); per ogni modifica
in C26(Foglio1), si aggiorni la data in C23(Foglio1); per
ogni modifica in C33(Foglio1), si aggiorni
la data in C30(Foglio1).
Mauro, non funzia da me, sicuramente mi sfugge cualcosa, posso inviarti
questo foglio di calcolo ? Sono da verificare tre celle solamente. Tieni
conto che ho cambiato solo le celle dove scrivere la data, ovviamente anche
nel tuo codice.
Grazie, Bruno
Facciamolo qui, così chi sta seguendo il thread
non rimane escluso.
Versione di Excel?
Come hai modificato?
Posta il codice e posta(di nuovo),
cosa intendi fare con quel codice.
Grazie
STRAORD. EFFETTUATO / PREVISTO AL: 19/10/2007 PERIODO DAL 1° AL 28
OTTOBRE 2007
SQ COM
ORE DISPONIBILI (114): 114
ORE EFFETTUATE : 86 DATA PREVISTA PER LA CHIUSURA DEGLI
STRAORDINARI: 28/10/2007
ORE EFFETTUATE IN PIU' O IN MENO : - 28
Data di aggiornamento >>>>> C21 GIORNI RESTANTI ALLA DATA DI
CHIUSURA STRAORDINARI: 5
STRAORD. EFFETTUATO / PREVISTO AL: 19/10/2007
SQ OPZ
ORE DISPONIBILI (92): 107 MONTE ORE DISPONIBILE: 366
ORE EFFETTUATE : 73 TOTALE STRAORDINARIO EFFETTUATO: 271
ORE EFFETTUATE IN PIU' O IN MENO : - 34 ORE EFFETTUATE IN PIU' O IN
MENO: - 95
Data di aggiornamento >>>>> C30
STRAORD. EFFETTUATO / PREVISTO AL: 19/10/2007
SQTEC
ORE DISPONIBILI (160): 145
ORE EFFETTUATE : 112
ORE EFFETTUATE IN PIU' O IN MENO : - 33
Data di aggiornamento >>>>> C39
Il codice:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("C21,C30,C39")
Scusa Mauro, ho provato ad incollare parte del foglio, ma ne è scaturito un
macello, non penso sia molto chiaro, vedi così:
Ciao, Bruno
SQ COM
ORE DISPONIBILI (114): 114
ORE EFFETTUATE : da variare>>>> 86
ORE EFFETTUATE IN PIU' O IN MENO : - 28
Data di aggiornamento >>>>> C21
SQ OPZ
ORE DISPONIBILI (92): 107
ORE EFFETTUATE : da variare>>>> 73
ORE EFFETTUATE IN PIU' O IN MENO : - 34
Data di aggiornamento >>>>> C30
SQ TEC
ORE DISPONIBILI (160): 145
ORE EFFETTUATE : da variare>>>> 112
Modifica qui:
Set rng = Range("C19,C26,C33")
Dove i riferimenti delle celle fra virgolette
devono essere quelli delle celle dove *vai
a fare* le varazioni.
Mi sembra tu stia facendo la cosa contraria...
Dall'esempio che hai postato, dovrebbe essere
i riferimenti delle celle che contengono:
ORE EFFETTUATE : da variare
Poi controlla se lo scarto fra queste celle e quelle
che contengono la data è di -3, altrimenti
correggi il valore in questa riga:
Target.Offset(-3, 0).Value = Format(Now, "mm/dd/yyyy")
Dove -3 sta a significare 3 righe in alto, 0 stessa colonna.
Dai un'occhiatina alla proprietà: Offset
nella guida del vba di Excel
(è sufficiente tu metta il cursore del mouse su Offset
nel codice e poi prema il tasto F1).
Ancora mille grazie, Bruno
Bene
> L'unica cosa è che se proteggo il foglio con la cella bloccata per evitare
> di cancellare la data, alla modifica della cella interessata, la data non
> viene inserita nella cella perchè protetta e appare l'avviso di errore.
> Cercherò di aggiungere nel codice la sprotezione della cella per inserire
> la data e poi riprotegerla.
>
Worksheets("Foglio1").Unprotect "Pippo"
'
'Tuo codice
'
Worksheets("Foglio1").Protect "Pippo"
Mauro, ho provato e va tutto alla grande.
Ancora mille grazie,
Bruno
Mille prego! 8-)