Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

RAMBO
Mesaje: 474
Membru din: Mie Noi 25, 2009 2:17 pm
Localitate: Pitesti

Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

Mesaj de RAMBO » Lun Aug 22, 2022 9:11 am

Buna ziua.
Rog ajutor in crearea unui cod macro care in fisierul Exemplu ar trebui sa faca: sa copieze info din tabelul Fluid[zile] (foaie 1) si sa le "distribuie" in Foaie 2 in tabelele corespondente persoanelor respective una sub alta la fiecare rulare a codului. Pot sa fac asta, dar asta presupune ca pozitia persoanelor din Fluid sa ramana neschimbata, iar chestia e ca pozitia persoanelor in tabelul Fluid variaza in timp in fel si chip, si atunci nu stiu cum sa o scot la capat pentru ca teoretic ar presupune rescrierea codului la fiecare modificare.
NOTA1: pozitia tabelelor individuale din Foaie 2 este intotdeauna fixa.
NOTA2: pozia persoanelor in tabelul Rigid este intotdeauna fixa si are doar rol de nomenclator, dar nu am reusit sa ma folosesc de el deoarece informatia ce trebuie copiata si distribuita se gaseste doar in tabelul Fluid[zile].
Multumesc.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Indigo-ONE
Mesaje: 433
Membru din: Mar Dec 11, 2018 8:54 pm

Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

Mesaj de Indigo-ONE » Mar Aug 23, 2022 2:36 pm

Salut,

Nu vroiam sa iti raspund dar...
- era greu sa pui mai multe nume in prima foaie (am tot scris despre asta, si tie si altora, dar trebuie sa intelegeti - tu ai aproape 500 postari - ca explicatiile trebuie sa fie amanuntite, sa putem intelege....chiar nu cititi si alte postari???)
- trebuie tabele in foaie 2? de ce??
- datele copiate vor fi rezultatul formulelor sau simple numere?
- totul se poate rezolva si cu formule, de ce e necesar cod VBA?
- de ce trebuie sa apesi butonul de mai multe ori? aduci datele de interes si apoi apasare de buton si ar scrie toate datele...
- daca vezi ca nu ti se raspunde la problema, inseamna ca nu sunt date suficiente si cei ca mine s-au saturat sa tot puna intrebari, nu de alta dar muncim la un cod ca sa vedem ca am muncit degeaba ca ori nu ati spus toate cerintele ori e alt range decat care l-ati dat voi si nu stiti sa modificati codul...
Rog ajutor in crearea unui cod macro care in fisierul Exemplu ar trebui sa faca: sa copieze info din tabelul Fluid[zile] (foaie 1) si sa le "distribuie" in Foaie 2 in tabelele corespondente persoanelor respective una sub alta la fiecare rulare a codului. Pot sa fac asta, dar asta presupune ca pozitia persoanelor din Fluid sa ramana neschimbata,.....[/quote]
pentru ca teoretic ar presupune rescrierea codului la fiecare modificare.


nu sunt deacord.

Pai care e problema? ce daca nu sunt in ordine? cautare dupa nume si....GATA.
daca ai vrea le-ai ordona asa cum vrei functie de rank

Spor la treaba!!!


"I fear the day that technology will surpass our human interaction. The world will have a generation of idiots."
Albert Einstein

IPP
Moderator
Moderator
Mesaje: 4196
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

Mesaj de IPP » Mar Aug 23, 2022 3:32 pm

Buna ziua

@RAMBO
Atasat spre testare gasiti o propunere bazata pe ce am inteles eu:
-Exista un tabel-sursa in Foaie1 care are la un moment dat ceva informatie aferenta unor nume de persoane. Aceasta informatie trebuie sa ajunga in cate un tabel individual aferent fiecarei persoane in parte (aflate in Foaie2), la rularea unui cod macro
-Informatia din tabelul sursa va fi actualizat tot timpul cu alte informatii si acestea vor trebui sa ajunga, nedinamic in tabele de destinatie.

Codul de mai jos (pe care trebuie sa il plasati intr-un modul) se bazeaza pe faptul ca fiecare tabel-destinatie (care e deja creat inainte de rula macro) are numele persoanei din tabelul-sursa.
Aici evident ar putea sa apara probleme pentru ca nu pot exista tabele cu acelasi nume, numele de tabele au niste reguli (de ex. nu se poate folosi spatiu gol) fapt ce ar duce la situatii in care numele din lista-sursa sa nu poata fi scris identic si in denumirea tabelului-destinatie

Cod: Selectaţi tot

Sub ScrieInfo()

'IPP - 23.08.2022

Dim vbTbName As String

For Each c In Range("fluid[NUME]")
 vbTbName = c.Value
 
 If Sheets("Foaie2").ListObjects(vbTbName).DataBodyRange(1, 1) = "" Then
  Sheets("Foaie2").ListObjects(vbTbName).DataBodyRange(1, 1) = c.Offset(0, 1).Value
   Else
  Sheets("Foaie2").ListObjects(vbTbName).DataBodyRange.Offset(1, 0).Value = c.Offset(0, 1).Value
 End If

Next c

End Sub
IP
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Indigo-ONE
Mesaje: 433
Membru din: Mar Dec 11, 2018 8:54 pm

Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

Mesaj de Indigo-ONE » Mar Aug 23, 2022 10:48 pm

Rambo,

IPP ti-a oferit un cod VBA.
Daca mai esti interesat de problema, am sa iti ofer si eu un cod VBA.


"I fear the day that technology will surpass our human interaction. The world will have a generation of idiots."
Albert Einstein

RAMBO
Mesaje: 474
Membru din: Mie Noi 25, 2009 2:17 pm
Localitate: Pitesti

Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

Mesaj de RAMBO » Mie Aug 24, 2022 12:31 pm

@IPP
Functioneaza perfect. Multumesc. Stiu restrictiile referitoare la numele de tabele, nu-i problema.

@Indigo-ONE
-sunt sceptic ca daca puneam 200 de unme ar fi fost mai amanuntit, ci doar mai stufos.
-nu trebuie neaparat tabele in foaie2, dar am pus tabele tocmai ca sa emulez situatia din fisierul original in care sunt tabele si asa trebuie sa ramana. Exact ca sa evit o posibila situatie de geul "aaa... nu merge", ca mai apoi sa realizam ca solutia oferita nu merge cu tabele.
-datele copiate sunt doar rezultatul unor formule.
-nu vad cum as putea rezolva doar cu formule. Ideea este ca periodic (lunar) rulez un cod care preia niste info si le duce in niste tabele. Ceea ce era simplu, deoarece tabelul era rigid iar X-ulescu era intotdeuna pe randul x, iar cand rulam codul ducea info in tabelul y si gata. Dar acum tabelul de interes nu mai are cum sa fie rigid ci se doreste dinamic/fluid, adica de la luna la luna se poate schimba ordinea. OK, am declarat in nomenclator (care va ramane rigid) un ranking, in esenta ordinea persoanelor care se doreste sa apara in tabelul ce face obiectul printarii. Dar atunci cand rulez codul pe randul x nu va mai fi X-ulescu ci altcineva. Iar aici m-am incurcat.
-la cum vad eu, este o linie subtire intre explicatii concise si la obiect, dar care pot trece ca incomplete/insuficiente, si explicatii pana la ultimul detaliu, dar care pot fi interpretate ca stufoase si in care te pierzi.

Indigo-ONE
Mesaje: 433
Membru din: Mar Dec 11, 2018 8:54 pm

Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

Mesaj de Indigo-ONE » Mie Aug 24, 2022 9:21 pm

@Rambo
-sunt sceptic ca daca puneam 200 de unme ar fi fost mai amanuntit, ci doar mai stufos.
Nu trebuie sa exageram acum. Nimeni nu a cerut 200 de nume, dar puteai pune 10-15 nume si atunci se vedea si cum doreai datele in foaie 2.
-nu vad cum as putea rezolva doar cu formule. Ideea este ca periodic (lunar) rulez un cod care preia niste info si le duce in niste tabele.
Se poate lejer cu formule. La aparitia unui nume in prima foaie formula ducea numarul de zile la numele respectiv si aseza numarul de zile, unul sub altul.

Nu ai spus nimic daca apare un nume nou care nu exista in tabelele din foaie 2, cum va fi tratata problema?
Nu uita ca tu lucrezi cu acele date, ai structura lor in fata ochilor, iar cei care doresc sa te ajute, poate nu au nimic in comun cu meseria ta.
Indigo-ONE

IPP ti-a oferit un cod VBA.
Daca mai esti interesat de problema, am sa iti ofer si eu un cod VBA.
Se pare ca nu te-a interesat oferta mea.
Daca te-am suparat, imi cer scuze si promit ca nu am sa mai intervin la vre-una din postarile tale.


"I fear the day that technology will surpass our human interaction. The world will have a generation of idiots."
Albert Einstein

RAMBO
Mesaje: 474
Membru din: Mie Noi 25, 2009 2:17 pm
Localitate: Pitesti

Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

Mesaj de RAMBO » Joi Aug 25, 2022 8:30 am

C'mon nici pomeneala de vreo suparare, orice contradictie e constructiva. In felul asta vad ca am carente in descrierea corecta si completa. Un alt defect este ca plec de la prezumtii. Astfel ca: atunci cand apare un nume nou voi crea un nou tabel aferent noii persoane si plec de la prezumtia ca voi putea modifica codul. Evident noua persoana va fi introdusa si in tabelul din foaie3 (nomenclator) unde i se va aloca manual un rank, practic declar pozitia in care vreau sa fie vizibil in tabelul Fluid. De asemenea am presupus (gresit) ca daca am mai detaliat situatia in postarea anterioara, clar ma intereseaza o solutie de la tine...mai ales ca la o testare mai amanuntita solutia lui IPP este functionala doar pana in momentul cand se intervine in realocarea unor rankuri noi in Rigid[rank] SAU Fluid[Position according to rank]; si da, la o recitire a postarii mele initiale nici nu ai cum sa-ti dai seama ca de fapt aici e tot clinciul. Periodic (posibil lunar sau mai rar) se vor aloca manual alte rankuri in tabelul Rigid, ceea ce va duce la reasezarea automata a numelor din tabelul Fluid (pentru ca acolo continutul este adus cu XLOOKUP) si exact asta il face...fluid. Desi in Fluid[Position according to rank] valorile de rank vor ramane cel mai probabil in ordinea 1,2,3,4...n fara nici o modificare ulterioara in timp, nu pot sa bag mana in foc ca lucrurile vor ramane asa, posibil sa modific si aici manual valoarea de rank, evident cu conditia sa nu existe valori duplicat. Insa, iarasi, presupun ca acest aspect duce la complicarea codului asa ca, daca e dupa mine, ar trebui sa ramana valabila restrictia ca valorile de rank din tabelul Fluid sa fie strict in ordine 1,2,3...n de la primul rand in jos. Am presupus ca pot modifica codul propus de IPP, la urma urmei am mai facut asta de n ori, dar codul este din alta liga.
NOTA DE INCHEIERE: sper ca eu sa fi invatat ceva de aici si pe viitor sa recitesc de mai multe ori cerinta ininte de a apasa trimite. As vrea sa ne consideram reconciliati indiferent de faptul ca vei dori sau nu sa mai propui vreodata o solutie la o postare de a mea. Toate cele bune.

IPP
Moderator
Moderator
Mesaje: 4196
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

Mesaj de IPP » Joi Aug 25, 2022 9:06 am

@RAMBO

Propunerea mea a fost in concordanta cu ce am inteles eu. Sincer, am ignorat rank-urile acelea complet (si foaia respectiva). Macro scrie informatia strict dupa principiu: parcurge fiecare celula din coloana cu nume din tabelul-sursa; fiecare nume se presupune ca are corespondent un tabel avand numele identic. Pe aceasta baza se identifica tabelul destinatie unde se scrie informatia aflata in dreapta numelui din coloana-sursa.
Nu ar trebui sa fie problema daca in coloana sursa un nume apare de mai multe ori. Problema ar trebui sa fie daca exista nume sursa dar fara tabel-destinatie corespondent sau nume de tabele-destinatie care sa fie diferite de cele din coloana cu nume surse si n alte situatii care pot sa apara si care eventual, pentru a evita erori trebuiesc tratate in prealabil.
Pe mine explicatiile dvs. de mai sus nu m-au ajutat sa inteleg de ce codul devine/este nefunctional. Dar nici nu voi insista.

Altfel, la mine este mai simplu: daca nu reusesc sa ofer o solutie, las pe altul, nicio problema. In final este un forum.

IP

Indigo-ONE
Mesaje: 433
Membru din: Mar Dec 11, 2018 8:54 pm

Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

Mesaj de Indigo-ONE » Joi Aug 25, 2022 3:11 pm

OK.
Vezi in atasament fisierul. Citeste cu atentie ce am scris acolo si vezi daca codul VBA face ce iti doresti.
L-am modificat ca sa se adapteze noilor cerinte.

Spor la treaba.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.


"I fear the day that technology will surpass our human interaction. The world will have a generation of idiots."
Albert Einstein

RAMBO
Mesaje: 474
Membru din: Mie Noi 25, 2009 2:17 pm
Localitate: Pitesti

Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide

Mesaj de RAMBO » Mar Aug 30, 2022 1:19 pm

Am parcurs toate scenariile de viata reala si solutia functioneaza foarte bine. Am reusit sa portez codul in fisierul original fara sa-l stric.
NOTA off topic: din acest cod am reusit sa inteleg o chestie pe care eu o faceam printr-o metoda mult mai primitiva. Se refera la acel

Cod: Selectaţi tot

Dim Klr As Long
iar mai apoi

Cod: Selectaţi tot

Klr = Foaie1.Range("A" & Foaie1.Rows.Count).End(xlUp).Row
Multumesc mult.

Scrie răspuns

Înapoi la “Visual Basic for Application (VBA) cu Excel - Intrebari tehnice”