copiare date

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
gianluca.mancini
00mercoledì 2 marzo 2016 00:52
Salve a tutti mi sono avventurato da poco nell'utilizzo di Excel e per quanto stia facendo passi da gigante nell'apprendimento mi sono arenato in un problema che spero qualcuno di voi possa risolvermi.

Ho la necessità di trovare una formula che come si può vedere nel foglio mi copi la data che io scrivo nella cella B2 nella cella D2.
La classica formula D2=B2 non mi basta però perchè mi occorre è che quando io cancello la data da B2 mi rimanga quello che ho scritto in D2 e che quando io ne scrivo un'altra nella cella di origine (ossia in B2) ,se D2 è occupata me la scriva in e2 e così via.
Spero di essere stato chiaro e di non creare troppo disturbo.

Grazie in anticipo
raffaele1953
00mercoledì 2 marzo 2016 01:47
Apri il foglio, premi ALT + F11 e incolla sulla destra.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
    If Not Intersect(Target, Range("B:B")) Is Nothing Then
        Dim Col, Rig
        Rig = Target.Row
        Col = Cells(Rig, Columns.Count).End(xlToLeft).Column + 1
        If Col < 4 Then Col = 4
        If Target.Offset(0, 0) <> "" Then
            If IsDate(Target.Offset(0, 0)) Then
                Cells(Rig, Col) = Target.Offset(0, 0).Value
            Else
                MsgBox " Data non valida"
            End If
        End If
    End If
Application.EnableEvents = True
End Sub
gianluca.mancini
00giovedì 3 marzo 2016 05:56
re:copiare date
Grazie mille raffaele1953,scusa il ritardo,
Avrei solo un ultima cosa da chiederti,
se volessi far partire questa macro in automatico senza che mi chieda ogni volta di abilitarla?
Motivo: essendo un computer aziendale ho tanti colleghi messi peggio di me con excel che utilizzerebbero il file e non vorrei che si dimenticassero di attivarla,sarebbe una catastrofe.
dodo47
00giovedì 3 marzo 2016 09:32
Ciao
la macro sottoposta da Raffaele che saluto, va inserita nel vba del foglio1 e non in un modulo qualsiasi, altrimenti l'evento non viene eseguito.

Ciò premesso, per forzare l'attivazione delle macro, puoi usare un piccolo stratagemma: Aggiungi al tuo documento un foglio (es: START) dove scrivi che per utilizzare il documento bisogna attivare le macro.
Tale foglio lo rendi visibile (nascondendo tutti i fogli di lavoro) se l'utente non attiva le macro, altrimenti lo nascondi rendendo visibili tutti i fogli di lavoro.

Nell'allegato trovi un esempio. Prova alternativamente ad attivare o disattivare le macro.

saluti
raffaele1953
00giovedì 3 marzo 2016 22:20
Ciao dodo47 (come saprai il Worksheet_Change...)

>>>Apri il foglio, premi ALT + F11 e incolla sulla destra
OK
>>>attivarla
Una volta inserita è già attiva, salvato come xls,xlsm
Vedi che il codice parte automancamente, ogni volta che scrivi in B.

Con tanti utenti, sei forse in un server?
gianluca.mancini
00giovedì 3 marzo 2016 22:42
Grazie Dodo ho seguito il tuo consiglio. Ho fatto una bella copertina su start per rendere il tutto più carino esteticamente [SM=x423029]

Raffaele il tuo aiuto è stato preziosissimo infatti funziona tutto alla perfezione. L'unico problema era appunto l'attivazione manuale della macro perché purtroppo ad ogni modifica del file ci hanno richiesto di farne una copia in modo da avere un backup in caso di incidenti. E dato che sono già avvenuti in passato non gli do tutti i torti [SM=x423026]
Comunque ho visto che usando sempre lo stesso file una volta attivata non lo richiede più successivamente.
theycanonlydoharm
00giovedì 3 marzo 2016 22:42
Grande!!
Grazie mille, era proprio quello che cercavo anch'io
gianluca.mancini
00lunedì 7 marzo 2016 23:02
ordinare date
ciao a tutti,
mi è venuta in mente una miglioria da fare al mio elenco però mi sono arenato nuovamente...
Ho la necessità che la data più vecchia che scrivo nella colonna B mi risulti in automatico sempre in cima (e fin qui sono riuscito a farlo).
Quello che non sono riuscito a fare è:
-portare in cima assieme alla data TUTTA la riga corrispondente.
-fare la stessa cosa nel Foglio 2.

Ringrazio tutti in anticipo e spero di essere stato chiaro
gianluca.mancini
00martedì 8 marzo 2016 05:21
ordinare date
Questa è la mia macro (purtroppo non mi fa caricare il foglio excel)
L'unica che sono riuscito a far funzionare...
Vorrei che tutta la riga dalla 4 alla 24 andasse in cima non solo la B4:B24 ma non riesco a fare una sintassi giusta.

Inoltre sempre per gli stessi motivi non riesco ad applicare la stessa regola al foglio 2 ("2°PIANO").

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Worksheets("1°PIANO").Range("B4:B24").Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End Sub
raffaele1953
00martedì 8 marzo 2016 05:48
Non fare duplicati di post uguali

Credo che la DATA dopo la colonna T, non possa andarci.
Pertanto elimino la prima DATA in colonna D
Da provare.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
    If Not Intersect(Target, Range("B:B")) Is Nothing Then
        Dim Col, Rig
        Rig = Target.Row
        Col = Cells(Rig, Columns.Count).End(xlToLeft).Column
        If Col < 4 Then Col = 4
        MsgBox "s"
        If Target.Offset(0, 0) <> "" Then
            If IsDate(Target.Offset(0, 0)) Then
                If Col < 20 And Rig = 2 Then
                    Cells(Rig, Col + 1) = Target.Offset(0, 0).Value
                ElseIf Col = 20 And Rig = 2 Then
                    Range(Cells(Rig, 5), Cells(Rig, 20)).Copy
                    Range("D2").PasteSpecial
                    Cells(2, 20) = Target.Offset(0, 0).Value
                ElseIf Col = 20 And Rig <> 2 Then
                    Range(Cells(Rig, 1), Cells(Rig, 20)).Cut
                    Range("A2").Insert Shift:=xlDown
                    Range(Cells(2, 5), Cells(2, 20)).Copy
                    Range("D2").PasteSpecial
                    Cells(2, Col) = Target.Offset(0, 0).Value
                ElseIf Col < 20 And Rig <> 2 Then
                    Range(Cells(Rig, 1), Cells(Rig, 20)).Cut
                    Range("A2").Insert Shift:=xlDown
                    Cells(2, Col + 1) = Target.Offset(0, 0).Value
                End If
            Else
                MsgBox " Data non valida"
            End If
        End If
    End If
Application.CutCopyMode = False
Application.EnableEvents = True
End Sub
gianluca.mancini
00martedì 8 marzo 2016 10:06
Grazie Raffaele ho provato a inserirla ma purtroppo non va,crea conflitto e non fa partire nemmeno la macro precedente che mi hai scritto.
Invece vedo che è compatibile quella che ho postato prima ad eccezione che ordina solo la colonna B e non l'intera riga.

gianluca.mancini
00martedì 8 marzo 2016 10:26
Ok ho trovato la soluzione e funziona.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Worksheets("1°PIANO").Range("B4:B24", "4:24").Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End Sub

Solo che ora non riesco a far la stessa cosa nel foglio2 ("2°PIANO).
Se scrivo Worksheets("1°PIANO", "2°PIANO")mi da errore su Worksheets dove sbaglio?
raffaele1953
00martedì 8 marzo 2016 12:28
Quel codice andava al posto del precedente.
Sempre lo stesso codice va inserito nel foglio stesso >>>Apri il foglio esatto, premi ALT + F11 e incolla sulla destra
Se lo metti in altro foglio non funziona su quello che desideri

EDIT in poche parole, in ogni foglio può esserci uno solo Worksheet_Change, comunque lo puoi mettere per ogni foglio.
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 08:05.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com