Condividi:        

Copiare valore cella in base alla data

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Copiare valore cella in base alla data

Postdi Alea » 15/12/11 14:21

Buon giorno a tutti,

ho la necessità di compilare una tabella in automatico (per non perdere dati per strada) per le scadenze delle fatture.
Dalla colonna A alla colonna I ho i dati che devo inserire manualmente. Dalla colonna J in poi ho un calendario mensile diviso per settimane. Il calendario è composto da 16 mesi in questo senso: devo avere Novembre e Dicembre dell'anno precedente e Gennaio e Febbraio dell'anno successivo. (Nov/Dic 2011 poi tutto l'anno 2012 e Gen/Feb 2013).
Quello che devo fare è copiare il valore (euro) della colonna I in base alla data scritta nella colonna H. Questo valore dovrebbe essere riportato nel mese e nella settimana interessata.

E' possibile gestire il tutto con una macro?.

Grazie mille per qualsiasi tipo di aiuto.

Allego l'immagine della tabella su cui sto lavorando.
Immagine

Uploaded with ImageShack.us
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Sponsor
 

Re: Copiare valore cella in base alla data

Postdi ricky53 » 16/12/11 15:16

Ciao,
si può fare anche con le formule.
L'immagine non è molto visibile, provo a vedere se ho capito.

A) se vuoi riportate il valore contenuto nelle varie celle, la cui settimana è la stessa della data allora
Codice: Seleziona tutto
=SE(NUM.SETTIMANA(H3) = M$2; I3; 0)
poi copi in basso e a destra

B)se vuoi avere la somma di tutti i valori la cui data è compresa nella settimana della colonna allora:
in una colonna di appoggio (Es. la "AA") scrivi
Codice: Seleziona tutto
=NUM.SETTIMANA(H3;1)
poi copi in basso.
nella cella J3 scrivi
Codice: Seleziona tutto
=SOMMA.SE($AA:$AA; M2;$I:$I  )
poi copi a destra
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare valore cella in base alla data

Postdi Alea » 19/12/11 08:57

Grazie ricky per la proposta.
faccio delle prove e poi ti faccio sapere :)
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valore cella in base alla data

Postdi Alea » 19/12/11 11:06

Ho provato la formula dell'opzione A. l'ho messa nella cella N5 ma non mi da il risultato desiderato.

provo ad allegare il file magari si riesce a capire meglio

grazie intanto

https://skydrive.live.com/redir.aspx?ci ... parid=root
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valore cella in base alla data

Postdi ricky53 » 19/12/11 14:40

Ciao,
al momento non posso scaricare il file (motivi di sicurezza), ci risentiamo questa sera.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare valore cella in base alla data

Postdi Alea » 21/12/11 08:12

Ciao Ricky
sei riuscito a scaricare il file?
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valore cella in base alla data

Postdi Flash30005 » 21/12/11 09:36

Usa
Uploading
o Megaupload Megaupload
come server host per i file da inviare

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Copiare valore cella in base alla data

Postdi Alea » 21/12/11 09:42

Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valore cella in base alla data

Postdi ricky53 » 21/12/11 12:42

Ciao,
scarico e ... più tardi ci risentiamo.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare valore cella in base alla data

Postdi Flash30005 » 22/12/11 03:53

Una macro che soddisfi quanto richiesto potrebbe essere questa
Codice: Seleziona tutto
Sub TrovaSett()
Dim nsett As Integer
Dim dtemp As Date
For RR = 3 To 70
Data = Range("H" & RR).Value
If Data <> "" Then
    If Asc(Mid(Data, 1, 1)) >= 48 And Asc(Mid(Data, 1, 1)) <= 57 Then
        nsett = 0
        For dtemp = DateSerial(Year(Data), "1", "1") To Data
            If Weekday(dtemp, vbSunday) = 7 Then
                nsett = nsett + 1
            End If
        Next dtemp
        AnnoS = Mid(Data, 9, 2)
        UC = Range("IV1").End(xlToLeft).Column
        Passo = 0
        For CC = 10 To UC
            AnnoT = Right(Cells(1, CC).Value, 2)
            If AnnoT <> "" Then
                If AnnoS = AnnoT Then
                    MCC = CC
                    If Passo = 0 Then
                        CIni = CC
                        Passo = 1
                        CEnd = CIni + 5
                    End If
                End If
                If Passo = 1 And AnnoS <> AnnoT Then
                    CEnd = MCC + 5
                    GoTo Salta
                End If
            End If
        Next CC
Salta:
        For CCD = CIni To CEnd
            Nst = Cells(2, CCD).Value
            If Nst = nsett Then
                Cells(RR, CCD).Value = Cells(RR, 9).Value
                GoTo saltaRR
            End If
        Next CCD
       
    End If
End If
saltaRR:
Next RR
End Sub


Comunque ho notato delle incongruenze nel foglio:
le date in Toal Fee (righe 64:67) hanno il numero settimana precedente a 44 previsto
pertanto non dovrebbero essere riportate nel sunto.
Inoltre il 2011 ha 53 settimane e non 52 come nella tabella-sunto

Questa macro al momento non cancella i precedenti valori ma se va bene, si può aggiungere una pulizia dell'area destinazione prima di avviare la macro (inserendo il codice all'inizio della macro stessa).

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Copiare valore cella in base alla data

Postdi Alea » 22/12/11 11:01

Ciao Flash
grazie per la macro. Ho provato ad inserirla nel mio file e ho notato che in parte fa quello che mi serve nel senso che fino alla riga 69 e fino a metà febbraio funziona.
Ho cercato di sistemare il file aggiungendo il calendario fino ad agosto (più avanti dovrò terminarlo arrivando fino a febbraio 2013) ed eliminando tutte le celle unite che ho trovato. (spesso danno problemi)
Ti allego il file aggiornato.
http://www.megaupload.com/?d=SH61P2X0

Se gentilmente puoi dare un'occhiata e vedere se magari si riesce a capire dove sta il problema te ne sarei grato.
Alcune domande per capire meglio:
- nella colonna H delle date, queste devono avere una formattazione particolare?
- stessa domanda per la colonna I dell'importo
- per capire in che colonna/settimana copiare la tua macro fa riferimento al numero che c'è scritto nella riga 2? In che formato deve essere scritto questo numero?
- serve a qualcosa la scritta nella riga 1 del mese: posso definirla come voglio?

Molto probabilmente sarebbe comodo poter gestire la "pulizia" dell'area destinazione: ora non so cosa potrebbe essere più comodo se cancellare l'importo quando nella colonna H non c'è più una data o se magari fare in modo che cambi colore. (adesso pensavo di inserire una colonna tra G e H per poter scrivere magari una "p" di "pagato" per far si che l'importo resto e che diventi rosso se c'è questa "p"). Per questa cosa chiedo alla segretaria e ti faccio sapere.(se serve urgentemente prima di modificare tutto riesco a chiedere nel pomeriggio).

Grazie infinite intanto.
Ivan
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valore cella in base alla data

Postdi Flash30005 » 22/12/11 14:25

La macro precedente si fermava all'ultima riga visibile la n. 70
ora questa con una riga codice calcola le righe effettive (piene) in colonna H e scarta tutto ciò che non è una data
Codice: Seleziona tutto
Sub TrovaSett()
Dim nsett As Integer
Dim dtemp As Date
UR = Range("H" & Rows.Count).End(xlUp).Row
For RR = 3 To UR
If RR = 154 Then MsgBox RR
Data = Range("H" & RR).Value
If Data <> "" Then
    If Asc(Mid(Data, 1, 1)) >= 48 And Asc(Mid(Data, 1, 1)) <= 57 Then
        nsett = 0
        For dtemp = DateSerial(Year(Data), "1", "1") To Data
            If Weekday(dtemp, vbSunday) = 7 Then
                nsett = nsett + 1
            End If
        Next dtemp
        AnnoS = Right(Data, 2)
        UC = Range("IV1").End(xlToLeft).Column
        Passo = 0
        For CC = 10 To UC
            AnnoT = Right(Cells(1, CC).Value, 2)
            If AnnoT <> "" Then
                If AnnoS = AnnoT Then
                    MCC = CC
                    If Passo = 0 Then
                        CIni = CC
                        Passo = 1
                    End If
                    If Passo = 1 Then CEnd = MCC + 5
                End If
            End If
        Next CC
Salta:
        For CCD = CIni To CEnd
            Nst = Cells(2, CCD).Value
            If Nst = nsett Then
                Cells(RR, 9).Copy Destination:=Cells(RR, CCD)
                GoTo saltaRR
            End If
        Next CCD
       
    End If
End If
saltaRR:
Next RR
End Sub


Rispondo alle tue domande
1) nella colonna H puoi mettere qualsiasi formattazione di data purché sia una data in formato gg/mm/aaaa (o g/m/aa)
2) qualsiasi formato utilizzi come importo in colonna I lo ritroverai bella tabella-sunto
3) la settimana della data in colonna H viene calcolata e la ricerca viene effettuata prima per l'anno nella riga 1, poi per settimana riga 2.
4) il mese nella riga 1 può essere inserito come vuoi purché ci sia anche l'anno finale altrimenti non è possibile riconoscere se la settimana es.: 48 è del 2011 o 2012 oppure se la settimana 2 è del 2012 o 2013.
5) per la "pulizia" è opportuna agire per range purché questi non vengano cambiati con aumento di righe es. se la prima tabella arriva alla riga 50 dovrà essere così per sempre (magari prevedere più righe sin dall'inizio al fine di non doverle aumentare perché ciò sposta le successive tabelle in basso e il range definito all'inizio cancellerebbe anche le formule)
Aggiungere colonne significa modificare il range di scansione della tabella-sunto è bene saperlo sin dall'inizio.

Ciao

EDIT: 15:00 - Ho notato che hai un problema nel calcolo e assegnazione delle settimane per mese in quanto variabile
es.:il 31/03/2012 è sabato e appartiene alla 13ª settimana cadente in marzo (riga 40)
tu, invece, assegni questa settimana ad Aprile)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Copiare valore cella in base alla data

Postdi Alea » 22/12/11 15:06

Grazie mille Flash per le delucidazioni sui miei quesiti...ho quasi capito tutto :)
Ho provato la macro e ho notato che alla fine dell'esecuzione mi compare un messaggio con un numero..... domanda: cos'è?
Un'altra cosa, se si può fare, è evitare che copi la formattazione della cella (bordi). Si può fare in modo che copi solo il valore?
Delucidazioni sul tuo punto 4: se ho capito bene posso creare nella mia tabella-sunto un calendario fatto così:
Nov 2011 /Dic 2011 /tutto 2012/Gen 2013 /Feb 2013
Visto che dovrò utilizzare questo foglio anche per l'anno successivo posso tranquillamente aggiornare l'anno?
Nov 2012 /Dic 2012 /tutto 2013/Gen 2014 /Feb 2014

Per quanto riguarda la pulizia ho chiesto delucidazioni alla segretaria. Vorrebbe semplicemente che gli importi copiati vengano cancellati dalla tabella-sunto nel momento in cui nella colonna H non ci sia più una data.(scritta "pagato" per intenderci).
Quello che ti volevo chiedere, se è possibile, è di poter fare questa macro magari aggiungendomi una stringa di testo con specificato il range che utilizzi per cancellare le 4 tabelle che compongono il foglio così che (visto che purtroppo questa tabella non è definitiva e dovrò aggiungere altre tabelle) io possa poi intervenire per cambiarlo (diminuirlo o aumentarlo). Mi faresti un grandissimo favore.

Grazie e ciao
Ivan
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valore cella in base alla data

Postdi Anthony47 » 22/12/11 15:43

Ora che hai una soluzione basata su macro ti propongo una soluzione basata su formule; ho lavorato sul file che hai pubblicato ieri:
1-Togli tutte le formattazioni dalla colonna J in avanti (colori, celle unite, bordi), e l' unione celle di colonne A:I
2- Aggiungi prima della colonna J una nuova colonna vuota, che sara' usata per caricarci la data di pagamento; ritengo che questa soluzione sia meglio che scrivere Pagato in colonna H, ad esempio dal punto di vista della tracciabilita' degli eventi.
2-in K2 (la vecchia J2) metti la settimana iniziale da cui vuoi partire, es 45
3-in I1 metti l' anno di riferimento del calendario che vuoi preparare; nel nostro caso sara' 2012
4- in K1 usi la formula
Codice: Seleziona tutto
=DATA($I$1-1;1;1)+(J2-1)*7-GIORNO.SETTIMANA(DATA($I$1-1;1;1);3)
Formatta come gg-mmm-aa per avere la data di inizio della settimana indicata in J2
5- in L1 e L2 metti rispettivamente le formule
Codice: Seleziona tutto
=K1+7

=SE(ANNO(L1)=ANNO(K1);K2+1;1)

6- Copia L1:L2 e incolla verso destra fino a CB1, o anche oltre
7- Vai in K3 e imposta la formula
Codice: Seleziona tutto
=SE(E($H3>=K$1;$H3<L$1;$J3="");$I3;"")

8- Copia K3 verso destra
9- Copia K3:CB3 e incolla verso il basso

A questo punto i dati dovrebbero gia' essere disttribuiti sul tu foglio; possiamo applicare una formattazione condizionale alle intestazioni per migliorarne la visibilita':
10-Seleziona l' area K1:CB2 e applica una formattazione condizionale, con la clausola "la formula è", con la formula =RESTO(MESE(J$1);2)=1 e col formato (tab Motivo) su colore verde; Ok, Ok.
11- Sulla stessa area K1:CB2 applica una formattazione con lo sfondo color Giallo. In questo modo i mesi dispari saranno visualizzati in un colore e quelli pari con un altro.

A questo punto potrai formattare il resto del foglio con i colori e i bordi che preferisci.

Operativamente:
-imposti in I1 l' anno (successivo) che vuoi prendere in gestione
-imposti in K2 la settimana di partenza (dell' anno precedente a quanto precisato in I1)
- Sul foglio vengono calcolate le date di appartenenza di ogni settimana e, in funzione di queste date, vengono spalmati i valori di colonna I, se col J e' vuota.
-quando avviene un pagamento questo deve essere registrato in col J, senza necessariamente alterare la col H.
-volendo puoi applicare ai dati di K3:CBxx una formattazione condizionale per indicare in verde gli ammontare gia' pagati:
--selezioni K3:CBnn, imposti la formattazione condizionale con "la formula è", come formula usi =$J3<>"", come formato: tab Carattere, imposti il colore verde; Ok, Ok.

Per questi calcoli ho definito che la settimana 1 sia quella che comincia col primo lunedi' dell' anno; quindi nel 2012 la settimana 1 comincera' il 2 gennaio.

Vedi tu che uso farne...
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare valore cella in base alla data

Postdi Alea » 22/12/11 16:57

Ciao Anthony
ho provato la tua soluzione e mi sembra molto buona
Solo che ho fatto un pò di confusione per quanto riguarda cosa mettere nelle celle J2 e K2. Forse nella prima formula [code]=DATA($I$1-1;1;1)+(J2-1)*7-GIORNO.SETTIMANA(DATA($I$1-1;1;1);3)[code]
invece che J2 dovevo mettere K2?

facendo questa modifica scrive gli importi però mi sballa nella riga 2
Immagine
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valore cella in base alla data

Postdi Flash30005 » 22/12/11 21:29

Il messaggio che appare mi è servito per testare una data lo puoi eliminare cancellando questa riga:
Codice: Seleziona tutto
For RR = 3 To UR            '<<<<< esistente da lasciare
If RR = 154 Then MsgBox RR    '<<<<< Eliminare questa riga
Data = Range("H" & RR).Value  '<<<<< esistente da lasciare


Nella parte inferiore della macro troverai questo codice
Codice: Seleziona tutto
        For CCD = CIni To CEnd  '<<<<<<<<<<< esistente non modificare
            Nst = Cells(2, CCD).Value '<<<<<<<<<<< esistente non modificare
            If Nst = nsett Then  '<<<<<<<<<<< esistente non modificare
                'Cells(RR, 9).Copy Destination:=Cells(RR, CCD)  '<<<<<<<<<<< esistente da sostituire

Con Questa
Codice: Seleziona tutto
Cells(RR, CCD).Value = Cells(RR, 9).Value


La riga codice che non prendeva la formattazione era già stata realizzata ma nel post precedente avevi chiesto se se potevi usare qualsiasi formato importo e quindi ho modificato la riga che copiava anche il formato.

Comunque ora ho realizzato il calendario con formattazione della testata

Invio la macro che viene attivata dal codice che posterò più in basso


Codice: Seleziona tutto
Sub Calendario()
AnnoAtt = Val(Right(Range("J1").Value, 4))
AnnoI = Val(Left(Right(ThisWorkbook.Name, 8), 4))
If AnnoAtt <> AnnoI Then
Application.ScreenUpdating = False
Application.Calculation = xlManual
Range("J1:CA2").Interior.ColorIndex = xlNone
Range("J1:CA1").UnMerge
AnnoF = AnnoI + 2
MeseI = 11
MeseF = 2
DataI = DateSerial(AnnoI, MeseI, 1)
DataF = DateSerial(AnnoF, MeseF, 29)
ColI = 10
M_Sett = 0
M_Anno = 0
M_Mese = 0
ColMI = 10
ColMF = 10
Colore1 = 35
ColoreM = 0
For CCD = DataI To DataF
        nsett = 0
        For dtemp = DateSerial(Year(CCD), "1", "1") To CCD
            If Weekday(dtemp, vbSunday) = 7 Then
                nsett = nsett + 1
            End If
        Next dtemp
        If M_Mese <> Month(CCD) Then
            ColMI = ColI
            If ColMF <> ColMI Then
                If Colore1 = ColoreM Then
                    ColoreM = 40
                Else
                    ColoreM = 35
                End If
               
                MeseA = UCase(Format(DateSerial(M_Anno, M_Mese, 1), "mmmm yyyy"))
                Sc = 1
                If CCD = DataF Then Sc = 0
                Range(Cells(1, ColMF), Cells(2, ColMI - Sc)).Interior.ColorIndex = ColoreM
                Range(Cells(1, ColMF), Cells(1, ColMI - Sc)).Merge
                Range(Cells(1, ColMF), Cells(1, ColMI - Sc)).FormulaR1C1 = MeseA
                Range(Cells(1, ColMF), Cells(1, ColMI - Sc)).HorizontalAlignment = xlCenter
                Range(Cells(1, ColMF), Cells(2, ColMI - Sc)).Select
                Call Formatta
                ColMF = ColMI
            End If
            M_Mese = Month(CCD)
        End If
       
        If nsett <> 0 Then
        If M_Sett <> nsett Then
        Cells(2, ColI).Value = nsett
        ColI = ColI + 1
        M_Sett = nsett
        End If
        End If

       
M_Anno = Year(CCD)

Next CCD
Sheets("Liquidità" & AnnoAtt).Name = "Liquidità" & AnnoI
Range("J1").Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End If
End Sub


Aggiungerai anche questa macro di formattazione della testata
Codice: Seleziona tutto
Sub Formatta()
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        '.LineStyle = xlContinuous
        .Weight = xlThin
        '.ColorIndex = xlAutomatic
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        '.LineStyle = xlContinuous
        .Weight = xlThin
        '.ColorIndex = xlAutomatic
    End With

End Sub


Il tutto viene attivato da questo codice da inserire nel Vba di Thisworkbook e si attiverà all'apertura del file
Codice: Seleziona tutto
Private Sub Workbook_Open()
Call Calendario
End Sub


Aggiungo anche la macro degli importi modificata
Codice: Seleziona tutto
Sub TrovaSett()
Dim nsett As Integer
Dim dtemp As Date
UR = Range("H" & Rows.Count).End(xlUp).Row
UC = Range("IV1").End(xlToLeft).Column
For RR = 3 To UR
Data = Range("H" & RR).Value
If Data <> "" Then
If Asc(Mid(Data, 1, 1)) >= 48 And Asc(Mid(Data, 1, 1)) <= 57 Then
        nsett = 0
        For dtemp = DateSerial(Year(Data), "1", "1") To Data
            If Weekday(dtemp, vbSunday) = 7 Then
                nsett = nsett + 1
            End If
        Next dtemp
        AnnoS = Right(Data, 2)
        Passo = 0
        For CC = 10 To UC
            AnnoT = Right(Cells(1, CC).Value, 2)
            If AnnoT <> "" Then
                If AnnoS = AnnoT Then
                    MCC = CC
                    If Passo = 0 Then
                        CIni = CC
                        Passo = 1
                    End If
                    If Passo = 1 Then CEnd = MCC + 5
                End If
            End If
        Next CC
Salta:
        For CCD = CIni To CEnd
            Nst = Cells(2, CCD).Value
            If Nst = nsett Then
                Cells(RR, CCD).Value = Cells(RR, 9).Value
                GoTo saltaRR
            End If
        Next CCD
    End If
End If
Range(Cells(RR, 10), Cells(RR, UC + 5)).ClearContents
saltaRR:
Next RR
End Sub


Per attivare la macro TrovaSett in automatico inserisci questo codice nel Vba del foglio
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
CheckArea = "H3:I500"
If Application.Intersect(Target, Range(CheckArea)) Is Nothing Then Exit Sub
Call TrovaSett
End Sub


Ora salvi il file
se cambi anno al nome del file chiamandolo Liquidità2012
avrai il nuovo calendario
e modificando una data o un importo avrai automaticamente quel valore riportato nella tabella-sunto

Allego, comunque questo file

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Copiare valore cella in base alla data

Postdi Anthony47 » 22/12/11 22:28

Ho sbagliato a darti la formula per K1; come intuito dovevi usare K2 invece di J2, quindi
Codice: Seleziona tutto
=DATA($I$1-1;1;1)+(K2-1)*7-GIORNO.SETTIMANA(DATA($I$1-1;1;1);3)

(e' che avevo scritto la risposta prima di aggiungere la colonna, quella formula e' rimasta legata al vecchio tracciato)
La riga 2, da col K in avanti, va lasciata "Generale", al massimo la formatti come numero senza decimali; infatti contiene il numero di settimana.

Sempre che ti interessi la soluzione formula, mentre Flash ti ha passato un file (vedi sopra) il file con le macro aggiornate.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare valore cella in base alla data

Postdi Alea » 23/12/11 08:38

Buon giorno Anthony e grazie per l'aggiornamento
Purtroppo però mi sto "incriccando" lo stesso. Ti allego il file:
http://www.megaupload.com/?d=IRKFUO1P
Quello che non mi torna è il contenuto della riga 2: non mi torna il conto del numero della settimana.
Ad es. la settimana nr 46 parte con lunedì 14 Novembre e invece mi scrive lunedì 7 novembre.
E poi anche il fatto della formattazione del colore del testo per mese è sfasato anch'esso di una settimana.

Non è che puoi controllare queste due incongruenze?

Grazie mille
Ivan
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valore cella in base alla data

Postdi Alea » 23/12/11 09:13

Buon giorno anche a Flash
appena ritornerò dalle festività proverò ad usare e testare le tue macro.
Sta mattina si va con l'ufficio a festeggiare :) e quindi non ho molto tempo.

Nel frattempo ti ringrazio infinitamente per tutto e soprattutto

Auguro a te, a Anthony e a tutto il forum un Felice Natale.

Ciao Ivan
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valore cella in base alla data

Postdi Anthony47 » 23/12/11 14:13

Come avevo detto, "Per questi calcoli ho definito che la settimana 1 sia quella che comincia col primo lunedi' dell' anno; quindi nel 2012 la settimana 1 comincera' il 2 gennaio" Dimmi quale e' invece la tua descrizione cosi' modifichiamo le formule.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Copiare valore cella in base alla data":

BTp Valore
Autore: MarioLombardi
Forum: Forum off-topic
Risposte: 2

Chi c’è in linea

Visitano il forum: Nessuno e 33 ospiti