Condividi:        

[Excel] Tramite Macro cerca testo e seleziona input

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

Re: [Excel] Tramite Macro cerca testo e seleziona input

Postdi riclu » 09/09/09 14:52

Grazie Anthony47, fiducia e pazienza ampiamente ben riposte e ripagate.
Ho scaricato e provato quanto da te implementato; ho anche cercato di riepilogare logicamente quanto da te predisposto, ma mi sono intrigato varie volte.
Perchè io possa trarre la maggiore esperienza possibile da quanto tu hai predisposto, mi potresti esplicitare in senso logico come interagiscono la macro tra loro e con le formule contenute nel foglio "Riferimenti"?
Quando il foglio "Rapporti Giornalieri" conterrà record riferiti a diverse partite, come fà il form ad elencarmi solo le "Fasi1" e "Fasi2" legate a detta partita?
Sbaglio o le attuali regole le hai costruite rispettando "uno qualsiasi delle prime tre voci, nessuna delle altre due voci"?

Scusandomi della mia ignoranza, ti ringrazio nuovamente e aspetto fiducioso.

Luca
riclu
Utente Junior
 
Post: 14
Iscritto il: 01/09/09 12:11

Sponsor
 

Re: [Excel] Tramite Macro cerca testo e seleziona input

Postdi Anthony47 » 10/09/09 15:29

Scusa riclu, ma in questo periodo post-ferie mi ritrovo con troppi impegni e sto' sacrificando le risposte sul forum.
Ti dico subito che le formule sul foglio Riferimenti sono SBAGLIATE, perche' implementano un ragionamento sbagliato; parlo delle formule in col AC:AG, il cui scopo e' segnalare se ognuna delle 5 regole e' verificata o no.
La macro interagisce con Riferimenti perche' per ogni riga esaminata posiziona in A1 e B1 di Riferimenti Partita e Descrizione, per consentire alle formule di lavorare sulla combinazione in esame.
La form elenca solo le voci della partita corrente, quella in A1, perche' ho definito 2 range dinamici, CB1Row e CB2Row (avrei fatto meglio a scrivere "Raw", ma solo per uso mnemonico; guarda la sintassi di definizione su foglio excel) che rappresentano la sorgente dato (Raw Source) dei combobox della form.
Appena trovo un po' di tempo ti modifico le formule per rappresentare correttamente "tutti e tre" e "nessuno dei due" (ora la formula non fa nemmeno "uno dei tre").

Ciao e scusa per la lentezza.
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Tramite Macro cerca testo e seleziona input

Postdi riclu » 10/09/09 18:21

Anthony47, devo solo ringraziarti, altro che scusare.
Detto questo effettivamente le formule che tu dici sono, per me, un vero rompicapo logico.
Aspetto con pazienza le formule corrette e se puoi, la spiegazione logica di come "ragionano", tenendo presente che nel frattempo mi sono rivisto la sintassi delle funzioni che lì hai utilizzato (O, E, NON, TROVA, VAL.ERRORE, MAIUSC, LUNGHEZZA, SE, &).

Grazie di nuovo.

Luca
riclu
Utente Junior
 
Post: 14
Iscritto il: 01/09/09 12:11

Re: [Excel] Tramite Macro cerca testo e seleziona input

Postdi Anthony47 » 14/09/09 01:57

Rispetto al file gia' inviato le modifiche sono le seguenti:

a) Il codice da inserire su Modulo 1, al posto dell' attuale
Codice: Seleziona tutto
Public CurCPAdr As String


Sub mygod()
Sheets("RAPPORTI GIORNALIERI").Select
ActiveSheet.UsedRange
Set UsedB = Intersect(ActiveSheet.UsedRange, Range("B1:B" & Rows.Count))
For Each CPart In UsedB
CPart.Range("A1, C1").Copy Destination:=Sheets("RIFERIMENTI").Range("A1")
Sheets("RIFERIMENTI").Range("B1").Value = UCase(Sheets("RIFERIMENTI").Range("b1").Value) & "#-"    '<<<

Application.CutCopyMode = False
If CPart.Value = "" Then GoTo SkiPart
If Not IsNumeric(CPart.Value) Then GoTo SkiPart    '<<<
CPart.Select
If Sheets("RIFERIMENTI").Range("AH1") > 0 Then
Sheets("RIFERIMENTI").Range("AJ1:AK1").Copy
CPart.Offset(0, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Else
CurCPAdr = CPart.Address
UserForm1.Show
End If
SkiPart:
Application.CutCopyMode = False
Next CPart
End Sub

Le righe aggiunte o modificate sono marcate <<<

B) le formule per la validazione delle regole in AC34:AG34 sono rispettivamente:
Codice: Seleziona tutto
=E(NON(VAL.ERRORE(TROVA(MAIUSC(D34);$B$1)));NON(VAL.ERRORE(TROVA(MAIUSC(E34);$B$1)));NON(VAL.ERRORE(TROVA(MAIUSC(F34);$B$1))))*E(VAL.ERRORE(TROVA(MAIUSC(G34)&SE(LUNGHEZZA(G34)=0;"#@#";"");$B$1));VAL.ERRORE(TROVA(MAIUSC(H34)&SE(LUNGHEZZA(H34)=0;"#@#";"");$B$1)))*(O(LUNGHEZZA(D34)>0;LUNGHEZZA(E34)>0;LUNGHEZZA(F34)>0))*($A34=$A$1)
=E(NON(VAL.ERRORE(TROVA(MAIUSC(I34);$B$1)));NON(VAL.ERRORE(TROVA(MAIUSC(J34);$B$1)));NON(VAL.ERRORE(TROVA(MAIUSC(K34);$B$1))))*E(VAL.ERRORE(TROVA(MAIUSC(L34)&SE(LUNGHEZZA(L34)=0;"#@#";"");$B$1));VAL.ERRORE(TROVA(MAIUSC(M34)&SE(LUNGHEZZA(M34)=0;"#@#";"");$B$1)))*(O(LUNGHEZZA(I34)>0;LUNGHEZZA(J34)>0;LUNGHEZZA(K34)>0))*($A34=$A$1)
=E(NON(VAL.ERRORE(TROVA(MAIUSC(N34);$B$1)));NON(VAL.ERRORE(TROVA(MAIUSC(O34);$B$1)));NON(VAL.ERRORE(TROVA(MAIUSC(P34);$B$1))))*E(VAL.ERRORE(TROVA(MAIUSC(Q34)&SE(LUNGHEZZA(Q34)=0;"#@#";"");$B$1));VAL.ERRORE(TROVA(MAIUSC(R34)&SE(LUNGHEZZA(R34)=0;"#@#";"");$B$1)))*(O(LUNGHEZZA(N34)>0;LUNGHEZZA(O34)>0;LUNGHEZZA(P34)>0))*($A34=$A$1)
=E(NON(VAL.ERRORE(TROVA(MAIUSC(S34);$B$1)));NON(VAL.ERRORE(TROVA(MAIUSC(T34);$B$1)));NON(VAL.ERRORE(TROVA(MAIUSC(U34);$B$1))))*E(VAL.ERRORE(TROVA(MAIUSC(V34)&SE(LUNGHEZZA(V34)=0;"#@#";"");$B$1));VAL.ERRORE(TROVA(MAIUSC(W34)&SE(LUNGHEZZA(W34)=0;"#@#";"");$B$1)))*(O(LUNGHEZZA(S34)>0;LUNGHEZZA(T34)>0;LUNGHEZZA(U34)>0))*($A34=$A$1)
=E(NON(VAL.ERRORE(TROVA(MAIUSC(X34);$B$1)));NON(VAL.ERRORE(TROVA(MAIUSC(Y34);$B$1)));NON(VAL.ERRORE(TROVA(MAIUSC(Z34);$B$1))))*E(VAL.ERRORE(TROVA(MAIUSC(AA34)&SE(LUNGHEZZA(AA34)=0;"#@#";"");$B$1));VAL.ERRORE(TROVA(MAIUSC(AB34)&SE(LUNGHEZZA(AB34)=0;"#@#";"");$B$1)))*(O(LUNGHEZZA(X34)>0;LUNGHEZZA(Y34)>0;LUNGHEZZA(Z34)>0))*($A34=$A$1)
Non e' cambiata la formula di col AH.
Da riga 34 copia le formule nelle altre righe contenenti le definizioni.

C) Per validare la combinazione Altro/Altro basta inserire in colonna D i due caratteri "#-" (senza virgolette).

Al momento le regole inserite nel foglio che avevi postato sono abbastanza poche, e solo 7 record vengono diversi da Altro/Altro; devi quindi definire nuove regole (ne hai 5 per ogni combinazione, a disposizione): ricorda che le prime tre colonne sono di stringhe che devono essere tutte presenti (cella vuota=valore presente) e le altre due devono ambedue mancare (cella vuota=ignora).

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Tramite Macro cerca testo e seleziona input

Postdi riclu » 15/09/09 10:33

Anthony47, GRAZIE!!!
Eseguite le modifiche ed implementate con piu' accortezza le REGOLE, il tutto funziona perfettamente.
Ho fatto in modo che quando la procedura non abbina automaticamente mi visualizzi il Form per l'input manuale.
La finestra si posiziona molto spesso sopra la descrizione da leggere per ipotizzare l'abbinamento, ed a questo punto ti chiederei se nol FORM non sia possibile "INSERIRE LA DESCRIZIONE (CAMPO ATTIVITA') DEL RECORD DA ABBINARE".
Grazie di nuovo.

Luca
riclu
Utente Junior
 
Post: 14
Iscritto il: 01/09/09 12:11

Re: [Excel] Tramite Macro cerca testo e seleziona input

Postdi Anthony47 » 15/09/09 15:24

Sono pigro, preferisco aggiungere queste due righe di codice per posizionare la form in alto a dx:
Codice: Seleziona tutto
UserForm1.Top = Application.Top
UserForm1.Left = Application.Left + Application.Width - UserForm1.Width

Vanno aggiunte nella Private Sub UserForm_Activate(), come prime due istruzioni: dall' editor vba, doppioclick su UserForm1 nel frame ProgettoVba, F7, trova la macro Private Sub UserForm_Activate() e inserisci.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Tramite Macro cerca testo e seleziona input":


Chi c’è in linea

Visitano il forum: Nessuno e 94 ospiti