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

Replicare dei valori

Ultimo Aggiornamento: 13/08/2020 20:38
Post: 22
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
02/08/2020 00:41

Ciao,
scusa dodo47 per la mia ignoranza ma con l'ultimo file che hai mandato non riesco proprio a farlo funzionare; comunque non penso che possa fare al caso mio.

Credo che la soluzione migliore sia la prima che ha inviato ABCDEF@Excel mettendo un bottone; così che avvio il codice dopo aver incollato le nuove righe ogni giorno. L'unica correzione che vi chiedo, se possibile, è quella che il codice vada a scrivere solo nelle celle vuote (così non replica sempre gli utenti ogni volta che avvio il codice).

Vi invio il codice di ABCDEF che vorrei modificare e in allegato il file nel quale mettere il nuovo codice.

Grazie Mille!


Sub trova()
Dim ur, ur1, x, r, Rg As Object
ur = Sheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
ur1 = Sheets("Foglio2").Range("A" & Rows.Count).End(xlUp).Row
For x = 2 To ur1
Set Rg = Sheets("Foglio1").Range("A1:A" & ur).Find(Sheets("Foglio2").Cells(x, 1), LookIn:=xlValues, LookAt:=xlWhole)
If Rg Is Nothing Then
MsgBox "nessuna corrispondenza"
Else
r = Rg.Row
If Sheets("Foglio1").Cells(r, 2) = "" Then
Sheets("Foglio1").Cells(r, 2) = Sheets("Foglio2").Cells(x, 2)
Else
Sheets("Foglio1").Cells(r, 2) = Sheets("Foglio1").Cells(r, 2) & ", " & Sheets("Foglio2").Cells(x, 2)
End If
End If
Next
MsgBox "Fatto"
End Sub
02/08/2020 08:16

@alesc83, devi aiutarmi a capire bene.
In teoria ricevi ogni giorno dei dati che Tu aggiungerai in un'altro files...
Ora se ricevi 100 righe al giorno, sul Tuo files ci saranno già centinaia di righe. L'esempio fatto il 30/07/2020 11:48, si basava proprio su questo ragionamento (magari preferivi il bottone, io ho usato Auto_Open per evitare doppioni ed "*").
Adesso vorrei capire se l'allegato è un Fax-simile di dati che ricevi ogni giorno?
Oppure è il Tuo files "Archivio_Generale" nel quale incolli TOT righe? Quali e dove?
Inoltre vorrei capire (dato che aggiungi CSI37825 con data 18/07/2020 e poi CSI37825 con data 17/07/2020), deve contarli tutti o solo per una data precisa?

Presumo che Foglio2 sia i dati importanti della lavorazione giornaliera e il Foglio1 sia la tipologia dei lavori che fate normalmente.
Ex Incolli 100 Righe, trovi i nomi del Foglio2 e li scrivi in Foglio1. OK
Domani arrivano altre 100 Righe, cosa fai di preciso (aggiungi solo Foglio2)?
Dovrà trovare solo i nomi delle righe aggiunte oppure desideri il TOTALE?
Tutte le righe che rimaranno vuote "senza lavorazione" devono per forza essere salvate? * = Non sarebbe il caso di salvare solo le righe con i nomi?

Per finire in riga 147, ci sarebbero 107 = TORTELLO (cosa serve se ci sono tanti doppioni). Questo allegato fà quello che hai chiesto nel 1° post.
Post: 6.018
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
02/08/2020 08:24

Ciao Un saluto a tutti, solo adesso mi accingo a dare un occhiata alla discussione.

quello che ho capito che nei 2 fogli Foglio1-2 da una parte ci sono gli Ordini e nel secondo foglio chi li ha lavorati.

ora tu hai bisogno di sapere in base al "numero di Colonna(LAVORAZIONE)" quali e quanti utenti hanno lavorato il determinato prodotto?

solo questo? o ci sono altri parametri

in poche parole estrarre i dati dai 2 elenchi, in un ipotetico 3 elenco cosa dovrebbe riportare?

Ciao By Sal [SM=x423051]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 2.930
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
02/08/2020 09:46

Re:
Ciao
l'UDF da me inviata funziona egregiamente e perfettamente. Come tale non c'è nulla da adattare nel codice, basta inserire nella formula i range voluti.

Naturalmente se hai centinaia di migliaia di righe mi sembra ovvio che è meglio utilizzare un altro metodo.

Non ti ho proposto altro in quanto tu volevi che al cambiare di certi valori, sia in un foglio che nell'altro, i dati si aggiornassero;
se stato proprio ti a parlare dell'evento worksheet_change.

Ora che hai (finalmente aggiungo io) deciso di ricorrere ad un pulsante vedrai che tutto andrà liscio.

saluti




Domenico
Win 10 - Excel 2016
Post: 23
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
02/08/2020 22:53

Ciao a tutti,

devo avere fatto un pò di confusione, il file con Auto_Open l'hai inviato tu e non dodo47 come inizialmente avevo letto (sbagliando); è quello che non riesco a capire il funzionamento. Comunque il file del 02/08 alle 8:16 va bene, mi sembra stabile e veloce ma l'unico inconveniente come dici tu, è che replica il nome utente: vorrei che lo scrivesse una sola volta. Esempio nella riga 147 vorrei che scrivesse solo TORTELLO e nella riga 148 TORTELLO, LAVAGNA.
Tutte le mattine ricevo i dati su 2 fogli che incollo nel file Archivio Generale (come lo chiami tu): il primo foglio è leggermente diverso da quello che ricevo perchè ho aggiunto delle semplici formule mentre il foglio2 è identico.

Quando ci sono due lavorazioni con date differenti bisognerebbe contarli tutti.

>>>Dovrà trovare solo i nomi delle righe aggiunte oppure desideri il TOTALE? Se mettessi il totale presumo che rallenti l'operazione, quindi basterebbe che trovi i nomi fino a 3 giorni indietro, si può fare? Altrimenti è sufficiente il giorno stesso..

>>>>Tutte le righe che rimarranno vuote "senza lavorazione" devono per forza essere salvate? * = Non sarebbe il caso di salvare solo le righe con i nomi? Vorrei che rimanessero anche le righe senza i nomi utenti. Cosa intendi per "senza lavorazione"? tutte le righe hanno la lavorazione.


Grazie mille a tutti per la collaborazione
03/08/2020 01:47

>>>"senza lavorazione"
Intendevo tutte le righe che non ci saranno nomi.

>>>Quando ci sono due lavorazioni con date differenti bisognerebbe contarli tutti.
Li conta già tutti (pensavo che volevi per data)

Per quanto riguarda Auto_Open (si puo mettere il bottone), ti risparmiava il fastidio del copia/incolla. Se il Foglio1 è leggermente diverso ci pensava il VBA (senza usare formule).

A riguardo TORTELLO, LAVAGNA, vai nel codice e modifica
''''prima
                Do
                r = c.Row
                Msg = Msg & sh2.Cells(r, 4) & ","
                Set c = .FindNext(c)
''''modifica in
                Do
                r = c.Row
                If InStr(Msg, sh2.Cells(r, 4)) = 0 Then
                    Msg = Msg & sh2.Cells(r, 4) & ","
                End If
                Set c = .FindNext(c)
Post: 24
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
03/08/2020 08:11

Ciao a tutti,
ecco così va più che bene. Ottimo!
Mi sono accorto di un problema: dopo aver fatto partire il codice e quindi inserito tutti i nomi, cambiando l'ordine delle righe i nomi non si spostano con loro ma rimangono fissi. Come posso spostarli assieme? Nel caso non si potesse, vorrei che si cancellassero ogni qualvolta si faccia un filtro perchè altrimenti si rischia di avere il nome utente sbagliato con la lavorazione.

Comunque grazie mille!!!
03/08/2020 13:11

Cosa c'entra...
Mouse destro sul Bottone e spostalo.
Copia J1 in K1, cambia ANNO in NOMI
Togli il filtro e rimettilo
Post: 25
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
04/08/2020 07:22

E' vero, che stupido.
Grazie di tutto, problema risolto!
Post: 26
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
11/08/2020 21:22

Ciao ABCDEF@Excel,
avrei ancora una domanda..
Se, oltre alla colonna "utente", volessi inserire anche la colonna "macchina" nel foglio1 colonna L, come dovrei modificare la macro?

Grazie
12/08/2020 00:25

Forse non va bene, prova...
Option Explicit
Sub Nomi()
Dim Msg As String, val As String, c As Object, Msg1 As String
Dim ur1, ur2, x, r, firstAddress
Application.ScreenUpdating = False
Dim sh1 As Worksheet: Set sh1 = Worksheets("Foglio1") ' da cambiare casomai
Dim sh2 As Worksheet: Set sh2 = Worksheets("Foglio2") ' da cambiare casomai
ur1 = sh1.Range("A" & Rows.Count).End(xlUp).Row
ur2 = sh2.Range("A" & Rows.Count).End(xlUp).Row
sh1.Range("k2:k" & ur1).Clear
    For x = 2 To ur1
        Msg = ""
        val = sh1.Cells(x, 4)
        With sh2.Range("A2:A" & ur2)
        Set c = .Find(val, LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                r = c.Row
                If InStr(Msg, sh2.Cells(r, 4)) = 0 Then
                    Msg = Msg & sh2.Cells(r, 4) & ","
                End If
                 If InStr(Msg1, sh2.Cells(r, 7)) = 0 Then
                    Msg1 = Msg1 & sh2.Cells(r, 7) & ","
                End If
                Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
        If Right(Msg, 1) = "," Then Msg = Left(Msg, Len(Msg) - 1) Else Msg = Msg
        sh1.Cells(x, 11) = Msg
        If Right(Msg1, 1) = "," Then Msg1 = Left(Msg1, Len(Msg1) - 1) Else Msg1 = Msg1
        sh1.Cells(x, 12) = Msg1
    Next
MsgBox "Fatto"
Application.ScreenUpdating = True
Set sh1 = Nothing
Set sh2 = Nothing
Set c = Nothing
End Sub
Post: 27
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
12/08/2020 16:34

Con il nuovo codice crea una lista lunga con tutti i nomi che ha trovato. In allegato il file con il codice Modulo2
12/08/2020 20:42

Visto pure io e pensavo non andasse bene
Nelle prime righe bisogna correggere ...sh1.Range("K2:L" & ur1).Clear

Non posso farci nulla se esistono troppe macchine.
Strano pensavo d'avere usato la colonna G??? = 7
Ci sono due colonne col nome MACCHINA, se desideri la colonna 7 cambia il 5 con 7
If InStr(Msg1, sh2.Cells(r, 5)) = 0 Then
Msg1 = Msg1 & sh2.Cells(r, 5) & ","
End If
Post: 28
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
12/08/2020 23:45

Il problema però rimane. E' come se non cancellasse il nome della macchina perchè ad ogni riga si incrementa quel valore e capita solo nella colonna L.
es.
colonna K
TORTELLO



CICCIO
TORTELLO
CICCIO
TORTELLO

mentre in colonna L
PT93
PT93
PT93
PT93
PT93PT10,PT11,PT12,PT13,PT14,PT15,PT16
PT93PT10,PT11,PT12,PT13,PT14,PT15,PT16PT3,PT4,PT5,PT6,PT67,PT68,PT69,PT70,PT71,PT72,PT73,PT74,PT75,PT76
PT93PT10,PT11,PT12,PT13,PT14,PT15,PT16PT3,PT4,PT5,PT6,PT67,PT68,PT69,PT70,PT71,PT72,PT73,PT74,PT75,PT76PT8
PT93PT10,PT11,PT12,PT13,PT14,PT15,PT16PT3,PT4,PT5,PT6,PT67,PT68,PT69,PT70,PT71,PT72,PT73,PT74,PT75,PT76PT8
PT93PT10,PT11,PT12,PT13,PT14,PT15,PT16PT3,PT4,PT5,PT6,PT67,PT68,PT69,PT70,PT71,PT72,PT73,PT74,PT75,PT76PT8
13/08/2020 00:46

Io non mi ricordo cosa ho mangiato oggi, figurati un VBA del 21/07/2020
Modificalo
'prima
'''
sh1.Range("k2:k" & ur1).Clear
    For x = 2 To ur1
        Msg = ""
'''
'dopo
'''
sh1.Range("k2:L" & ur1).Clear
    For x = 2 To ur1
        Msg = ""
        Msg1 = ""
'''
Post: 29
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
13/08/2020 20:38

Ora funziona!
Mi ero perso una riga:
Msg1 = ""

Mille grazie!
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 2 | 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 09:24. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com