Sortare Automata prin Cod VBA

Informatii despre cum se utilizeaza Microsoft Excel 2003. Calcule, Formule, Functii, Tabele pivot, Analiza datelor, etc
DAN
Mesaje: 76
Membru din: Lun Oct 19, 2009 7:47 pm

Sortare Automata prin Cod VBA

Mesaj de DAN » Mar Mai 04, 2010 11:09 am

Saluatre IPP,
In data de 11.12.2009 mi-ai dat o serie de solutii la problemele mele.
Unele le-am inteles atunci si le-am aplicat, altele din pacate abia acum.
In sheet-ul Clienti mi-ai dat un cod VBA (SUPER OK)pentru sortare automata.
Problema mea este legata de faptul ca acest sheet Clienti are o alta structura fata de cea din 11.12.2009 unde sortarea trebuia sa se execute automat numai in coloana B.
ADICA:
De numele magazinului mai sunt legate si alte informatii cum ar fi: Localitatea, Agent (care se ocupa de magazin), Cod Agent, Canal Vanzare, Tip Magazin, Contract, Vitrina Frigorifica, Serie Vitrina .............. mai sunt inca vreo 25 de coloane cu informatii legate strict de un anumit magazin.
In attach in sheet-ul Clienti am realizat 2 tabele identice pentru a scoate in evidenta problema prezentata mai sus.
DETALIEZ:
In TABELUL din DREAPTA COLOANA L nu are cod de sortare Automata
celula L9 = LERCOM , iar in dreapta in coloanele M9,N9,O9,P9,Q9,R9,S9,T9 sunt caracteristicile acestei firme;
celula L10 = EVRIKA, iar in dreapta in coloanele M10,N10,O10,P10,Q10,R10,S10,T10 sunt caracteristicile acestei firme;

In TABELUL din STANGA COLOANA B ARE cod de sortare Automata SI aici apare problema:
Lercom si Evrika sunt sortata automat dar caracteristicile lor NU.

Tot in data de 11.12.2009 mi-ai mai dat o solutie:
"(in acest exemplu am creat un dynamic range numit Gestionari care a stat la baza listei de validare din celula M16)
pentru testare adaugati alt nume in continuarea listei din foaia Info"
Cum ai creeat acest Range Dinamic ??????

Multumesc anticipat !!!!!!
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

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

Re: Sortare Automata prin Cod VBA

Mesaj de IPP » Mie Mai 05, 2010 7:17 am

Buna dimineata

Asta pentru ca cerinta initiala a fost ca sortarea sa se faca la nivelul coloanelor A si B.
Asadar, pentru exemplul din fisierul atasat de dvs am deschideti VB editorul, am dat dublul click pe eticheta Sheet34(Clienti) si am modificat in codul afisat Columns("A:B") in Columns("A:J") (vedeti si fisierul atasat unde am mai pus cateva randuri de test). Dupa acest model daca in tabelul original veti avea 1+25 de coloane, si presupunand ca totul incepe de pe coloana A, veti modifica in cod: Columns("A:Z")

In ceea ce priveste crearea Dynamic Range v-as intreba mai intai daca ati urmat linkul pe care vi l-am dat in foaia "info" pentru ca acolo veti gasi multe exemple si explicatii foarte utile si relevante. Imi mentin parerea dar iata si cateva incercari de explicatii date pentru exemplul dat de mine:

1. Dati Ctrl+F3 pentru a va aparea lista cu domeniile de celule create in Define Name
2. Dati clic pe denumirea Gestionari unde veti vedea urmatoarea formula de definire:
=OFFSET(info!$A$1;0;0;COUNTA(info!$A:$A))

O astfel de expresie,cel putin in acest caz, (offset) foloseste la extinderea unei selectii dupa cum urmeaza:
info!$A$1 este considerata locatia "ancora" sau daca doriti punct de referinta, fix
0;0; reprezinta locul de unde sa inceapa selectia, exprimat in randuri; coloane. Astfel, in acest caz selectia va incepe de la 0 randuri si 0 coloane fata de ancora. Daca ar fi fost de genul $A$1;1;1 selectia ar fi trebuit sa inceapa la 1 rand si 1 coloana fata de ancora (deci din B2)
COUNTA(info!$A:$A)) numara toate inregistrarile alfanumerice de pe coloana A, rezultatul determinand extinderea selectiei.

Pentru obtinerea rezultatelor dorite e necesar ca inregistrarile noi sa nu aiba randuri libere intre ele si cele precedente

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

DAN
Mesaje: 76
Membru din: Lun Oct 19, 2009 7:47 pm

Re: Sortare Automata prin Cod VBA

Mesaj de DAN » Mie Mai 05, 2010 8:22 am

NEATA
SUPER
MULTUMESC

DAN
Mesaje: 76
Membru din: Lun Oct 19, 2009 7:47 pm

Re: Sortare Automata prin Cod VBA

Mesaj de DAN » Mie Mai 05, 2010 11:55 am

Salutare,
Am o problema cu codul. Cred ca stiu care este problema, am incercat diferite combinatii dar NU a functionat nici una .
Problema este legata de structura tabelului meu actual care este putin diferita de structura tabelului mai vechi => se modifica referinta celulelor. CRED !

In tabelul original Range("B1").Activate => la mine celula B1 =celula goala
In tabelul original: Selection.Sort Key1:=Range("B2") => la mine celula B2 este unita cu celula B3
Pornind de la cele prezentate mai sus am facut urmatoarea modificare :Selection.Sort Key1:=Range("B4"), dar imi da eroare.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

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

Re: Sortare Automata prin Cod VBA

Mesaj de IPP » Mie Mai 05, 2010 2:45 pm

Buna ziua

In ceea ce se poate numi "cap de tabel" din fisierul atasat de dvs aveti o multime de contopiri de celule si la nivel de coloane si la nivel de randuri, conditii in care oricand veti putea sa va intalniti cu erori la sortari, inserari, stergeri de randuri si / sau coloane (si nu e nevoie sa folositi macro pentru a avea probleme). Aveti chiar o coloana goala (coloana T). NU folosesc si mai ales NU recomand astfel de abordari si cred ca am mai scris pe forum despre asta.

Revenind la problema dvs., incerc sa va propun o solutie de compromis dar care nu este prea flexibila si va trebui verificata mai des decat altele, daca veti decide sa o aplicati:

Structura “capului de tabel” ramane ca in fisierul original (inclusiv pastrand coloana aia goala) sortarea urmand sa se faca (tot automat) dar pornind de la selectarea domeniului de celule "A4:AZ3002" sau altul, la alegere pe care insa va trebui sa-l editati manual in codul vba in functie de structura foii de calcul.

Sortarea ca atare se bazeaza pe optiunea in care Excelul e “instiintat” ca are de sortat o lista care NU are cap de tabel.

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

DAN
Mesaje: 76
Membru din: Lun Oct 19, 2009 7:47 pm

Re: Sortare Automata prin Cod VBA

Mesaj de DAN » Mie Mai 05, 2010 3:48 pm

Salutare,
Coloanele libere ( T, X, .... ) pot sa DISPARA asrfel incata tabelul sa nu mai aiba coloane libere. sper sa nu afecteze codul.
Diseara VOI TESTA CODUL .
MULTUMESC!

DAN
Mesaje: 76
Membru din: Lun Oct 19, 2009 7:47 pm

Re: Sortare Automata prin Cod VBA

Mesaj de DAN » Joi Mai 06, 2010 9:28 pm

VICTORIEEEEEEEEEEEEEE !!!
AM REUSIT sa modific un cod VBA cu ajutorul a 2 lucruri si ATAT: INTUITIE combinata cu o anumita logica (care are la baza tot INTUITIA).
Trebuie sa mentionez urmatorul lucru: Cunostintele mele despre programare in VBA = ZERO.
Si culmea: FUNCTIONEAZA !!!!!!!!!!!!!!!!!!!!!!!!!! :o :lol: :D
Asistam si la o premiera:
PRIMA mea CONTRIBUTIE pe acest forum.
Am mai facut un pas spre automatizarea functiei mele.
Aceasta automatizare imi rezolva problema (si nu numai - este afisat comentariul in sheetul Supervizor=alta problema rezolvata) pe care mi-a generat-o functia LOOKUP care pentru a returna rezultatul corect necesita ca informatiile din range sa fie in ordine crecatoare: -3,-2,-1,0,1,2,3,4,5 ...... sau a,b,c,d,e,f,g,h,i,.....
La testari am observat o mica PROBLEMA:
exemplu:
Selectam celula B11. Scriem litera H si dam Enter. Conform setarii excel, dupa enter trebuia selecta celula B12, dar in cazul nostru dupa enter este selectata automat celula B3008 ???
Acelasi lucru se intampla si cazul celui de al doilea bloc de date. Selectam celula I11. Scriem litera T si dam Enter. Conform setarii excel, dupa enter trebuia selecta celula I12, dar in cazul nostru dupa enter este selectata automat celula B3008 ???
Aici se termina cu INTUITIA.
Se poate rezolva ?
Multumesc
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

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

Re: Sortare Automata prin Cod VBA

Mesaj de IPP » Joi Mai 06, 2010 9:37 pm

Buna seara
DAN scrie:Selectam celula B11. Scriem litera H si dam Enter. Conform setarii excel, dupa enter trebuia selecta celula B12, dar in cazul nostru dupa enter este selectata automat celula B3008 ???
Da, aia e setarea normala de Excel... care poate fi modificata oricand cu VBA.... Mergeti la codul de sortare automata. Acolo exista o instructiune care face sa fie selectata alta celula. Daca ati avea un tabel/lista "normala" ar fi trebuit sa fie selectata automat prima celula goala de pe coloana B asa.... nu stiu. Ideea este ca puteti sterge/modifica cum veti gasi de cuviinta acea instructiune

Instructiunea respectiva este

Cod: Selectaţi tot

Range("B65536").End(xlUp).Offset(1, 0).Select
IP

LE Pentru evitarea unei confunzii: ma refeream la instructiunea de mai sus prezenta in macro numit Sortare. Acea instructiune avea menirea (in viziunea mea) de a usura introducerea datelor prin selectarea primei celule libere de pe coloana B. Selectarea "neasteptata" se datoreaza faptului ca aveti formule in celulele de pe randurile 3003-3007 care chiar daca arata ca sunt blank.... nu sunt.

Succes in continuare

DAN
Mesaje: 76
Membru din: Lun Oct 19, 2009 7:47 pm

Re: Sortare Automata prin Cod VBA

Mesaj de DAN » Vin Mai 07, 2010 10:05 am

Salutare,
Am rezolvat problema cu selectarea celulei fara sa modific codul => am sters acele ultime randuri din tabel.
Din pacate a mai aparut o problema. DE CE MI-A FOST FRICA NU AM SCAPAT.
OOOOOFFFFFFFFFFFFFFFFFFFFFFFFF !!!!!!!
In aplicatiile mele toate sheet-urile si workbook-ul sunt blocate. Am facut acest lucru pentru protejarea integritatii aplicatiilor si implicit a bunei functionari a lor.
Deteliez problema:
Am mai creeat un sheet "Supervizor-BlocareCelule" in care randurile 1,2 si 3 au toate celulele BLOCATE.
Toate celelalte linii 4,5,6, ..........65536 au toate celulele NeBlocate.
M-am jucat eu prin cod, dar nu functioneaza. Cred ca mai necesita niste instructiuni. Sunt DEPASIT !!!
Sper din tot sufletul sa existe o solutie VBA la aceasta problema, altfel "m-am inecat ca tiganu la mal"
Multumesc.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

DAN
Mesaje: 76
Membru din: Lun Oct 19, 2009 7:47 pm

Re: Sortare Automata prin Cod VBA

Mesaj de DAN » Vin Mai 07, 2010 10:11 am

Scuze, am uitata sa precizez parola
Parola la sheet "Supervizor-BlocareCelule" este 1

Închis

Înapoi la “Intrebari despre Excel 2003”