Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Selezione tipo-sottotipo-codice-sottocodice da elenco

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

Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi alby60 » 30/11/10 01:36

Ciao, ho una tabella con questi dati
Tipo, Sottotipo, Codice, Sottocodice
Tipo1, sottotipo1, codice-a, sottocodice-1
Tipo1, sottotipo1, codice-b, sottocodice-1
Tipo1, sottotipo1, codice-b, sottocodice-2
Tipo1, sottotipo2, codice-a1, sottocodice-11
Tipo1, sottotipo2, codice-a1, sottocodice-12
Tipo1, sottotipo2, codice-a1, sottocodice-13
Tipo2, sottotipo4, codice-a, sottocodice-2
Tipo2, sottotipo6, codice-e, sottocodice-3
Tipo2, sottotipo6, codice-h, sottocodice-5


Tutti i dati sono diverse centinaia di righe e vengono ricaricati ogni sei mesi con cambiamenti.
Vorrei nella cella A2 avere la possibilità di scegliere il Tipo ed avere nella cella C2 tutti i sottotipi del tipo scelto, poi in D2 avere tutti i codici del tipo-sottotipo scelto ed infine in E2 avere tutti i sottocodici del tipo-sottotipo-codice scelto. Ho provato con la convalida ma come faccio a dargli un elenco di tipi se l’elenco cambia e poi i tipi sono 30-40, i sottotipi 60-70, i codici 100-150 ed i sottocodici 200-300, i numeri sono indicativi perché la tabella viene aggiornata due volte l’anno.
Ho descritto cercando di dire tutto e di essere chiaro, spero di esserci riuscito. Il lavoro che devo realizzare è molto più complesso ma al momento questa parte non riesco a farla e sono in un pantano. Chi mi può aiutare visto che non ho trovato esempi da poter adattare. Grazie anticipato
Alby
alby60
Utente Junior
 
Post: 76
Iscritto il: 18/11/10 01:04

Sponsor
 

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi Flash30005 » 30/11/10 02:04

Potresti usare i Filtri
Selezioni la cella A1 e sul Menu Dati selezioni Filtro-> Automatico

Con il filtro nella riga 1 potrai scegliere qualsiasi Tipo, di questo i Sottotipi, etc etc.

Fai sapere se va bene così altrimenti posta ancora

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi ricky53 » 30/11/10 18:52

Ciao Alby,
da quanto hai scritto deduco che tu abbia dei dati da selezionare, mediante la convalida, e li vuoi selezionare utilizzando la tabella dati ma vuoi avere una convalida con elenchi dinamici (che cambiano al cambiare del dato scelto)?
E' così?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi alby60 » 30/11/10 22:57

Ciao, grazie per l'interessamento.
Flash30005: i dati sono in un foglio e la selezione la devo fare in un altro foglio, con un filtro non posso farlo.
Ricky53: si è una cosa molto simile a questo ciò che devo fare. Come hai detto tu, si devo fare una convalida con elenchi dinamici.
Una volta selezionati i dati devo fare la stampa delle richieste di acquisto dei prodotti scelti e devo riportare quanto è stato selezionato insieme al numero di pezzi ed al costo unitario ed altre informazioni presenti in un foglio specifico. Quello che devo fare è dopo aver scelto un tipo ottenere l’elenco dei sottotipi del tipo scelto, scelto un sottotipo avere l’elenco dei codici corrispondenti, scelto un codice avere l’elenco dei sottocodici collegati. Pensavo di utilizzare la convalida dati ma non sono riuscito a trovare il modo di farlo.
La mia tabella è nel foglio "Elenco dati” le selezioni sono fatte nel foglio “Richiesta” nelle celle A2, C2, D2 e E2, anche la stampa la faccio nel foglio “Richiesta”. Esiste un modo per fare quello che ho scritto?
Alby
alby60
Utente Junior
 
Post: 76
Iscritto il: 18/11/10 01:04

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi Flash30005 » 01/12/10 05:02

alby60 ha scritto:Flash30005: i dati sono in un foglio e la selezione la devo fare in un altro foglio, con un filtro non posso farlo

Beh, non avevi detto che i dati si trovavano in un altro foglio! :roll:

Comunque ti invio una macro
devi aggiungere un altro foglio alla tua cartella e chiamarlo "Appoggio"
inserisci in un modulo
questa macro
Codice: Seleziona tutto
Sub CreaElencoA()
Application.ScreenUpdating = False
 URED = Worksheets("Elenco Dati").Range("A" & Rows.Count).End(xlUp).Row
 URA = Worksheets("Appoggio").Range("A" & Rows.Count).End(xlUp).Row
 Worksheets("Richiesta").Range("C2:E2").ClearContents
 Worksheets("Appoggio").Range("A2:E" & URED).ClearContents

    For RRE = 2 To URED
        Esiste = 0
        TE = Worksheets("Elenco Dati").Range("A" & RRE).Value
        URA = Worksheets("Appoggio").Range("A" & Rows.Count).End(xlUp).Row + 1
        For RRA = 2 To URA
            TA = Worksheets("Appoggio").Range("A" & RRA).Value
            If TE = TA Then Esiste = 1
        Next RRA
        If Esiste = 0 Then Worksheets("Elenco Dati").Range("A" & RRE).Copy Destination:=Worksheets("Appoggio").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    Next RRE
    URA = Worksheets("Appoggio").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Appoggio").Select
    Range("A2:A3").Select
    ActiveWorkbook.Names.Add Name:="TipoA", RefersToR1C1:="=Appoggio!R2C1:R" & URA & "C1"
    CreaElencoC
    Application.ScreenUpdating = True
End Sub

Sub CreaElencoC()
Application.ScreenUpdating = False
URED = Worksheets("Elenco Dati").Range("C" & Rows.Count).End(xlUp).Row
URA = Worksheets("Appoggio").Range("C" & Rows.Count).End(xlUp).Row
Worksheets("Appoggio").Range("C2:E" & URED).ClearContents
Worksheets("Richiesta").Range("D2:E2").ClearContents

    For RRE = 2 To URED
    If Worksheets("Elenco Dati").Range("A" & RRE).Value = Worksheets("Richiesta").Range("A2").Value Then
        Esiste = 0
        STE = Worksheets("Elenco Dati").Range("C" & RRE).Value
        URA = Worksheets("Appoggio").Range("C" & Rows.Count).End(xlUp).Row + 1
        For RRA = 2 To URA
            STA = Worksheets("Appoggio").Range("C" & RRA).Value
            If STE = STA Then Esiste = 1
        Next RRA
        If Esiste = 0 Then Worksheets("Elenco Dati").Range("C" & RRE).Copy Destination:=Worksheets("Appoggio").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0)
    End If
    Next RRE
    URA = Worksheets("Appoggio").Range("C" & Rows.Count).End(xlUp).Row
    Sheets("Appoggio").Select
    Range("C2:C3").Select
    ActiveWorkbook.Names.Add Name:="sottotipo", RefersToR1C1:="=Appoggio!R2C3:R" & URA & "C3"
    CreaelencoD
    Application.ScreenUpdating = True
End Sub
 Sub CreaelencoD()
 Application.ScreenUpdating = False
URED = Worksheets("Elenco Dati").Range("D" & Rows.Count).End(xlUp).Row
URA = Worksheets("Appoggio").Range("D" & Rows.Count).End(xlUp).Row
 Worksheets("Appoggio").Range("D2:E" & URED).ClearContents
  Worksheets("Richiesta").Range("E2").ClearContents
    For RRE = 2 To URED
    If Worksheets("Elenco Dati").Range("A" & RRE).Value = Worksheets("Richiesta").Range("A2").Value And Worksheets("Elenco Dati").Range("C" & RRE).Value = Worksheets("Richiesta").Range("C2").Value Then
        Esiste = 0
        CoE = Worksheets("Elenco Dati").Range("D" & RRE).Value
        URA = Worksheets("Appoggio").Range("D" & Rows.Count).End(xlUp).Row + 1
        For RRA = 2 To URA
            CoA = Worksheets("Appoggio").Range("D" & RRA).Value
            If CoE = CoA Then Esiste = 1
        Next RRA
        If Esiste = 0 Then Worksheets("Elenco Dati").Range("D" & RRE).Copy Destination:=Worksheets("Appoggio").Cells(Rows.Count, 4).End(xlUp).Offset(1, 0)
    End If
    Next RRE
    URA = Worksheets("Appoggio").Range("C" & Rows.Count).End(xlUp).Row
    Sheets("Appoggio").Select
    Range("D2:D3").Select
    ActiveWorkbook.Names.Add Name:="codice", RefersToR1C1:="=Appoggio!R2C4:R" & URA & "C4"
    Call CreaelencoE
    Application.ScreenUpdating = True
 End Sub
 Sub CreaelencoE()
 Application.ScreenUpdating = False
 URED = Worksheets("Elenco Dati").Range("E" & Rows.Count).End(xlUp).Row
 URA = Worksheets("Appoggio").Range("E" & Rows.Count).End(xlUp).Row
 Worksheets("Appoggio").Range("E2:E" & URED).ClearContents

    For RRE = 2 To URED
    If Worksheets("Elenco Dati").Range("A" & RRE).Value = Worksheets("Richiesta").Range("A2").Value And Worksheets("Elenco Dati").Range("C" & RRE).Value = Worksheets("Richiesta").Range("C2").Value And Worksheets("Elenco Dati").Range("D" & RRE).Value = Worksheets("Richiesta").Range("D2").Value Then
        Esiste = 0
        ScE = Worksheets("Elenco Dati").Range("E" & RRE).Value
        URA = Worksheets("Appoggio").Range("E" & Rows.Count).End(xlUp).Row + 1
        For RRA = 2 To URA
            ScA = Worksheets("Appoggio").Range("E" & RRA).Value
            If ScE = ScA Then Esiste = 1
        Next RRA
        If Esiste = 0 Then Worksheets("Elenco Dati").Range("E" & RRE).Copy Destination:=Worksheets("Appoggio").Cells(Rows.Count, 5).End(xlUp).Offset(1, 0)
    End If
     Next RRE
    URA = Worksheets("Appoggio").Range("C" & Rows.Count).End(xlUp).Row
    Sheets("Appoggio").Select
    Range("E2:E3").Select
    ActiveWorkbook.Names.Add Name:="sottocodice", RefersToR1C1:="=Appoggio!R2C5:R" & URA & "C5"
    Sheets("Richiesta").Select
    Application.ScreenUpdating = True
 End Sub



Nello script del foglio Richiesta inserisci questo codice
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
CheckArea = "A2:E2"
If Not Application.Intersect(Target, Range(CheckArea)) Is Nothing Then
    If (Selection.Rows.Count + Selection.Columns.Count) > 2 Then Exit Sub
    If Target.Address = "$A$2" Then Call CreaElencoA
    If Target.Address = "$C$2" Then Call CreaElencoC
    If Target.Address = "$D$2" Then Call CreaelencoD
    If Target.Address = "$E$2" Then Call CreaelencoE
End If
End Sub


Nella cella A2 di richiesta convalida come elenco = TipoA
Nella cella C2 di richiesta convalida come elenco = sottotipo
Nella cella D2 di richiesta convalida come elenco = Codice
Nella cella E2 di richiesta convalida come elenco = Sottocodice

Dovrebbe funzionare... Altrimenti scarica questo file ;)

fai sapere
ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi alby60 » 01/12/10 08:42

Grazie Flash30005, ho scaricato il file. Ho visto il codice che hai scritto e me lo voglio studiare per bene. E' un bel lavoro, sei stato eccezionale. Ho fatto alcune prove e funziona. Ho inserito altre righe all''elenco che hai scritto nel foglio "Elenco dati", per esempio, per il tipo2 inserendo
Tipo2 sottotipo6 codice-e sottocodice-4a
Tipo2 sottotipo6 codice-e sottocodice-4b
non compaiono nella convalida i dati nuovi nel sottocodice ma compaiono solo i primi due che c'erano prima. Continuo le prove e ti aggiorno.
alby60
Utente Junior
 
Post: 76
Iscritto il: 18/11/10 01:04

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi alby60 » 01/12/10 09:41

Ciao, ho fatto altre prove ed ho controllato le istruzioni e questa parte di CreaelencoE
URA = Worksheets("Appoggio").Range("C" & Rows.Count).End(xlUp).Row
Sheets("Appoggio").Select
Range("E2:E3").Select
ActiveWorkbook.Names.Add Name:="sottocodice", RefersToR1C1:="=Appoggio!R2C5:R" & URA & "C5"

l'ho modificata in
URA = Worksheets("Appoggio").Range("E" & Rows.Count).End(xlUp).Row
Sheets("Appoggio").Select
' Range("E2:E3").Select TOLTA
ActiveWorkbook.Names.Add Name:="Sottocodice", RefersToR1C1:="=Appoggio!R2C5:R" & URA & "C5"

adesso funziona con i nuovi dati. Provo anche il resto nel tipo-sottotipo-codice. Bel modo di scrivere il codice si capisce bene. La mia consoscenza del VBA è poca ma conoscevo il basic del Commodore e mi ci sono ritrovato. Grazie di nuovo. Ti faccio sapere come vanno le altre prove.
alby60
Utente Junior
 
Post: 76
Iscritto il: 18/11/10 01:04

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi Flash30005 » 01/12/10 11:16

Mi sembra strano che non appaiano le voci, non ho avuto modo di testarlo a lungo (vista l'ora)

Comunque, avrai capito che, nel foglio Richiesta la cella più a sinistra aggiorna l'elenco di quelle più a destra
A2 aggiorna se stessa e tutte le altre: (C2, D2 e E2)
C2 aggiorna se stessa e D2, E2
D2 se stessa e E2
E2 solo se stessa

Mi fa piacere che il Vba ti sta diventando familiare così potrai dare un contributo anche tu in questo Forum :)

In caso di problemi posta ancora

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi alby60 » 02/12/10 00:31


Ciao Flash 30005, avevi scritto sempre la stessa colonna nelle macro, in CreaelencoE nell’istruzione

URA = Worksheets("Appoggio").Range("C" & Rows.Count).End(xlUp).Row

al posto di C deve esserci E.

Cosa da nulla l’ho cambiato, anche nelle altre macro e funziona.

Si con il VBA mi ci ritrovo e magari fra un po’ di tempo potrò anch’io aiutare qualcuno come adesso state aiutando me.

Per me va bene così, grazie di nuovo.

Solo mi sarebbe piaciuto risolvere con delle formule e non con delle macro
alby60
Utente Junior
 
Post: 76
Iscritto il: 18/11/10 01:04

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi Flash30005 » 03/12/10 03:43

alby60 ha scritto:avevi scritto sempre la stessa colonna nelle macro, in CreaelencoE nell’istruzione

URA = Worksheets("Appoggio").Range("C" & Rows.Count).End(xlUp).Row

al posto di C deve esserci E.


Ricontrollando tutto con calma va corretta la stessa riga-codice della macro CreaElencoD

Per quanto riguarda le formule penso si possa fare
Tempo fa, Anthony pubblicò un'interessantissima formula riguardo alla creazione di un elenco di nomi non ripetuti
lavorandoci su potresti adattarla alla tua esigenza e pertanto la replico.
nel foglio1 da A1 verso il basso hai l'elenco dei nomi originali (anche duplicati)
selezioni l'intero elenco e lo nomini "elenconomi"
nel foglio2 in A1 inseirai questa formula
Codice: Seleziona tutto
=SE((PICCOLO(CONTA.SE(SCARTO(elenconomi;0;0;RIF.RIGA(INDIRETTO("1:"&RIGHE(elenconomi)));1);elenconomi)+RIF.RIGA(elenconomi)/10000;RIF.RIGA(A1)))<2;SCARTO(SCARTO(elenconomi;0;0;1;1);CONFRONTA(PICCOLO(CONTA.SE(SCARTO(elenconomi;0;0;RIF.RIGA(elenconomi)-RIF.RIGA(SCARTO(elenconomi;0;0;1;1))+1;1);elenconomi)+RIF.RIGA(elenconomi)/10000;RIF.RIGA(A1));CONTA.SE(SCARTO(elenconomi;0;0;RIF.RIGA(INDIRETTO("1:"&RIGHE(elenconomi)));1);elenconomi)+RIF.RIGA(elenconomi)/10000;0)-1;0);"")

una volta "incollata" nella cella premi contemporaneamente CTRL+MAIU+ENTER
e avrai il primo nome, poi trascini verso il basso, fino a quanto serve
(il valore 10000 si riferisce al numero di righe, adattalo alle tue esigenze)

Come vedi la formula è abbastannza complessa
Complessità che aumenta per la creazione delle colonne successive C, D, E considerando che quest'ultime dovranno riferirsi al risultato ottenuto dalle colonne precedenti.

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi alby60 » 03/12/10 20:40

Ciao Flash30005, grazie ancora per il tuo nuovo interessamento. Avevo già corretto tutte le colonne nelle macro e tutto funzionava bene. Che formulona non sono certo di volerla-poterla-saperla utilizzare vista la lunghezza-complessità ma un tentativo lo farò e ti comunicherò i risultati. Grazie di nuovo.
Alby
alby60
Utente Junior
 
Post: 76
Iscritto il: 18/11/10 01:04

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi Anthony47 » 05/12/10 19:46

Premetto che secondo me la soluzione piu' semplice sarebbe stata quello del Filtro (si filtra l' elenco secondo i criteri, si copia il risultato nell' area che ti interessa, si elimina il filtro; tutte cose possibili tramite macro autoregistrata e minime modifiche), o del Filtro avanzato (si crea sul foglio target l' elenco dei criteri, si attiva Filtro avanzato con l' opzione Copia in altra posizione; possibile con macro registrata senza bisogno di modifiche). Un possibile ostacolo al Filtro avanzato e' che il filtro seleziona le celle che "iniziano con" la voce di criterio.

Cio' detto, per l' uso di formule piu' che la discussione citata da Flash (viewtopic.php?f=26&t=80964, guardala perche' e' possibile anche una semplificazione alla formula), penso che dovresti guardare quest' altra: viewtopic.php?p=472685#p472518
Una discussione in verita' un po' travagliata, ma alla fine risolta.
La discussione replicava i dati con 1 solo criterio di ricerca, che veniva inserito in B5, e la prima formula (uso la versione semplificata) era
Codice: Seleziona tutto
=PICCOLO(SE('next delivery'!$M$1:$M$33=$B$5;RIF.RIGA('next delivery'!$M$1:$M$33);"");RIGHE($A$40:A40))
Contr-Maiusc-Enter.
L' intervallo da filtrare e' in 'next delivery'!$M$1:$M$33, la formula va in A40.

Avendo tu piu' filtri, che supponiamo metterai in A5, B5, C5, userai una formula del tipo
Codice: Seleziona tutto
=PICCOLO(SE(('next delivery'!$A$1:$A$33=$A$5)*( 'next delivery'!$B$1:$B$33=$B$5)*( 'next delivery'!$C$1:$C$33=$C$5);RIF.RIGA('next delivery'!$M$1:$M$33);"");RIGHE($A$40:A40))

Ho immaginato che i dati da selezionare siano in 'next delivery'!$A$1:$C$33

Ci sono poi altre formule che estraggono dall' elenco di origine le colonne desiderate usando il risultato di questa prima formula, ma sono praticamente le stesse, a parte nome foglio e coordinate dell' elenco; sto' parlando del secondo gruppo di formule che trovi su questo post: viewtopic.php?p=472685#p472552

Penso che non dovresti aver difficolta' ad adeguare ai tuoi dati, comunque fai sapere dove arrivi.

Ciao a tutti
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Selezione tipo-sottotipo-codice-sottocodice da elenco

Postdi alby60 » 06/12/10 23:41

Ciao
Flash3005 con la tua formulona non sono riuscito a ottenere il risultato che volevo.
Anhony, caspita quante cose. Grazie anticipato. Al più presto farò le prove con quanto mi hai scritto. No il filtro, anche se con una macro, non penso sia comodo utilizzarlo dovendo produrre la distinta delle richiesta di acquisto, l’ho provato ma non mi soddisfa. Vedo cosa riesco a fare con le formule, certamente da questo qualcosa imparerò.
Alby
alby60
Utente Junior
 
Post: 76
Iscritto il: 18/11/10 01:04


Torna a Applicazioni Office Windows


Topic correlati a "Selezione tipo-sottotipo-codice-sottocodice da elenco":


Chi c’è in linea

Visitano il forum: Nessuno e 26 ospiti