Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Aggiornare valori senza cancellare esistenti

Ultimo Aggiornamento: 29/05/2019 10:43
Post: 271
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
27/05/2019 14:49

Buongiorno,
vorrei che lanciando questo script i valori venissero aggiornati ma senza cancellare quelli già presenti:
Sub copia2() 
Dim i, j, ultimariga As Long                  
ultimariga = Range("b65536").End(xlUp).Row         
j = 1         
    For i = 1 To ultimariga         
    If Range("b" & i) <> "" Then         
    Sheets(2).Range("a" & j) = Range("b" & i)
    Sheets(2).Range("b" & j) = Range("c" & i)  
    Sheets(2).Range("c" & j) = Range("e" & i)
    Sheets(2).Range("d" & j) = Range("f" & i)  
    Sheets(2).Range("e" & j) = Range("l" & i) 
j = j + 1
    End If
Next i 
End Sub


Grazie per l'aiuto

PS Vorrei anche che la macro partisse in automatico quando viene compilato una cella della colonna E
[Modificato da BG66 27/05/2019 14:56]
BG66
Excel 2010
Post: 2.227
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
27/05/2019 15:41

ciao
presumo che quando parli della col. E ti riferisca al foglio DB, quindi vorresti che scrivendo nelle celle del foglio DB da E11 in poi, si attivi la macro.
Questo lo puoi fare sfruttando l'evento change del foglio DB, pertanto nel vb del foglio DB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E11:E200")) Is Nothing Then ' << variare range
    copia2
End If
End Sub


Quello che non è chiaro è la prima richiesta:

cosa significa "aggiornare senza cancellare" ?? Vuoi per caso "accodare" i dati ??

Fai un esempio

saluti




[Modificato da dodo47 27/05/2019 15:42]
Domenico
Win 10 - Excel 2016
Post: 271
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
27/05/2019 18:24

Ciao Domenico,

Quello che non è chiaro è la prima richiesta:

cosa significa "aggiornare senza cancellare" ?? Vuoi per caso "accodare" i dati ??

Fai un esempio


Due possibili casi:
1)inserisco una data nella colonna C del foglio "DB" (esempio in C29 quindi calcolo il valore in L28) -> la macro aggiorna il valore in E19 del foglio "Analisi".
1)elimino una riga in "DB" (es. Rif.27 [riga 2]) ma nel lanciare la macro il dato deve restare nel foglio "Analisi".

Spero di essere stato chiaro.

Grazie
Gene
[Modificato da BG66 27/05/2019 18:25]
BG66
Excel 2010
Post: 2.228
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
28/05/2019 10:15

ciao
comunque non basta inserire la data in C, devi anche inserire il dato in col. E.


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Columns.Count = ActiveSheet.Columns.Count Then Exit Sub
If Not Intersect(Target, Range("E11:E200")) Is Nothing Then ' << variare range
    copia2
End If
End Sub


sempre nel vb del foglio DB.
Tieni presente che se elimini righe in DB, la formula in col. L va in errore.

saluti



[Modificato da dodo47 28/05/2019 10:16]
Domenico
Win 10 - Excel 2016
Post: 272
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
28/05/2019 15:55

Ciao Domenico,
se il calcolo dei giorni lavorativi lo facesse direttamente la macro?

BG66
Excel 2010
Post: 2.229
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
28/05/2019 18:17

ciao
si, la funzione da utilizzare è:

application.WorksheetFunction.NetworkDays(....)

ma devi spiegare quando vuoi che vengano calcolati i dati in col. L:

- quando metti una data ?
- quando inserisci un valore in col. E ?

saluti


Domenico
Win 10 - Excel 2016
Post: 273
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
28/05/2019 18:39

Ciao
dodo47, 28/05/2019 18.17:

ciao
si, la funzione da utilizzare è:

application.WorksheetFunction.NetworkDays(....)

ma devi spiegare quando vuoi che vengano calcolati i dati in col. L:

- quando metti una data ?
- quando inserisci un valore in col. E ?



In realtà io pensavo di non farlo nel foglio "DB" ma direttamente nel foglio "Analisi".

Esempio:
Inserisco data nella cella C29 di "DB"

a questo punto nel foglio "ANALISI":
1)riporto la stessa data nella cella B20
2)calcolo il campo in E della riga 19

Lascio il riempimento della cella del peso nella colonna D al prossimo lancio della macro che potrebbe avvenire in fase di chiusura del file (e questo riesco ad implementarlo da solo 😀)

Grazie per l'aiuto
[Modificato da BG66 28/05/2019 18:48]
BG66
Excel 2010
Post: 2.230
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
28/05/2019 18:50

Mi stai confondendo le idee che ti assicuro non sono chiare.

Ciò premesso, se spieghi "bene e completamente" cosa deve fare questo programma forse ne veniamo fuori.

Tu fai delle richieste alle quali io rispondo "al buio" perchè non so nulla del tuo lavoro.

Spiega l'operatività manuale iniziale e cosa vuoi che avvenga quando alimenti il foglio DB.

E a che ti serve il foglio Analisi visto che è uguale a DB

saluti



[Modificato da dodo47 28/05/2019 18:54]
Domenico
Win 10 - Excel 2016
Post: 274
Registrato il: 13/12/2015
Città: MILANO
Età: 58
Utente Junior
2010
OFFLINE
28/05/2019 19:46

Ciao Domenico,
ci provo.

Il file mi serve a monitorare gli scarti.
Quando avviene una spedizione, con una macro, vengono cancellate (in "DB") le righe del materiale in uscita, conseguentemente perdo delle informazioni importanti.

Per evitarlo ho pensato di creare un foglio supplementare ("Analisi")in cui duplicare le righe cosi da mantenere la "storia" e aggiungendoci l'informazione sui giorni lavorati trascorsi tra una riga e la successiva.

[Modificato da BG66 28/05/2019 19:47]
BG66
Excel 2010
Post: 2.231
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
29/05/2019 10:43

ciao
quindi non più al cambio della col. E di DB deve avvenire la copia, ma all'inserimento/cambio della col. C (data) di DB, si riporta la data in Analisi e si calcolano (sempre in Analisi) i gg lavorativi della precedente data.

Se è così cambia poco perchè come detto hai già i gg lavorativi in DB (a meno che tu non voglia eliminare la colonna); e la macro attuale copia anche quelli.
Pertanto basta variare l'evento change di DB:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Columns.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C11:C200")) Is Nothing Then ' << variare range
    copia2
End If
End Sub


Se non ho capito....sono qui
saluti



Domenico
Win 10 - Excel 2016
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 13:20. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com