cod vba de copiere conditionata
cod vba de copiere conditionata
Buna ziua
Momentan lucrezcu un cod vba ce selecteaza datele dintr un tabel si le copiaza undeva departe in celalalt tabel si apoi le sorteaza dupa data. functioneaza e ok dar taabelul s a cam marit si se v a mari in continuare iar sortarea dureaza 1 min acuma. E cam mult. problema e ca datele care le copiaza sant cu spatii intre ele iar aceste spatii trebuie sa dispara. Pentru a intelege mai bine problema o sa atasez si un fisier.
Cu speranta ca ma v eti ajuta cum a ti facut o si pana acum v a multumesc anticipat.
Momentan lucrezcu un cod vba ce selecteaza datele dintr un tabel si le copiaza undeva departe in celalalt tabel si apoi le sorteaza dupa data. functioneaza e ok dar taabelul s a cam marit si se v a mari in continuare iar sortarea dureaza 1 min acuma. E cam mult. problema e ca datele care le copiaza sant cu spatii intre ele iar aceste spatii trebuie sa dispara. Pentru a intelege mai bine problema o sa atasez si un fisier.
Cu speranta ca ma v eti ajuta cum a ti facut o si pana acum v a multumesc anticipat.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: cod vba de copiere conditionata
Buna,
Nu inteleg prea bine ce doriti.
1. Doriti un alt cod care sa copieze datele in al doilea tabel fara liniile "goale"?
Aveti in exemplul atasat linia 4 o astfel de linie se copiaza? Sau doar liniile cu data? Sau doar liniile cu valori in toate campurile?
2. Doriti o solutie care sa "se miste" mai cu spor cand sorteaza datele?
In acest caz, avand in vedere ca dimensiunea tabelului va creste in continuare, cred ca ar fi bine sa luati in calcul si varianta copierii datelor intr-o baza de date.
Daca doriti ca datele sa ramana in Excel ar fi bine de cunoscut toate datele problemei pentru a vedea ce posibilitati sunt de fragmentare a acelui tabel.
Nu inteleg prea bine ce doriti.
1. Doriti un alt cod care sa copieze datele in al doilea tabel fara liniile "goale"?
Aveti in exemplul atasat linia 4 o astfel de linie se copiaza? Sau doar liniile cu data? Sau doar liniile cu valori in toate campurile?
2. Doriti o solutie care sa "se miste" mai cu spor cand sorteaza datele?
In acest caz, avand in vedere ca dimensiunea tabelului va creste in continuare, cred ca ar fi bine sa luati in calcul si varianta copierii datelor intr-o baza de date.
Daca doriti ca datele sa ramana in Excel ar fi bine de cunoscut toate datele problemei pentru a vedea ce posibilitati sunt de fragmentare a acelui tabel.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.
Re: cod vba de copiere conditionata
Multumesc pentru promtitudine.
Da aveti dreptate. Acolo in poza e o gresala. Randul trebuie sa fie complect si nu doar o pozitie sau doua. Am gresit eu cand am schimbat literele sa nu fie identice. Practic un rand contine: data, denumirea, destinatia,cantitatea, tipul produsului si lotul. Cand am deschis acest topic m am gandit la un alt cod de copiere care sa caute daca pe coloana M exista date si apoi sa copie randul in celalalt tabel iar daca nu gaseste sa treaca la urmatorul rand pana termina (practic in tabelul de copiat sant aprocsimativ 150 randuri), asa eliminand sortarea (unde sta prea mult). Tabelul in care se copiaza il folosesc ca si baza de date. In felul acesta dupa fiecare copiere imi arata cat a iesit din produs, cat mai am pe stoc, ce loturi si ce cantitati.... etc.
Daca exista o posibilitate ca sortarea sa se faca mai rapid si sa ramana asa e ok, practic trebuie sa castig timp.
Da aveti dreptate. Acolo in poza e o gresala. Randul trebuie sa fie complect si nu doar o pozitie sau doua. Am gresit eu cand am schimbat literele sa nu fie identice. Practic un rand contine: data, denumirea, destinatia,cantitatea, tipul produsului si lotul. Cand am deschis acest topic m am gandit la un alt cod de copiere care sa caute daca pe coloana M exista date si apoi sa copie randul in celalalt tabel iar daca nu gaseste sa treaca la urmatorul rand pana termina (practic in tabelul de copiat sant aprocsimativ 150 randuri), asa eliminand sortarea (unde sta prea mult). Tabelul in care se copiaza il folosesc ca si baza de date. In felul acesta dupa fiecare copiere imi arata cat a iesit din produs, cat mai am pe stoc, ce loturi si ce cantitati.... etc.
Daca exista o posibilitate ca sortarea sa se faca mai rapid si sa ramana asa e ok, practic trebuie sa castig timp.
Re: cod vba de copiere conditionata
Buna,
Aveti un exemplu de cod care copiaza doar liniile care au valoare in prima coloana (data). Puteti adapta conditia din IF pentru alta varianta.
Ati spus ca datele sursa sunt rezultatul unor formule, deci datele sursa nu pot fi sterse odata cu copierea lor. In acest caz trebuie sa aveti in vedere si gasirea unei solutii de a nu copia aceleasi date in mod repetat.
In ceea ce priveste viteza de sortare, nu exista solutie mai rapida decat functia de sortare a Excelului.
Cred ca singura solutie (daca nu doriti sa folositi Access) este fragmentarea datelor in fisiere separate pe fiecare luna.
Aveti un exemplu de cod care copiaza doar liniile care au valoare in prima coloana (data). Puteti adapta conditia din IF pentru alta varianta.
Ati spus ca datele sursa sunt rezultatul unor formule, deci datele sursa nu pot fi sterse odata cu copierea lor. In acest caz trebuie sa aveti in vedere si gasirea unei solutii de a nu copia aceleasi date in mod repetat.
Cod: Selectaţi tot
Sub SalvareDate()
Dim rSursa As Range, rDestinatie As Range
Dim nrCol As Integer
Dim ultimaLinie As Long
Dim i As Long, j As Long
Dim wsS As Worksheet, wsD As Worksheet
'---- setare parametrii --------------------------
'prima celula stg-sus din datele sursa
Set rSursa = ThisWorkbook.Sheets("Sheet1").Range("M1")
'prima celula stg-sus din datele destinatie
Set rDestinatie = ThisWorkbook.Sheets("Sheet1").Range("B1")
nrCol = 6 'numar coloane
'-------------------------------------------------
Set wsS = rSursa.Parent
Set wsD = rDestinatie.Parent
Application.ScreenUpdating = False
i = wsD.Cells(wsD.Rows.Count, rDestinatie.Column).End(xlUp).Row + 1
For j = rSursa.Row To wsS.Cells(wsS.Rows.Count, rSursa.Column).End(xlUp).Row
If Len(wsS.Cells(j, rSursa.Column).Value) > 0 Then
wsS.Cells(j, rSursa.Column).Resize(1, nrCol).Copy
wsD.Cells(i, rDestinatie.Column).PasteSpecial (xlPasteValues)
i = i + 1
End If
Next j
Application.CutCopyMode = False
Set wsS = Nothing
Set wsD = Nothing
Set rSursa = Nothing
Set rDestinatie = Nothing
End Sub
Cred ca singura solutie (daca nu doriti sa folositi Access) este fragmentarea datelor in fisiere separate pe fiecare luna.
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.
Re: cod vba de copiere conditionata
Multumesc mult
L am adaprat cerintelor mele si functioneaza. Am castigat cateva secunde bune si cred ca sant sanse mari sa nu creasca secundele fiind ca e eliminata sortarea si chear daca baza de date creste timpul banuiesc ca v a ramane acelasi. Daca v a merge tot asa este foarte bine.
Inca o data va multumesc.
L am adaprat cerintelor mele si functioneaza. Am castigat cateva secunde bune si cred ca sant sanse mari sa nu creasca secundele fiind ca e eliminata sortarea si chear daca baza de date creste timpul banuiesc ca v a ramane acelasi. Daca v a merge tot asa este foarte bine.
Inca o data va multumesc.