Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
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.
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.
-
- Mesaje: 433
- Membru din: Mar Dec 11, 2018 8:54 pm
Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
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...
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
"I fear the day that technology will surpass our human interaction. The world will have a generation of idiots."
Albert Einstein
Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
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
IP
@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
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
-
- Mesaje: 433
- Membru din: Mar Dec 11, 2018 8:54 pm
Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
Rambo,
IPP ti-a oferit un cod VBA.
Daca mai esti interesat de problema, am sa iti ofer si eu un cod VBA.
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
"I fear the day that technology will surpass our human interaction. The world will have a generation of idiots."
Albert Einstein
Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
@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.
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.
-
- Mesaje: 433
- Membru din: Mar Dec 11, 2018 8:54 pm
Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
@Rambo
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.
Daca te-am suparat, imi cer scuze si promit ca nu am sa mai intervin la vre-una din postarile tale.
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.-sunt sceptic ca daca puneam 200 de unme ar fi fost mai amanuntit, ci doar mai stufos.
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 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.
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.
Se pare ca nu te-a interesat oferta mea.Indigo-ONE
IPP ti-a oferit un cod VBA.
Daca mai esti interesat de problema, am sa iti ofer si eu un cod VBA.
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
"I fear the day that technology will surpass our human interaction. The world will have a generation of idiots."
Albert Einstein
Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
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.
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.
Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
@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
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
-
- Mesaje: 433
- Membru din: Mar Dec 11, 2018 8:54 pm
Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
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.
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
"I fear the day that technology will surpass our human interaction. The world will have a generation of idiots."
Albert Einstein
Re: Copy/paste in pozitii rigide dintr-un tabel cu pozitii fluide
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
iar mai apoi
Multumesc mult.
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
Cod: Selectaţi tot
Klr = Foaie1.Range("A" & Foaie1.Rows.Count).End(xlUp).Row