Re Clik copia dati



  • Re Clik copia dati
    di BaroneRosso (utente non iscritto) data: 17/09/2013 16:24:58

    De chiedere un altro aiuto riguardo al copia dati con un clik, il codice suggeritomi da HarryBosch nel post del 16/09/2013 va bene solo che io ho fatto un errore, menzionando le celle del foglio dove vanno copiati i dati. Allego il codice suggeritomi da HarryBosch, e il file di esempio.
    I dati da copiare si trovano nel fogli elencoprezzi e si trovano dalla cella A alla cella D, quando si esegue il doppio clik i dati vanno copiati nel foglio Avanzamento lavori dalla cella C alla Cella E si deve saltare la cella F che deve restare vuota ed incollare l’ultimo valore nella cella G.

    Ho notato che con il doppio clik sulla cella per copia i dati la cella si attiva permettendo di scrivere dentro, e se sbadatamente si tocca un tasto si potrebbe modificare il testo. E' possibile evitare questo? Altrimenti attivare il copia dati con un pulsante. Grazie a tutti per l’aiuto.

     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Dim sh As Worksheet, lRiga As Long
        
        'controllo se ho cliccato lungo le colonne A:D, altrimenti esco senza far nulla
        If Intersect(Target, Range("A:D")) Is Nothing Then Exit Sub
        
            'se la cella cliccata non è vuota
            If Target.Value <> "" Then
                'Foglio dove copiare i dati
                Set sh = Sheets("Avanzamento Lavori")
                'determino l'ultima riga di questo foglio, in base alla colonna C
                lRiga = sh.Range("C" & Rows.Count).End(xlUp).Row + 1
                'copio la riga cliccata dalla cella A a F
                'nella prima riga vuota del foglio sopra indicato a partire dalla colonna C
                Range("A" & Target.Row & ":F" & Target.Row).Copy sh.Range("C" & lRiga)
            End If
    End Sub
    



  • di Vecchio Frac data: 17/09/2013 16:30:09

    Fai così: prima di End Sub metit un bel
    Cancel = True

    che così disabiliterà l'effetto doppio clic in cella impendeno l'edit.
    Questo non avrà effetto però sul tasto F2 che agirà come sempre (si può rimediare anche a questo però).
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        '
        ' tutto il codice della sub
        '
    ...
        Cancel = True
    End Sub





  • Re Clik copia dati
    di BaroneRosso (utente non iscritto) data: 17/09/2013 17:05:39

    Grazie Vecchio Frac ho risolto il problema della cella attiva con il clik, resta un altro problema da risolvere quando copio i dati dal foglio elencoprezzi al foglio avanzamento lavori i dati copiati si devono spostare di una cella come da esempio.



  • di gaetanopr (utente non iscritto) data: 17/09/2013 17:44:06

    Ciao, io non posso scaricare l'esempio però da quanto letto credo che in questo modo dovrebbe andare bene
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Dim sh As Worksheet, lRiga As Long
        
        'controllo se ho cliccato lungo le colonne A:D, altrimenti esco senza far nulla
        If Intersect(Target, Range("A:D")) Is Nothing Then Exit Sub
        
            'se la cella cliccata non è vuota
            If Target.Value <> "" Then
                'Foglio dove copiare i dati
                Set sh = Sheets("Avanzamento Lavori")
                'determino l'ultima riga di questo foglio, in base alla colonna C
                lRiga = sh.Range("C" & Rows.Count).End(xlUp).Row + 1
                'copio la riga cliccata dalla cella A a F
                'nella prima riga vuota del foglio sopra indicato a partire dalla colonna C
                Range("A" & Target.Row & ":C" & Target.Row).Copy sh.Range("C" & lRiga)
                Range("D" & Target.Row).Copy sh.Range("G" & lRiga)
            End If
    
           Cancel = True
    End Sub


  • Re Clik copia dati
    di BaroneRosso (utente non iscritto) data: 17/09/2013 19:45:11

    Grazie gaetanop Andiamo meglio adesso il valore viene copiato nella cella F e nella cella G mentre deve essere copiato solo nella gella G, mentre nella cella F non deve copiare alcun valore deve rimanere vuota, il valore deve essere inserito manualmente.



  • di gaetanopr data: 17/09/2013 19:49:54

    Ciao Baronerosso, lo stavo proprio provando adesso e nella colonna F non viene inserito nulla



  • di gaetanopr data: 17/09/2013 19:51:34

    La macro ricopiala tutta non soltanto la parte finale
    fai sapere altrimenti ti allego file


  • Clik copia dati
    di BaroneRosso (utente non iscritto) data: 17/09/2013 20:09:45

    Grazie gaetanopr adesso funziona tutto, io avevo copiato solo l'ultima parte, adesso sorge un altro problema che spero possa risolvere.
    I dati vengono copiati dal folio Elencoprezzi al foglio Avanzamento lavori tramite il doppio clik, il problema è il seguente nel foglio elenco prezzi devo inserire dei dati siccome con il doppio clik la cella si attiva e sbadata mente si possono inserire dei dati, per evita che la cella si attivi Vecchio Frac mi aveva proposto di inserire la segunte riga di codice Cancel = True.
    Solo che servirebbe del codice che mi permette di attivare l'iserimento dei dati e quando l'inserimeto dei dati è attivo dovrebbe disattivare il doppio clik che copia i dati.
    Spero che sia fattibile grazie ancora



  • di gaetanopr data: 17/09/2013 20:18:12

    Per inserire i dati puoi sempre posizionarti sopra la cella in questione e premere F2, così la macro non viene lanciata e puoi fare tutte le modifiche che vuoi.
    Oppure un altro sistema potrebbe essere quello di collegare la macro ad un pulsante invece che all'evento Double Clik.

    Ciao



  • di Vecchio Frac data: 17/09/2013 20:24:30

    Il punto è: come fa Excel a distinguere il doppio clic per sbadataggine dal doppio clic per l'inserimento voluto dei dati? ^_^ Certo, accrocchi ce ne possono essere... ma meglio prendere altre strade.
    1) non impedisci l'edit quindi accetti che possano esserci utenti distratti che attivano col doppio clic la modifica del dato. In questo caso devi procedere a convalidare il dato quando viene inserito.
    2) impedisci sia l'edit col doppio clic che l'edit diretto in cella (questo disabilita anche il tasto F2). In tale caso nessuno inserisce o modifica più niente :)
    3) utilizzi uno userform per l'inserimento, la modifica e la convalida del dato prima di inserirlo nel foglio. Certo, occorre programmare un intero userform di inserimento :)
    4) utlizzi uno userform solo per il caso di doppioclic in cella: in questo caso potresti prevedere un pulsante Annulla così l'utente distratto può tornare indietro senza timore i inserire dati errati.





  • di BaroneRosso (utente non iscritto) data: 17/09/2013 20:29:59

    Mi puoi spiegare come collegare la macro ad un pulsante, purtroppo non sono molto bravo, cerco di improvvisare e capire come funziona il codice, con la speranza che in futuro riesco a destreggiarmi meglio. Grazie



  • di gaetanopr data: 17/09/2013 20:39:04

    La macro potrebbe essere questa, copia la riga della cella attiva, si può aggiungere un msgbox che ci avvisa della copia e quindi puoi scegliere se effettuarla o meno
     
    Sub CopiaDati()
        Dim sh As Worksheet, sh1 As Worksheet, lRiga As Long
        
                Set sh = Sheets("Avanzamento Lavori")
                Set sh1 = Sheets("ElencoPrezzi")
               
                lRiga = sh.Range("C" & Rows.Count).End(xlUp).Row + 1
                With sh1
                   .Range("A" & ActiveCell.Row & ":C" & ActiveCell.Row).Copy sh.Range("C" & lRiga)
                   .Range("D" & ActiveCell.Row).Copy sh.Range("G" & lRiga)
                End With
    
           Set sh = Nothing
           Set sh1 = Nothing
    End Sub
    



  • di gaetanopr data: 17/09/2013 20:54:25

    Ti allego file, nel foglio elencoprezzi in alto a destra ho inserito il pulsante con la macro



  • di BaroneRosso (utente non iscritto) data: 17/09/2013 21:18:44

    Grazie gaetanopr ho inserito il pulsante e la msgbox con il messaggio sembra che funziona.