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

Replicare dei valori

Ultimo Aggiornamento: 13/08/2020 20:38
Post: 11
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
21/07/2020 22:44

Ciao a tutti,
chiedo il vostro aiuto per risolvere un mio problema.
Devo replicare dei valori su un foglio di lavoro prelevandoli da un altro foglio.
Esempio (con file in allegato)
nella colonna A del foglio 1 ci sono dei valori
nella colonna A del foglio 2 ci sono gli stessi valori del foglio 1 ma in ordine sparso e alcuni replicati.
nella colonna B del foglio 2 ci sono dei nomi.

Ho bisogno che all'aggiornamento dei fogli, i nomi della colonna b foglio 2 che corrispondono alla colonna A, vengano replicati nella colonna b del foglio 1. Se nel foglio 2 ci sono più valori uguali nella colonna A ma con nomi diversi, nella colonna B del foglio1 vengano scritti più nomi.

Lo so, è piuttosto complicato e probabilmente non sono molto chiaro; ho comunque fatto nel foglio3 il risultato che vorrei ottenere.

Grazie del vostro costante aiuto.

21/07/2020 23:31

Prova
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
Post: 11
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
22/07/2020 10:04

Ottimo, grazie mille!
Come faccio a renderlo automatico? Ad ogni inserimento di un valore nel foglio1 colonnaA, venga popolato la colonna B?
E come faccio a togliere la text box "Fatto"?

Grazie
22/07/2020 11:14

Sicuramente ho capito male il Tuo problema, "quel VBA" è solo una verifica sui dati presenti nei due fogli (da usare solo una ed unica volta). Premesso che Lui CERCA in foglio2 e scrive in Foglio1, cosa c'entra "Ad ogni inserimento di un valore nel foglio1 colonnaA"??? Intendi dire se inserisci un Numero in foglio1, Lui dovrebbe cercare se esiste già in foglio2??? Pure eventuali doppioni? ... e se non esiste?
Prova spiegare bene i passaggi del quesito, se riesco capirTi...

Ps. >>>Come faccio a renderlo automatico? Serve un Worksheet_Change
>>>E come faccio a togliere la text box "Fatto"? Basta togliere la riga
Post: 12
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
22/07/2020 13:48

Ciao,
sicuramente mi sono espresso male, ma hai comunque capito bene.
Quello che già mi hai dato fa al caso mio, ma mettendo worksheet change, ogni volta che sposto il cursore nel documento, le celle della colonna B del foglio 1 si incrementano con un nome: vorrei invece che una volta popolate le celle con i nomi, queste non vengano più modificate.

>>>>Intendi dire se inserisci un Numero in foglio1, Lui dovrebbe cercare se esiste già in foglio2??? Si

>>>>e se non esiste? Non deve scrivere nulla, lasciare la cella vuota

Grazie mille per il supporto
22/07/2020 22:20

Vai su foglio1, premi ALT+F11 ed incolla sulla destra.
Quando scrivi un numero cerca in foglio2
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then Exit Sub
Dim ur, r, c As Object, Msg As String, val As Long, Tot As Long
ur = Sheets("Foglio2").Range("A" & Rows.Count).End(xlUp).Row
    If Not Intersect(Target, Range("A2:A1000")) Is Nothing Then
        val = Target.Offset(0, 0)
         With Sheets("Foglio2").Range("A1:A" & ur)
            Set c = .Find(val, LookIn:=xlValues, LookAt:=xlWhole)
                If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                r = c.Row
                Msg = Msg & Sheets("Foglio2").Cells(r, 2) & ","
                Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
        End With
   End If
Application.EnableEvents = False
    Target.Offset(0, 1) = Msg
Application.EnableEvents = True
End Sub
Post: 13
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
23/07/2020 08:40

Ottimo! Grazie!
Ma se, invece che scrivere, dovessi incollare nella colonna A diverse celle?

23/07/2020 13:37

Il Worksheet_Change non funziona col copia/incolla
Post: 14
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
23/07/2020 14:28

Ah, non lo sapevo.
Ho provato allora a metterlo nel modulo ma da errore, come mai?

Grazie
23/07/2020 14:39

>>>Vai su foglio1, premi ALT+F11 ed incolla sulla destra<<<
Post: 15
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
23/07/2020 15:42

Se però non funziona il copia incolla con il worksheet change, non è molto adatto al mio scopo.
Forse è meglio la prima opzione che hai inviato.
Quindi vorrei chiederti un ultima cosa: come posso fare in modo che le celle già popolare non vengono scritte continuamente? Perchè altrimenti, ad ogni avvio del vba, le celle della colonna b vengono continuamente popolate.

Grazie mille!
23/07/2020 20:33

Nel Foglio3 c'è un bottone, ogni volta inizia da riga2
Nel Foglio1 (accetta il singolo e pure diversi valori), però se cancelli non azzera tutte le celle. Di più non saprei come fare
Post: 2.906
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
24/07/2020 10:39

Ciao a tutti

me permetto suggerire l'utilizzo dell'evento change (che comunque funziona anche con il copia incolla), nel seguente modo:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ur, r, c As Object, Msg As String, val As Long, Tot As Long
Application.EnableEvents = False
ur = Sheets("Foglio2").Range("A" & Rows.Count).End(xlUp).Row
    If Not Intersect(Target, Range("A2:A1000")) Is Nothing Then
        For Each cell In Target
            If Not cell.Value = "" Then
                val = cell
                 With Sheets("Foglio2").Range("A1:A" & ur)
                    Set c = .Find(val, LookIn:=xlValues, LookAt:=xlWhole)
                        If Not c Is Nothing Then
                        firstAddress = c.Address
                        Do
                        r = c.Row
                        Msg = Msg & Sheets("Foglio2").Cells(r, 2) & ","
                        Set c = .FindNext(c)
                        Loop While Not c Is Nothing And c.Address <> firstAddress
                End If
                End With
                cell.Offset(0, 1) = Msg
                Msg = ""
            End If
        Next
   End If
Application.EnableEvents = True
End Sub


(salvo errori di interpretazione)

Il tutto andrebbe integrato con una "sana" gestione di errori, cosa che è rara vedere......

saluti




[Modificato da dodo47 24/07/2020 10:40]
Domenico
Win 10 - Excel 2016
24/07/2020 14:15

Ciao dodo47
Molto snello in Tuo codice, a parte un IF IsNumeric(Val) quali altri errori ci potrebbero essere? Se per ex sono scritti A1:A50 e desidero cancellare, devo selezionare le celle A10:B30 e mi rimangono righe vuote. Esiste un modo che se cancello solo A10 mi cancella pure B10? Forse il massimo sarebbe un ciclo For con IsNumeric e poi chiedo se cella=vuota elimina riga. Grazie
Post: 2.907
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
24/07/2020 17:21

ciao
ABC....quel codice va sistemato, non ho la minima idea di che uso debba farne alesc.

Certamente se elimini righe va in errore (e la cosa deve essere gestita), se cancelli no etc etc.

se alesc lascia celle vuote potresti partire dal basso.

se cancelli i dati in A, l'evento stesso potrebbe cancellare i valori in B e viceversa.

saluti




[Modificato da dodo47 24/07/2020 17:23]
Domenico
Win 10 - Excel 2016
Post: 16
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
26/07/2020 00:18

Ciao a tutti,
innanzitutto mille grazie per il vostro aiuto, non mi stancherò mai di dirlo..

Gli ultimi codici sono entrambi molto validi ma non perfetti per il mio utilizzo.

Ogni giorno ricevo dei dati aziendali del giorno precedente: importo questi dati in un documento ma purtroppo i "nomi" vengono inseriti nel secondo foglio, mentre io ho bisogno di leggerli nel primo foglio insieme ad altri dati.

Se modifico il codice di dodo cambiando colonne, non funziona più; ho notato inoltre che se se inserisco prima un valore nel primo foglio e poi il suo corrispondente nel Foglio2, nel foglio 1 non si aggiorna.

Temo che sia un pò complesso..


Post: 2.909
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
26/07/2020 10:23

Re:
alesc83, 26/07/2020 00:18:


Se modifico il codice di dodo cambiando colonne, non funziona più; ho notato inoltre che se se inserisco prima un valore nel primo foglio e poi il suo corrispondente nel Foglio2, nel foglio 1 non si aggiorna.

Temo che sia un pò complesso..



Ciao
vedi alesc83, se tu non fornisci tutte insieme le tue necessità, spiegando come gira il tutto (a partire da come viene alimentato il foglio2), quali sono le colonne realmente interessate etc etc.... tu non ne esci fuori.

Il fatto che tu cambi colonne e non funziona, vuol dire che non adatti il codice alle colonne interessate

Il fatto che metti prima il codice nel foglio1 e poi pretendi che si aggiorni inserendo i corrispondenti nel foglio2 è qualcosa che non hai detto e pertanto non prevista.

Solo tu sai l'effettiva operatività e l'effettiva struttura del tuo lavoro. Finchè non fornisci un esempio con tutti i dettagli e la struttura corretta, non si arriverà mai a conclusione.

Purtroppo lo sviluppo di un codice ha bisogno di chiarezza.

saluti




[Modificato da dodo47 26/07/2020 10:57]
Domenico
Win 10 - Excel 2016
Post: 17
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
26/07/2020 16:25

Ciao dodo47,
invio in allegato il report reale che tutti giorni viene aggiornato importando i dati sia nel foglio1 che nel foglio2.
Come puoi vedere ci sono alcuni dati nel foglio 1 e altri nel foglio 2.
Ciò che ho bisogno è che i nomi degli utenti vengano inseriti nella colonna K del foglio1; come puoi vedere la colonna "lavorazione" è popolata in entrambi i fogli, ma nel primo non c'è il nome dell'utente.

Spero di essere stato un pò più chiaro ora..

Grazie
Post: 2.912
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
26/07/2020 16:45

Ciao

ma i dati vengono sostituiti oppure accodati?

o meglio, qual è la tua operatività?

perchè per riportare un nome in base (mi sembra) al codice LAVORAZIONE, basterebbe un semplice cerca.vert (vedi esempio)
[Modificato da dodo47 26/07/2020 16:55]
Domenico
Win 10 - Excel 2016
Post: 18
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
26/07/2020 17:07

I dati vengono accodati.

Il cerca.vert sarebbe perfetto ma la lavorazione spesso ha più utenti: nell'esempio che ti ho inviato la lavorazione 37829 ha due utenti: tortello e lavagna ma con il cerca.vert ti mostra solo il primo.
Post: 2.914
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
26/07/2020 18:50

Scusami, me ne ero completamente dimenticato, sai com'è...l'età.

Ora provvedo, devo trovare un mio vecchio lavoro

saluti



[Modificato da dodo47 26/07/2020 19:06]
Domenico
Win 10 - Excel 2016
Post: 19
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
26/07/2020 20:08

Ma và figurati!! Il vostro supporto é immenso!
27/07/2020 05:04

Mi sapresti spiegare le date in riga191 18/07/2020 e riga192 7/17/2020
Prima parlavi di numeri adesso di stringhe. Per me Worksheet_Change non va bene, se dodo47 non lo trova, farò una sub con bottone

Ps. Mi sembra strano che foglio1 trovi solo 3/4 stringhe? Tutte le altre non esistono?
Post: 2.915
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
27/07/2020 09:33

ciao
come anticipato ti allego il file con una udf

In uno dei fogli troverai una piccola spiegazione dei parametri

saluti



Domenico
Win 10 - Excel 2016
Post: 20
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
27/07/2020 23:59

Ciao,
ora funziona, ed è quello che cercavo, ottimo!!! Grazie mille!

Quindi ora, se importo il codice in un altro file e copio la formula della colonna k, dovrebbe funzionare, giusto?


x ABCDEF@Excel. Le date delle righe 191 e 192 sono diverse perche arrivano da due pc con formati diversi.
>>>>Ps. Mi sembra strano che foglio1 trovi solo 3/4 stringhe? Tutte le altre non esistono? Non vi ho inviato tutto il file perchè era troppo grande, ho estrapolato un parziale.


ciao
Post: 2.918
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
28/07/2020 10:00

Re:
alesc83, 27/07/2020 23:59:


Quindi ora, se importo il codice in un altro file e copio la formula della colonna k, dovrebbe funzionare, giusto?



Il codice di sicuro lo devi importare nel nuovo foglio. Fossi in te scriverei ex novo la formula sulla prima riga per poi trascinarla finchè serve. Non per altro, ma per capire come funziona.

Il copia/incolla non è mai un buon metodo.

saluti





Domenico
Win 10 - Excel 2016
Post: 21
Registrato il: 07/05/2020
Età: 40
Utente Junior
excel 2013
OFFLINE
29/07/2020 21:36

Ciao,
l'ultima soluzione funziona, ed è quello che fa per me ma purtroppo quando incollo la formula su tutte le cartelle, il programma excel si blocca, come se dovesse fare molti calcoli. Come mai?
Post: 2.925
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
30/07/2020 11:25

ciao
spiega un po' meglio, non mi è chiaro. Un esempio sarebbe meglio

saluti




[Modificato da dodo47 30/07/2020 11:26]
Domenico
Win 10 - Excel 2016
30/07/2020 11:48

Dipende da quante celle/righe contengono la formula della Function

Questo file (vuoto) lavora in modo diverso, contiene un Auto_Open (valido solo se il files che Ti inviono giornalmente ha la stessa struttura, potrei variarlo) All'apertura Ti chiede il files nuovo, esegue il controllo ed alla chiusura salva i dati su se stesso (anche qui si potrebbe scegliere quali dati).

Una volta fatto controlli i dati e alla chiusura scegli di salvarlo oppure no
[Modificato da ABCDEF@Excel 30/07/2020 11:49]
Post: 2.927
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
30/07/2020 12:27

ABC...il fatto è che alesc non vuole usare pulsanti che eseguono macro (almeno così ho interpretato), in quanto la sua operatività è su entrambi i fogli. Lui vuole poter aggiornare man mano che aggiunge/modifica i dati in entrambi i fogli senza essere costretto ad eseguire la macro ogni volta che apporta modifiche.

saluti




Domenico
Win 10 - Excel 2016
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 23:38. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com