Creazione Macro inserimento data



  • Creazione Macro inserimento data
    di ITFabio (utente non iscritto) data: 04/08/2015 16:25:00

    Buongiorno,

    ho un foglio di excel dove vorrei avere una macro che se io inserisco un valore nella cella A1 nella cella C1 venga inserita la data. Sono riuscito a fare questa prima parte, tuttavia come faccio a replicarla in modo automatico per tutte le celle della colonna A sulle rispettive celle della colonna C?

    Grazie in anticipo
    Fabio
     
    Sub NUMDate()
    
    If Range("A4") <> "" Then
        If Range("C4") = "" Then
            Range("C4") = Now()
        Else
            MsgBox "c'è già la data" 'msg momentaneo per test
        End If
    Else
        MsgBox "inserire valore" 'msg momentaneo per test
    End If
    
    End Sub
    
    Parte non Funzionante:
    in Workbook
    Sub Workbook_Open()
    
        ChangeRange
        
    End Sub
    
    in Worksheet
    Sub Worksheet_Change(ByVal Target As Range)
    
        If Change <> Range("A4:A50") Then NUMDate
        
        ChangeRange
        
    End Sub
    
    In Modulo1
    Public Change
    Sub ChangeRange()
    
        If Change = "" Then Change = 0
        
        Change = Range("A4:A50")
        
    End Sub



  • di alfrimpa data: 04/08/2015 16:32:44

    Ciao Fabio

    Non so se ho capito bene ma prova con questa macro qui sotto da inserire nel modulo del foglio interessato.

    Alfredo
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Target.Offset(0,2).Value = Date
    End If
    End Sub
    






  • di ITFabio (utente non iscritto) data: 04/08/2015 16:52:39

    Ciao Alfredo,

    Grazie mille funziona ed è molto più semplice di quello che stavo facendo io, purtroppo io mi sono arrangiato con quello che ho trovato su internet :)

    ti chiedo un paio di cose se sei così gentile da dedicarmi ancora 5 minuti:
    Target, Range("A:A") con questo selezione la colonna A (ma perchè metti la negazione all'inizio?) e con questo Target.Offset(0,2) invece lasci la riga invariata e ti sposti di due colonne giusto? quindi se la colonna fosse la D dovrei mettere 0,3?

    Ho provato è c'è un piccolo problema che se la cella è vuota lui mette la data e va bene ma lo fa anche se io modifico la cella mentre invece vorrei che non lo facesse cioè che una volta inserita non me la cambi più posso fare così quindi penso dovrei mettere un if annidato che veda se la cella di destinazione è vuota mette la data altrimenti no. Come faccio a dirglielo? Potrebbe andare come ho scritto?


     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
    	If target.offset (0,2) = "" then
    		Target.Offset(0,2).Value = Date
    	End If
    End If
    End Sub



  • di alfrimpa data: 04/08/2015 17:02:04

    Ciao Fabio

    Ora sono da cell e non posso dilungarmi; lo farò sicuramente più tardi o domani.

    Offset è lo scarto ed i parametri sono riga e colonna quindi se scrivo 0, 3 è la colonna D

    Ma la macro modificata l'hai provata?

    Per il resto ci risentiamo.

    Alfredo





  • di ITFabio (utente non iscritto) data: 04/08/2015 17:06:38

    Si tranquillo mi hai già aiutato un sacco, si l'ho provata ho ancora un piccolo problema perchè se cancello una cella della colonna A mi aggiorna la data ma ora vedo di cambiare la condizione e dovrebbe andare a posto.

    Se hai voglia e tempo anche domani ovviamente di spiegarmi brevemente If Not Intersect(Target, Range("A:A")) Is Nothing Then questa riga mi fai un favore.

    Grazie mille e a presto!!!!
    Fabio



  • di alfrimpa data: 04/08/2015 18:03:29

    Ciao Fabio

    Il metodo Intersect verifica se c'è un'intersezione (ossia una o più celle in comune) tra due intervalli.

    I due intervalli sono specificati dai due parametri del metodo cioè Target (che è la celle/e su cui si agisce) e Range (che è la zona da noi specificata.

    Se Intersect restituisce Nothing vuol dire che questa intersezione non c'è; diversamente viene eseguito il codice successivo.

    L'istruzione If Not Intersect(Target, range("a1:a10")) Is Nothing Then in italiano vuole dire

    se il target ricade all'interno dell'intervallo specificato mi esegui il codice (due negazioni affermano).

    Spero di essere stato chiaro.

    Comunque per ulteriori approfondimenti dai uno sguardo a questo link

    h t t p://ennius.altervista.org/vba/vba13.php

    Alfredo





  • di Raffaele_53 data: 04/08/2015 18:06:13

    Not serve a dire che se non è in colonna A = non intervenire
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        If Target.Offset(0, 2).Value = "" Then
            Target.Offset(0, 2).Value = Date 'Target.Offset(0, 3) per colonna D
        End If
    End If
    End Sub



  • di alfrimpa data: 04/08/2015 18:09:59

    Ciao Raffaele

    Io l'avevo interpretata così

    Se il risultato restituito da Intersect non è nullo allora esegui il codice.

    Non so se è corretto.

    Alfredo





  • di Vecchio Frac data: 04/08/2015 18:20:48

    Mi permetto, nel mio piccolo, di dare ragione ad alfrimpa per la parte della spiegazione tecnica ^_^
    Raffaele ci offre una visione pragmatica di quello che fa il codice proposto.






  • di Raffaele_53 data: 04/08/2015 18:37:48

    Non sò se "pragmatica" sia una brutta parola. Non credo...
    Prova a togliere il NOT e vedi cosa succede? 
    Personalmente preferisco Now = data + orario
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        If Target.Offset(0, 2).Value = "" Then
            Target.Offset(0, 2).Value = Now 'Target.Offset(0, 3) per colonna D
        End If
    End If
    Application.EnableEvents = True
    End Sub



  • di Raffaele_53 data: 04/08/2015 19:00:45

    Qui nasce un problema "descritto da alfrimpa in area51"

    L'utente che NON conosce queste "cose", fà dei copia/incolla.
    Il Sub Worksheet_Change và in errore e non ripristina il Application.EnableEvents = True



  • di alfrimpa data: 04/08/2015 19:10:25

    Ciao Raffaele

    Ed inoltre ci sarebbe da gestire anche le cancellazioni di una o più celle con

    If Target.Cells.Count > 1 Then Exit Sub e

    If Target.Value = "" Then Exit Sub

    Senza le quali il codice andrebbe in debug.

    Perdonami la disabilitazione degli eventi è stata una mia dimenticanza.

    Alfredo





  • di Raffaele_53 data: 04/08/2015 19:20:58

    >>>Ed inoltre ci sarebbe da gestire anche le cancellazioni di una o più celle con
    dal copia/incolla

    Credo si possa in caso d'errore, chiudere il file "senza salvarlo.
    Non credo sia valido però (dopo qualche ora di lavoro)?



  • di Vecchio Frac data: 04/08/2015 21:55:38

    cit. "Non sò se "pragmatica" sia una brutta parola. Non credo... "
    ---> E certo che no: significa che è una soluzione "pratica".