Condividi:        

Trasferimento dati sparpagliati da foglio1 a foglio2

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Trasferimento dati sparpagliati da foglio1 a foglio2

Postdi Ricky0185 » 13/12/25 13:31

Buongiorno, nel file allegato ci sono sullo stesso foglio1 i dati dei due fogli, riuniti per facile comprensione della richiesta....speriamo. In sostanza vorrei che una volta inserito un'importo su Foglio1 colonna D, a parità di nome sulla cui riga è stato inserito l'importo vengano inseriti su Foglio2 una serie di altri dati che, per il fatto che sono sparpagliati, non riesco a posizionare dove richiesto. Con i colori ho cercato di far apparire quanto richiesto.
Spero in un Vs aiuto e nel frattempo cordialmente Vi saluto
R
Ricky0185
Utente Senior
 
Post: 427
Iscritto il: 10/12/19 20:38

Sponsor
 

Re: Trasferimento dati sparpagliati da foglio1 a foglio2

Postdi Anthony47 » 14/12/25 19:40

Probabilmente sarebbe meglio partire da una tabella su Foglio2 dove la colonna dei Nomi sia gia’ compilata (mi pare una contabilita’ condominiale, e l’elenco dei Soci e’ certamente noto).
Comunque, per rimanere nella richiesta, credo che una macro come questa possa andare bene:
Codice: Seleziona tutto
Sub Riep()
Dim WArr, StarTab As Range, OTab As Range, Intest
Dim myMatch, myCol, I As Long, cNome As String, rNext
'
Set StarTab = Sheets("Foglio1").Range("A3")     '<<< dove comincia la tabella di Partenza
Set OTab = Sheets("Foglio2").Range("A2")        '<<< dove comincia la tabella da Creare
'
Intest = Array(" ", "Prima", "Seconda", "Terza", "Quarta")  'Intestazioni di riga 1
WArr = Range(StarTab, StarTab.End(xlDown).Offset(0, UBound(Intest))).Value
'
OTab.Resize(1000, UBound(Intest) + 2).ClearContents         'Azzera tabella di output
OTab.Resize(1, UBound(Intest) + 1).Value = Intest           'Metti intestazioni
For I = 2 To UBound(WArr)                                   'Scansiona la tabella
    cNome = WArr(I, 2)
    myMatch = Application.Match(cNome, OTab.Resize(1000, 1), False)
    If IsError(myMatch) Then
        rNext = OTab.Resize(1000, UBound(Intest) + 1).Find(what:="*", after:=OTab, _
           searchdirection:=xlPrevious).Row - OTab.Row + 2  'Nome non ancora presente
    Else
        rNext = myMatch                                     'Nome gia' presente
    End If
    OTab.Cells(rNext, 1) = cNome                            'Copia Nome
    myCol = Application.Match(WArr(I, 3), OTab.Resize(1, UBound(Intest) + 1), False)
    If IsError(myCol) Then
        StarTab.Cells(I, 1).Copy                            'Causale non esiste!!?
        OTab.Cells(rNext, 2).PasteSpecial Paste:=12
        If Len(OTab.Cells(rNext + 1, 2)) = 0 Then
            OTab.Cells(rNext + 1, 2) = "@@@" & Format(WArr(I, 4), "0")
        Else
            OTab.Cells(rNext + 1, 2) = "###" & Format(WArr(I, 4), "0")
        End If
    Else
        StarTab.Cells(I, 1).Copy                            'Causale esiste
        OTab.Cells(rNext, myCol).PasteSpecial Paste:=12     '... copia data
        If Len(OTab.Cells(rNext + 1, myCol)) = 0 Then       '... copia valore
            OTab.Cells(rNext + 1, myCol) = WArr(I, 4)
        Else
            OTab.Cells(rNext + 1, myCol) = OTab.Cells(rNext + 1, myCol) & "#" & WArr(I, 4)
        End If
    End If
    Application.CutCopyMode = False
Next I
MsgBox ("Riepilogo creato")
End Sub

Le righe marcate <<< vanno personalizzate come da commento.
In caso che per un cero Nome ci siano piu’ righe con la stessa Casuale, la data e’ dell’ultima riga esaminata ma il Valore e’ il concatenamento del primo valore con il successivo separati dal carattere #
Un’altra situazione di anomalia e’ il caso che la Casuale non esista nell’intestazione; in questo caso viene usata la colonna della prima causale con il Valore preceduto da °se la cella era libera oppure da ### se la colonna conteneva gia’ un valore che così e’ andato perduto
Le situazioni anomale vanno poi corrette per poter generare un riepilogo corretto

Prova...
Avatar utente
Anthony47
Moderatore
 
Post: 19671
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Trasferimento dati sparpagliati da foglio1 a foglio2

Postdi Ricky0185 » 15/12/25 07:22

In giornata provo la tua macro. Io mi stavo muovendo con il Select Case, però se non stai li con la testa ci si perde.
Ti saprò dire. Il lavoro è come dici tu di amministrazione condominiale che ho passato ad altro, ma già sono nati un mucchio di problemi amministrativi, per cui vorrei automatizzare anche le registrazioni. Tutto il resto sarebbe a posto grazie alle tue soluzioni.
Buona giornata
R
Ricky0185
Utente Senior
 
Post: 427
Iscritto il: 10/12/19 20:38

Re: Trasferimento dati sparpagliati da foglio1 a foglio2

Postdi Ricky0185 » 15/12/25 14:13

Lanciata la macro sul filetto trasmesso, sotto il risultato che appare su Foglio2, ci sono quelle @@@. Sul file originale...apriti cielo. File con 659 righe (voci di cui alcune contengono la parola Prima o Seconda o ... Rata) e 13 fogli, ma il foglio in esame è il Libro Cassa, dove inframmezzate ci sono il pagamento delle 4 rate di tutti i condomini (magari) e tante altre voci che però non contengono quelle 4 parole. Il foglio target si chiama Versamenti (fin'ora compilato a mano) dal quale con macro vengono compilati altri fogli: Entrate Condomini e vari Riparti.
Si continuerà a compilare le Entrate Condomini a mano, prima o poi anche il nuovo amm si metterà in riga.
Ti saluto ringraziandoti per il tempo che hai speso a fare quella macrona, che pian piano cerco di interpretare.
R
Prima Seconda Terza Quarta
Pinco 02/07/25
@@@362
Pallino 03/12/25
183,2
Ricky0185
Utente Senior
 
Post: 427
Iscritto il: 10/12/19 20:38

Re: Trasferimento dati sparpagliati da foglio1 a foglio2

Postdi Anthony47 » 15/12/25 19:59

Sapevo che non avrebbe funzionato alla prima versione, perche’ avevo INVENTATO una gestione delle anomalie che necessariamente doveva essere rivista in funzione die modi di lavorare dell’utente.

Ma avevo anche anticipato che secondo me quella cosa funziona meglio se il foglio Riepilogo ha gia’ la lista dei Soci e si lavora popolando quella lista.
Con questa convinzione in mente ho preparato il file che trovi qui: https://www.dropbox.com/scl/fi/pr0zxqno ... 245wz&dl=0

Il file contiene il foglio MASTRO, dove vengono registrate le entrate, e il foglio Riep, che contiene gia’ l’elenco dei Soci.
E’ opportuno che la colonna Causale di foglio MASTRO sia soggetta a Convalida, per evitare errori di inputazione
A questo scopo:
-ho immaginato che i movimenti possano riguardare sia la gestione Ordinaria che una o piu’ gestioni Straordinarie; ho predisposto fino a 3 gestioni Straordinarie
-In riga 1 di colonne O, R, U, X scrivo il “nome” delle gestioni ; nella colonna precedente scrivo in quante rate ogni gestione e’ stata suddivisa.
-tramite una macro di Worksheet_Change:
a) ogni volta che modifico il numero di rate di una gestione ricalcolo (nelle righe sottostranti) la sigla delle relative rate
b) riporto l’elenco delle sigle nella colonna F e assegno all’elenco delle sigle il “nome” myCONV; si potra’ impostare sulla colonna Casuale quindi la convalida “da elenco” con origine dell’elenco pari a =myCONV

NOTE:
1) nella tabella Mastro la prima colonna non deve avere vuoti

2) le aree di lavoro sono impostate con dei nomi
-l’inizio della tabella di riepilogo e’ nominata BaseRiep; la prima riga sara’ compilata con l’elenco delle possibili causali e le colonne destinate al riepilogo + una (alla destra) saranno ripulite dalla macro prima di cominciare
-l’area riservata a elencare le gestioni e il relativo numero di rate corrisponde al nome BaseRate, in cella N1;
-ogni gestione ha 3 colonne riservate (numero rate; nome gestione e sigle delle rate; una colonna libera eventualmente usabile per impostare la data di scadenza e aprirsi alla segnalazione di ritardi nei pagamenti)
-l’area dove si crea l’elenco delle causali comincia in M2, che ha il nome CONVLIST
E’ quindi facile spostare queste sezioni in altre parti del foglio Mastro (o anche in altri fogli)

3) Le sigle hanno un prefisso che corrisponde alla prima lettera della Gestione seguita eventualmente dal numero in fondo alla sigla della gestione (da qui O-Prima /Seconda... E1-Prima /seconda... che vedi nel fiile dimostrativo

4) La gestione degli errori elimina quelle @@@ o ### dal foglio Riepilogo e viene fatta con dei colori su foglio MASTRO
In particolare
-Rosso indica Nome oppure Causale non trovata; Giallo indica Causale già compilata (nell’elenco figura due volte la stessa causale); Verde indica voce allocata correttamente in Riepilogo.

La macro che crea il riepilogo corrisponde a questo codice:
Codice: Seleziona tutto
Sub RiepXA()
Dim WArr, StarTab As Range, OTab As Range, Intest
Dim myMatch, myCol, I As Long, cNome As String, rNext
'
Set StarTab = Sheets("MASTRO").Range("A2")                                  '<<< L'origine della tabella Mastro
Set OTab = Range("BaseRiep")                                                'L'origine del Riepilogo
'
Intest = Application.WorksheetFunction.Transpose(Range("myconv"))
'
WArr = Range(StarTab, StarTab.End(xlDown).Offset(0, 3)).Value                   'Legge la tabella Mastro
StarTab.Offset(0, 1).Resize(UBound(WArr), 2).Interior.Color = xlNone
OTab.Offset(1, 1).Resize(10000, UBound(Intest) + 1).EntireColumn.ClearContents  'Pulisce l'area di Riepilogo
OTab.Offset(0, 1).Resize(1, UBound(Intest)).Value = Intest                      'Mette le intestazioni su Riep
'
'Scansione della tabella di riepilogo:
For I = 2 To UBound(WArr)
    cNome = WArr(I, 2)
    myMatch = Application.Match(cNome, OTab.Resize(1000, 1), False)             'Cerca il Nome
    If IsError(myMatch) Then
        StarTab.Cells(I, 2).Interior.Color = RGB(255, 100, 100) 'Rosso=Nome non trovato
        GoTo SkippA
    Else
        rNext = myMatch                                                         'Riga del Nome
    End If
    myCol = Application.Match(WArr(I, 3), OTab.Resize(1, UBound(Intest) + 1), False)    'Cerca la colonna della Causale
    If IsError(myCol) Then
        Beep
        StarTab.Cells(I, 3).Interior.Color = RGB(255, 100, 100) 'Rosso=causale non trovata
        GoTo SkippA                                                                     'Marca e salta se non trovata
    Else
        If Len(OTab.Cells(rNext + 1, myCol)) = 0 Then
            OTab.Cells(rNext, myCol) = WArr(I, 1)                                       'Se campo libero
            OTab.Cells(rNext + 1, myCol) = WArr(I, 4)
            StarTab.Cells(I, 3).Interior.Color = RGB(100, 255, 100) 'Verdino=Ok allocato
        Else
            StarTab.Cells(I, 3).Interior.Color = RGB(255, 255, 0) 'Giallo=già presente  'Se campo gia' usato
        End If
    End If
SkippA:
Next I
MsgBox ("Creato Riepilogo")
End Sub

Se, dopo i controlli, vuoi eliminare i colori che la macro applica allae colonne 2 e 3 della tabella mastro puoi usare questa macro:
Codice: Seleziona tutto
Sub NoCol()
Sheets("MASTRO").Range("B2:C1000").Interior.Color = xlNone
End Sub


Vedi se riesci a fare qualche uso di quanto ti ho propinato...
Avatar utente
Anthony47
Moderatore
 
Post: 19671
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Trasferimento dati sparpagliati da foglio1 a foglio2

Postdi Ricky0185 » 15/12/25 21:39

Purtroppo con XP DropBox non mi funziona più (e tantissimi altri siti che pian piano uno alla volta si aprono con webpage bianca). Domani in ufficio con l'11 lo apro e scarico il tuo file, poi a casa lo faccio girare, dopo aver digerito le tue osservazioni contenute nel messaggio. Nel frattempo ti mando in originale i due fogli interessati dal trasferimento, di cui il Libro Cassa (rimaneggiato) viene compilato esclusivamente tramite macro mentre il foglio Versamenti tutto manualmente. Ho eliminato i fogli non interessati così come tutte le macro. Il link scade entro 12h
Ti ricordo che attualmente funziona tutto e che la mia richiesta verte esclusivamente ad automatizzare le registrazioni, che poi servono a compilare altri fogli.
Perciò oltre a ringraziarti dell’impegno che finora hai profuso, ti esorto a prenderlo come passatempo.
Un salutone
R
Ricky0185
Utente Senior
 
Post: 427
Iscritto il: 10/12/19 20:38

Re: Trasferimento dati sparpagliati da foglio1 a foglio2

Postdi Anthony47 » 17/12/25 19:41

Ti ricordo che attualmente funziona tutto e che la mia richiesta verte esclusivamente ad automatizzare le registrazioni, che poi servono a compilare altri fogli.
Quanto presente sul file dimostrativo che ti ho allegato l'altro ieri va in questa direzione: normalizzare la compilazione del libro-cassa per facilitare la compilazione dei riepiloghi di versamento. Ovviamente presuppone delle modifiche al modo di lavorare, e non so se gli interessati sono ...interessati
Avatar utente
Anthony47
Moderatore
 
Post: 19671
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Trasferimento dati sparpagliati da foglio1 a foglio2":


Chi c’è in linea

Visitano il forum: Anthony47, raimea e 30 ospiti