Menù con riferimenti



  • Menù con riferimenti
    di Fausto (utente non iscritto) data: 24/06/2012

    Nel foglio4 è stato inserito un menù a tendina dal quale si evince che si può scegliere di inserire solamente un nome (pippo) del foglio1.
    lo scopo invece è quello di ampliare il menù e contenere quindi anche i nomi (pluto e paperino) contenuti nei fogli2 e 3.
    e' possibile farlo?



  • di Harrybosch data: 25/06/2012

    Ciao fausto
    ti interessa la soluzione con l'uso delle formule oppure la soluzione con l'utilizzo del codice vba?
    fammi sapere quale delle due vorresti applicare o se ti interessano entrambe
    ciao, vanni



  • di Harrybosch data: 25/06/2012

    Ciao fausto
    ti scrivo una variante del codice che ti ho postato nell'altra tua richiesta.
    in pratica con questo codice riporti nella cella a1 del foglio dove esegui la macro, l'elenco di tutti i valori che ci sono nella cella a1 di tutti gli altri fogli (anche di quelli che aggiungi successivamente)

    ciao, vanni
     
    Sub variante_elenco()
    
    Dim ListaNomi2 As String
    Dim Foglio As Object
    
    Range("a1").Select
    
    For Each Foglio In Sheets
             ListaNomi2 = ListaNomi2 & Foglio.Cells(1, 1) & ","
        Next Foglio
      
       ListaNomi2 = Left(ListaNomi2, Len(ListaNomi2) - 1)
        
         With Selection.Validation
             .Delete
             .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
              Operator:=xlBetween, Formula1:=ListaNomi2
             .IgnoreBlank = True
             .InCellDropdown = True
             .InputTitle = ""
             .ErrorTitle = ""
             .InputMessage = ""
             .ErrorMessage = ""
             .ShowInput = True
             .ShowError = True
         End With
    
    End Sub



  • di Fausto (utente non iscritto) data: 26/06/2012

    Ciao vanni
    ti ringrazio per l'interessamento. la macro funziona a dovere.
    adesso però bisogna affinare il risultato:
    - la cella dove deve "pescare" i dati non è la a1, bensì la e1.
    - i dati vanno "pescati" in tutti i fogli, tranne uno perchè completamente diverso dagli altri e quindi va escluso.
    -e' possibile che la macro si aggiorni automaticamente ogni volta che viene aperta la cartella?
    grazie



  • di Harrybosch data: 26/06/2012

    Ciao fausto
    con il codice che ti posto ora risolvi le ultime operazioni che hai chiesto, ovvero:
    - nella cella a1 del foglioa viene riportato l'elenco a discesa di tutti i valori che si trovano nella cella e1 di ogni foglio della cartella
    - da questo elenco viene escluso il valore che si trova nella cella e1 del foglio nominato "diverso"
    - poi hai chiesto che l'elenco si aggiorni quando si apre la cartella: la macro n° 2 fa questo lavoro, ma quando vai a modificare una cella e1 di un foglio già esistente l'elenco non sarà aggiornato (si dovrebbe rieseguire manualmente la macro)
    per quest'ultimo motivo ho aggiunto una macro (la n°3) che aggiorna in automatico l'elenco semplicemente selezionando o cliccando sulla cella a1 del foglioa, ovvero la stessa cella dove selezioni l'elenco a discesa (quindi non ci sarebbe più bisogno di richiamare manualmente la macro)

    allego anche il file dove ho testato le macro.

    ciao vanni



     
    1) macro che genera l'elenco, da inserire in un modulo:
    Sub aggiorna_elenco()
    Dim ListaNomi2 As String
    Dim Foglio As Object
         Range("a1").Select
                For Each Foglio In Sheets
            	 If Foglio.Name <> "diverso" Then
             		ListaNomi2 = ListaNomi2 & Foglio.Cells(1, 5) & ","
             	End If
        	   Next Foglio
          ListaNomi2 = Left(ListaNomi2, Len(ListaNomi2) - 1)
       
         With Selection.Validation
             .Delete
             .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
              Operator:=xlBetween, Formula1:=ListaNomi2
             .IgnoreBlank = True
             .InCellDropdown = True
             .InputTitle = ""
             .ErrorTitle = ""
             .InputMessage = ""
             .ErrorMessage = ""
             .ShowInput = True
             .ShowError = True
         End With
    End Sub
    
    2) macro che attiva l'aggiornamento all'apertura della cartella, da inserire nel ThisWorkbook:
    Private Sub Workbook_Open()
        Sheets("FoglioA").Range("A1").Select
           aggiorna_elenco
    End Sub
    
    3) macro che attiva l'aggiornamento quando si seleziona la cella a1 del foglioa, da inserire nel foglioa:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Target.Address = "$A$1" Then
            aggiorna_elenco
        End If
    End Sub