| | 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 |
|
|