MAX in più Fogli



  • MAX in più Fogli
    di Raffaele_53 (utente non iscritto) data: 09/05/2014 10:17:01

    Ciao a tutti
    Ho fatto una formula =MAX('1:3'!G3) e funziona
    Dal 1 al 3 sono tutti Fogli, però ipotizzando che i fogli possano aumentare dovrei incrementare la formula con un numero differente dal 3 tramite una formula riesco a contare i fogli presenti, perciò domani saranno 4 oppure 2.

    Quello che desidero sapere se posso in qualche modo tramite indiretto od altro creare la stringa personalmente.
    Ex Oggi NumFogli mi darà 4 e vorrei scrivere
    =Max("'1:" & NumFogli & "'!G3") per le prove potete provare con
    =Max("'1:" & 4 & "'!G3") , in non ci riesco proprio
    No VBA. Grazie mille



  • di scossa data: 09/05/2014 14:51:10

    - Inserisci prima del foglio 1 un foglio vuoto che chiamarai Foglio0

    - Inserisci dopo l'ultimo foglio attuale (3?) un foglio vuoto che chiamarai Foglio999

    - Nascondi Foglio0 e Foglio999

    In questo modo qualsiasi foglio andrai ad aggiungere sarà sempre compreso tra Foglio0 e Foglio999, quindi correggendo la tua formula come segue:

    =Max(Foglio0:Foglio999!G3)

    avrai sempre il giusto valore.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)






  • di Raffaele_53 (utente non iscritto) data: 09/05/2014 16:08:30

    Chapeau e grazie mille
    Con questo sistema non mi serve neppure contarli.

    A chi può interessare la formula per contare i fogli è:
    Crea nuovo NOME --->NumFogli---> riferito a --->=INFO.CARTELLA.DI.LAVORO(4)
    In qualsiasi cella digitare =numfogli



  • di Mister_x (utente non iscritto) data: 09/05/2014 16:55:49

    ciao Raffaele

    ((Chapeau e grazie mille Con questo sistema non mi serve neppure contarli. ))

    hai provato ad inserire un nuovo foglio e in G3 mettere un valore superiore a Max() di attuale??
    per mio conto il problema lo risolvi con VB ma non con la formula di excel

    ciao







  • di scossa data: 09/05/2014 17:13:43

    cit. Mister_x: "hai provato ad inserire un nuovo foglio e in G3 mettere un valore superiore a Max() di attuale??"

    Ops, avevo dimenticato di precisare che era la soluzione che usavo su Excel 2003.

    Con Excel 2003, e forse anche 2007, nessun problema, con Excel 2010 (e credo successivi) non funziona se si aggiunge il foglio con l'apposita icona (peraltro troppo comoda)perché lo aggiunge comunque e sempre alla fine di tutti.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di scossa data: 09/05/2014 17:32:48

    Comunque, se è per uso personale, si può evitare di nascondere il Foglio999 e, dopo aver aggiunto il nuovo foglio spostarlo prima di Foglio999.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di alessia (utente non iscritto) data: 09/05/2014 18:11:08

    Grazie Raffaele,
    entrata nel forum, ho visto che hai aperto una discussione sul valore massimo di tutti i fogli. Non ho parole per ringraziarti. Lo provo subito anch'io.
    Un Grazie da parte mia va a Scossa.
    bye alessia



  • di Mister_x (utente non iscritto) data: 09/05/2014 18:54:44

    ciao scossa

    anche la versione 2007 ha questo problema, inserire un foglio alla fine
    quindi se noi, come tu hai detto di fare,con la versione 2003, rinominare il foglio1 con foglio0 e foglio3 con foglio999 e nascondere utilizzando una sub() per inserimento foglio risolveremo tutti questi passaggi
    la sub() come ho pensato potrebbe essere di questo tipo da mettere in un modulo

    ciao

     
    Sub InsertSheets()
    Dim NSheets As Long
        Sheets.Add After:=Sheets(Sheets.Count)
        NSheets = Sheets.Count
        Sheets(NSheets).Select
        Sheets(NSheets).Move Before:=Sheets(2)
    End Sub






  • di scossa data: 09/05/2014 19:46:15

    @Mister_x:
    se proprio dobbiamo usare le macro tanto vale, dopo aver predisposto la cartella coi due fogli nascosti come indicato sopra, mettere il codice sottostante nel modulo di classe di ThisWorkbook.
    In questo modo ogni volta che si inserisce un foglio verrà automaticamente spostato prima del Foglio999.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Private Sub Workbook_NewSheet(ByVal Sh As Object)
      Sh.Move before:=Foglio999 'cambiare col codename del "Foglio999" o 
                                           'comunque del foglio che si vuole lasciare ultimo
    End Sub
    



  • di Raffaele_53 (utente non iscritto) data: 09/05/2014 20:26:23

    Devo dire che sul post di alessia
    La function interveniva continuamente ad ogni apertura di qualsiasi foglio.
    Non riuscendo a bloccarla, ho cercato d'inventare un "qualcosa che poteva fare la medesima cosa"
    In un files ci sono tanti fogli, mà dovendo aprire un'altro files per farci un Backup, la function interveniva e non trovando la cella G3 valorizzata andava in errore (non di VBA mà solo con la scrittura in una certa cella = F7)
    >>>.Move Before lo mette prima di 999 (anche senza nasconderlo e popolandolo)
    Questa Function funziona bene, ma l'unica aggiunta che desiderei "se possibile", che fosse attivata solo in questo ThisWorkbook e non anche in altri files)

    Ps il motivo del NON VBA
    Già esiste un VBA incasinato, speravo di risolverlo tramite formula (valutazione errata).
    Chiedo a scossa, se può vedere la function (come detto deve lavorare solo nel files originale e non sugli altri. Grazie mille

     
    Function maxSheet() As Integer
    Dim vArr(), I As Integer, ws As Worksheet
    ReDim vArr(1 To Worksheets.Count)
    '''Application.EnableEvents = false
    '''If ws.Name <> "Archivio Generale" Then
    For I = 1 To Worksheets.Count
        vArr(I) = Val(Worksheets(I).Name)
    Next
    maxSheet = WorksheetFunction.Max(vArr)
    '''End If
    '''Application.EnableEvents = True
    End Function



  • di scossa data: 09/05/2014 20:55:35

    Scusa Raffeele ma non capisco perché non adotti la soluzione che ti ho suggerito sopra: usando l'evento Workbook_NewSheet che viene scatenato solo quando inserisci un foglio in quella cartella di lavoro, risolvi ogni problema alla fonte.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Private Sub Workbook_NewSheet(ByVal Sh As Object)
      Sh.Move before:=Foglio999 
    End Sub



  • di Raffaele_53 (utente non iscritto) data: 09/05/2014 22:02:57

    Scusami scossa,
    sai bene che non riesco mai a spiegarmi bene.

    >>>Workbook_NewSheet è la prima volta che lo vedo/sento e cercherò di capirlo.
    Ho messo il 999, anche senza nasconderlo e mettendo Move before è perfetto (mi posiziona il foglio dopo il penultimo e prima del 999).

    Perfetto, per modo di dire....
    Perchè eseguendo il codice in un'userform (posso usare il tasto F8 ma non riesco a vedere cosa combina nel foglio "dato che l'userform è a schermo intero e per forza devo interromperla")
    Ho un problema che sicuramente non so spiegare, fra i tanti bottoni e VBA balordo non riesco a capire in quale modo..., tramite >>>la scrittura in una certa cella = F7
    La function (non credo), da quale parte il codice riesca in qualche modo a scrivere nel nuovo/tutti i fogli il numero di fattura successivo? Pertanto parto dalla fattura 500, in 1 mette 500, in 2 mette 501, in 3 mette 502 ecc ecc

    Nella mia ignoranza delle Function, pensavo che tra i parametri si potesse anche dire di farlo solo in questo ThisWorkbook.
    Non desidero romperTi, piuttosto lascia perdere. Vedrò se riesco a combinare qualcos'altro.



  • di Raffaele_53 (utente non iscritto) data: 09/05/2014 23:06:15

    Mi si è perso l'ultimo post? Non ricordo bene quello che ho scritto....

    Nel VBA di ThisWorkbook, non c'è nessun richiamo al Function maxSheet()
    Solo in DATI FATTURA di FATTURE OCCASIONALI.XLSM c'è in F7 =INDIRETTO(maxSheet() & "!g3")
    Se questa cella va in #ERR ,l'userform da errore è non più avanti.



  • di Textomb data: 09/05/2014 23:13:45

    ciao Raffaele.
    non pensavo di fare tutto questo danno con la function... mi spiace



  • di Raffaele_53 (utente non iscritto) data: 09/05/2014 23:22:41

    Textomb
    La colpa NON è Tua, solo di scossa.
    Ci donasse una goccia di sangue, sai quanti cloni ci sarebbero?



  • di Raffaele_53 (utente non iscritto) data: 11/05/2014 01:14:48

    Dai..., scossa (datti una smossa, oppure vengo a prelevarTI una goccia di sangue)
    Dammi una Tua opinione personale?
    Nel caso fossi uno stolto, mi sta bene (dammi del C.....E).



  • di scossa data: 11/05/2014 11:46:05

    cit. Raffaele_53: "....Dammi una Tua opinione personale?"

    Io la mia opinione personale te l'ho già data:

    Metti il codice sottostante nel modulo di classe di ThisWorkbook.

    Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Sh.Move before:=Foglio999
    End Sub



    Quindi inserisci prima del foglio 1 un foglio vuoto che chiamarai Foglio0

    - Inserisci dopo l'ultimo foglio attuale (3?) un foglio vuoto che chiamarai Foglio999

    - Nascondi Foglio0 e Foglio999

    In questo modo qualsiasi foglio andrai ad aggiungere sarà sempre compreso tra Foglio0 e Foglio999, quindi correggendo la tua formula come segue:
    =Max(Foglio0:Foglio999!G3)

    avrai sempre il giusto valore.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di scossa data: 11/05/2014 11:48:32

    Edit:
    Inserisci dopo l'ultimo foglio attuale (3?) un foglio vuoto che chiamarai Foglio999 e a cui attribuirai codename Foglio999




    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Raffaele_53 (utente non iscritto) data: 11/05/2014 14:00:12

    OK, grazie mille e scusami tanto
    Cercherò di capire bene le proprietà del Workbook_NewSheet



  • di scossa data: 11/05/2014 16:21:17

    cit. Raffaele_53: "Cercherò di capire bene le proprietà del Workbook_NewSheet"

    Ciao Raffaele,

    non c'è nulla di particolare da capire: è un evento che viene scatenato quando si aggiunge un foglio alla cartella di lavoro. Tutto qui.

    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)




  • di Raffaele_53 (utente non iscritto) data: 15/05/2014 12:43:36

    Di nuovo scusa, mi puoi dire cosa significa questa frase...
    Oppure come devo fare?................................... in ThisWorkbook ???
    Grazie mille

    >>>Metti il codice sottostante nel modulo di classe di ThisWorkbook.
     
    Private Sub Workbook_NewSheet(ByVal Sh As Object)
      Sh.Move before:=Foglio999 
    End Sub



  • di Raffaele_53 (utente non iscritto) data: 15/05/2014 12:58:42

    ps.Mi sono dimenticato il PER FAVORE
    Grazie mille



  • di scossa data: 15/05/2014 20:10:44

    E' il modulo di classe della cartella di lavoro, ThisWorkBook nelle versioni di Excel 2003 e 2007, purtroppo localizzato e tradotto in Questa_cartella_di_lavoro nella versione italiana del 2010 e successive. anche se ThisWorkBook esiste sempre, infatti puoi riferirtici normalmente:
    ?Thisworkbook.ActiveSheet.name
    e
    ?Questa_cartella_di_lavoro.ActiveSheet.name
    sono equivalenti.

    Quindi vai nell'editor del VBA, seleziona il modulo Questa_cartella_di_lavoro e incollaci il codice.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di raffaele_53 (utente non iscritto) data: 16/05/2014 02:58:38

    Ti ho letto sempre con attenzione
    Tante volte non TI capivo, altre volte ho sempre adottato i Tuoi suggerimenTi

    Adesso mi sembra di fare un salto nel buio per seguirTi, oppure sono solo cavolate (MIE)
    Mettere foglio0 ed foglio999 nascosti, al mio* problema non serve(credo).
    Anche se visibili/popolati va bene lo stesso

    Torniamo al problema
    >>>Workbook_NewSheet, mi potrebbe stare anche bene....
    Mà come lo faccio a farlo?, hai visto l'allegato in h t t p://www.excelvba.it/Forum/thread.php?f=1&t=6524

    Non mi chiedere spiegazioni (che non conosco)
    Dimmi solo come potrei trasformare il Workbook_NewSheet?

    Ps. * Non mio (mà forse, sono solo uno stupido)
    Pps. Mi hanno aiutato nel 1990 (grazie mile a VOI,se mi leggette), Io per natura vado avanti a tentare/aiutare il prossimo.



  • di Raffaelwe_53 (utente non iscritto) data: 16/05/2014 03:22:21

    Ps. alla formula (foglio0 ed foglio999) va bene

    il Workbook_NewSheet non saprei dove metterlo?

    Mi e rimasta una cosa (che non ricordo), alla prossima Ti rompo ancora.



  • di Raf (utente non iscritto) data: 16/05/2014 04:24:02

    Io non vorrei dire una cazzata, ma sto per dirla

    Basta cambiare il titolo della SUB???
    Dai scossa, non ci credo (dammi una mano),siamo dentro un'userform che non ci fà vedere nulla.

    Forse, ho già detto che sono fesso
    Domani provo tramite "sviluppo a ridure userform", almeno sò cosa combina

    Poi Vi saprò dire



  • di scossa data: 16/05/2014 14:33:37

    Ciao Raffaele,

    porta pazienza ma penso che tu stia parlando di mele ed io di pere.

    Questa discussione ha come titolo "MAX in più Fogli" e la tua domanda era:
    "Ho fatto una formula =MAX('1:3'!G3) e funziona
    Dal 1 al 3 sono tutti Fogli, però ipotizzando che i fogli possano aumentare dovrei incrementare la formula con un numero differente dal 3 tramite una formula riesco a contare i fogli presenti, perciò domani saranno 4 oppure 2.
    "

    Io ti ho proposto la soluzione, che trovi nella mia prima risposta e che tu hai trovato funzionante:
    "Chapeau e grazie mille
    Con questo sistema non mi serve neppure contarli.
    "

    Poi Mister_x ha fatto notare che con Excel 2010 (2007) non funziona perché il foglio nuovo viene aggiunto comunque in fondo a tutti.
    Da qui la mia proposta di usare l'evento Workbook_NewSheet.

    Ora mi parli di "...una Userform", metti il link ad un'altra discussione .... sinceramente non riesco a seguirti.

    Se il problema non è più quello del titolo ed espresso nel primo post, chiudi questo thread ed aprine uno ad hoc in cui illustri il problema dall'inizio.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)






  • di Raffaele_53 (utente non iscritto) data: 16/05/2014 21:29:48

    Mi, sta bene le mele....
    Chiudo per la terza volta chiudo la faccenda (spero)
    Scossa, grazie mille e scusa il disturbo.