Excel e gli applicativi Microsoft Office Template Gantt Excel

Login Registrati
Stai vedendo 18 articoli - dal 1 a 18 (di 18 totali)
  • Autore
    Articoli
  • #50201 Score: 0 | Risposta

    Dodi
    Partecipante
      2 pts

      Buon pomeriggio a tutti, 

      chiedo il vostro aiuto per rivedere ed implementare il file allegato che utilizzo per redigere un cronoprogramma, 

      lo sto rimettendo in ordine, perchè precedentemente avevo una versione che da circa un mese, ha iniziato a bloccarsi e va a scatti,  lo sto rivedendo tutto, seguendo le istruzioni di come è stato creato. Seguendo un tutorial. 

      ora chiedo il vostro aiuto per implementare una funzione che sul tutorial non c'è e che mi torna utile.  

      nel foglio "Gantt" ci sono due sezioni, a DX fino alla colonna "R" del foglio metto i dati manualmente, 

      mentre a SX dalla colonna "R" in poi il template si aggiorna in modo automatico in base alle date della colonna "Start" e colonna "End" con delle formattazioni condizionali, 

      ora vengo al dunque. 

      sempre nel foglio Gantt

      ho messo in evidenza in giallo due campi, dove nella cella  (P5) trovate un elenco a discesa e  di selezione, le voci in essa sono: 

      -) Giorno

      -) Settimana

      -) Mese

      in pratica quando scelgo "Giorno" il template a DX deve essere così come si vede e cioè si devono vedere giorno per giorno, 

      mentre se scelgo Settimana

      il Template deve raggruppare i giorni e far vedere le settimana. Ovvio che di conseguenza il grafico con le formattazioni condizionali devono comprimersi ed espandersi  come le date sopra. in base alla scelta, Giorno, Settimana, Mese (poi al posto dei giorni nei capo sulla riga 10-11-12 dalla colonne "R" in poi devono comparire le settimana di riferimento dell'anno solare. e cioè (dal 23 al 27 settembre) la settimana di riferimento è la 39 e così via,  inoltre la formattazione della data odierna deve vedersi nella settimana di riferimento. 

      Una cosa simile poi va replicata per la selezione del Mese, 

      e cioè quando nella cella P5 scelgo Mese, 

      il template a DX si deve raggruppare per mese. e deve esserci scritto il mese di riferimento. e allo stesso modo i campi sottostanti devono comprimersi. mettendo anche in evidenza in quale mese siamo. 

      quest'implementazione mi consente di ridurre il formato di stampa, e se la programmazione è fatta da un arco temporale molto lungo, non ho un KM di grafico, ma e più raccolto in base alle scelte fatte nella cella P5

       

      spero di aver spiegato bene quello che mi serve. potete anche aggiustare il file se occorre. ma la cosa importante il contenuto nel Range della colonna "L" fino a riga 11 non venga modificato. altrimenti non riesco poi a riordinare il tutto. 

       

      resto in attesa del vostro prezioso Aiuto.

      allego il file da cui ripartire.  

       

      Allegati:
      You must be logged in to view attached files.
      #50203 Score: 1 | Risposta

      Marius44
      Moderatore
        58 pts

        Ciao

        Quello che chiedi, a mio parere, non si può fre con le formule, occorre VBA.

        Premesso che devi "spostare" il Setting (altrimenti potrebbe risultare nascosto) prova con questo codice da inserire nel Modulo del FoglioGantt

        Option Explicit
        
        Private Sub Worksheet_Change(ByVal Target As Range)
        Dim i As Long, j As Long, ms, sm, wk, kw
        If Not Intersect(Target, Range("P5")) Is Nothing Then
          'mostra tutte le colonne
          Columns("S:ZZ").EntireColumn.Hidden = False
          'nasconde le colonne relative alla scelta fatta
          If Target = "Settimana" Then 'se scelta "Settimana"
            For i = 19 To 702
              wk = WorksheetFunction.IsoWeekNum(Cells(11, i))
              For j = i + 1 To i + 4
                kw = WorksheetFunction.IsoWeekNum(Cells(11, j))
                If wk = kw Then
                  Columns(j).EntireColumn.Hidden = True
                  i = i + 1
                Else
                  Exit For
                End If
              Next j
            Next i
          ElseIf Target = "Mese" Then  'se scelta "Mese"
            For i = 19 To 702
              ms = Month(Cells(11, i))
              For j = i + 1 To i + 30
                sm = Month(Cells(11, j))
                If ms = sm Then
                  Columns(j).EntireColumn.Hidden = True
                  i = i + 1
                Else
                  Exit For
                End If
              Next j
            Next i
          End If
        End If
        End Sub

        Fai sapere. Ciao,

        Mario

        #50206 Score: 0 | Risposta

        Dodi
        Partecipante
          2 pts

          Ciao Marius

          il tuo codice funziona bene, ad eccezione un piccolo aggiustamento se possibile. 

          Ti chiedo solo una cortesia,  te riesci a scaricare il file allegato e fare un test con il tuo codice? 

          come puoi vedere, in visione "GIORNO" a DX il template fa vedere dei giorni evidenziati con le barre colorate. 

          poi quando si seleziona "Settimana" alcune barre non si vedono più, e la stessa cosa succede quando si seleziona il Mese.

          invece occorre comunque far vedere che il quel periodo vengono eseguite comunque le attività 

          non so se mi sono spiegato bene. 

          ma se fai i test con il file forse riesci a capire quello che voglio dire. 

           

           

          #50209 Score: 0 | Risposta

          Marius44
          Moderatore
            58 pts

            Ciao

            Così some è impostato lo schema non è possibile fare ciò che vorresti. Quando selezioni GIORNO tutte le colonne sono visibili. Quando, invece, selezioni SETTIMANA o MESE alcune colonne vengono "nascoste" e, quindi, non è possibile "vedere" una cosa nascosta.

            Forse, ma ripeto forse, si potrebbe costruire il GANTT per intero con VBA e mostrare solo quello che serve ma sarebbe un lavoraccio e non sono neppure sicuro che si possa fare.

            Ciao,

            Mario

            #50213 Score: 0 | Risposta

            Dodi
            Partecipante
              2 pts

              Mario buongiorno

              Capisco, e avevo visto che il tuo codice raggruppava  le colonne e le nascondeva, ti ringrazio comunque per il tuo aiuto.e soluzione, ma non mi sembra il caso di fare un template con tutto il vba, e non te lo chiedo nemmeno, 

              Magari se qualche utente conosce le formattazione condizionale, potrebbe provare a vedere se riesce ad integrare la tua soluzione con una formattazione condizionale che restituisce poi il risultato che mi serve. Itanto ancora grazie mille e B.W. 

              #50218 Score: 0 | Risposta

              Dodi
              Partecipante
                2 pts

                quindi libero sfogo 

                a chi sa usare la formattazione condizionale, 

                magari da adattare alla soluzione di Marius. 

                chiedo il vostro aiuto per riuscire a completare il Gantt, 

                intanto ringrazio e auguro buona domenica a tutti, 

                carico il file con l'aggiunta della soluzione proposta da Mario, che saluto e ringrazio ancora. 

                in pratica riepilogo cosa mi serve, 

                al variare della selezione da Giorno a Settimana e Mese, 

                il template si deve aggiornare, in pratica con la soluzione di Marius 

                al chiudersi delle colonne i colori nel periodo prefissato, si nascondono e quindi non si riesce a capire in che periodo vanno eseguite le attività, invece quando le colonne si chiudono deve sempre vedersi il periodo di riferimento in cui vengono eseguite quelle attività, 

                ovvio che lascio spazio e modo di adeguare il file se necessario. 

                resto in attesa di aiuto 

                 

                 

                Allegati:
                You must be logged in to view attached files.
                #50224 Score: 0 | Risposta

                gianfranco55
                Partecipante
                  91 pts

                  ciao

                  se ho capito

                  Private Sub Worksheet_Change(ByVal Target As Range)
                  Dim i As Long, j As Long, ms, sm, wk, kw
                  If Not Intersect(Target, Range("P5")) Is Nothing Then
                      Application.ScreenUpdating = False
                   
                  If Target = "Giorno" Then
                  Columns("S:ZZ").EntireColumn.Hidden = False
                  
                    ElseIf Target = "Settimana" Then
                     Columns("S:ZZ").EntireColumn.Hidden = True
                      For Each xCell In Range("S11:ZZ11")
                      If DatePart("ww", xCell) = DatePart("ww", Date) And Year(xCell) = Year(Date) Then
                          xCell.EntireColumn.Hidden = False
                      End If
                      Next
                    ElseIf Target = "Mese" Then  '
                     Columns("S:ZZ").EntireColumn.Hidden = True
                     For Each xCell In Range("S11:ZZ11")
                      If Month(xCell) = Month(Date) And Year(xCell) = Year(Date) Then
                          xCell.EntireColumn.Hidden = False
                      End If
                      Next
                    End If
                  End If
                  Application.ScreenUpdating = True
                  End Sub

                  Marius

                  ma non c'è un metodo più semplice per trovare il num settimana?

                  per partire dal lunedì

                  If DatePart("ww", xCell, vbMonday) = DatePart("ww", Date, vbMonday) And Year(xCell) = Year(Date) Then

                  oppure

                  If WorksheetFunction.WeekNum(xCell, vbMonday) = WorksheetFunction.WeekNum(Date, vbMonday) And Year(xCell) = Year(Date) Then

                  #50226 Score: 0 | Risposta

                  Marius44
                  Moderatore
                    58 pts

                    Ciao

                    x gianfranco55 - la sottostante macro inserisce, nella riga 7, il numero della settimana relativo alle date sottostanti (riga 11)

                    Option Explicit
                    
                    Sub numerosettimana()
                    Dim uc As Long, i As Long
                    uc = Sheets("Gantt").Cells(11, Columns.Count).End(xlToLeft).Column
                    For i = 19 To uc Step 5
                      Cells(7, i) = WorksheetFunction.IsoWeekNum(Cells(11, i))
                    Next i
                    End Sub

                    Aggiungo: WorksheetFunction.IsoWeekNum("data") questa è la funzione per conoscere il numero della settimana relativa ad una certa data. E' stata introdotta dalla versione 2013. Per le versioni pecedenti è un po' più complessa (come formula) : ammesso che la data sia inserita in A2, inserisci nella cella dove vuoi il risultato la seguente formula:

                    =SE(GIORNO.SETTIMANA(DATA(ANNO(A2);MESE(A2);GIORNO(A2));1)<=3;-1;0)+NUM.SETTIMANA(A2;1)

                    La funzione NUM.SETTIMANA considera la settimana che contiene la data 1 gennaio come la prima settimana dell'anno. Esiste tuttavia uno standard europeo in base al quale la prima settimana viene definita come quella con il maggior numero di giorni, quattro o più, che inizia nel nuovo anno. Per gli anni in cui vi è un numero di giorni minore o uguale a 3 nella prima settimana di gennaio, la funzione NUM.SETTIMANA restituirà pertanto numeri di settimana non corretti in base allo standard europeo.
                    Per correggere la funzione e far restituire il numero secondo lo standard europeo si applicare la stessa funzione ma così corretta:

                    =SE(GIORNO.SETTIMANA(DATA(ANNO(A2);MESE(1);GIORNO(1));2)>=3;-1;0)+NUM.SETTIMANA(A2;2)

                    Spero sia chiaro.

                    La macro da te suggerita credo (ma mi riservo di approfondire) non dia i risultati richiesti.

                    Ora ti lascio per il derby d'Italia in TV

                    Ciao,

                    Mario

                    PS - Leggi qui  https://www.excelvba.it/Forum/story/Visual_Basic_for_Applications/Numero_della_settimana.html

                    #50232 Score: 0 | Risposta

                    Dodi
                    Partecipante
                      2 pts

                      @ Gianfranco55

                      ringrazio per la soluzione proposta, 

                      ma non è quello che mi serve, in pratica Marius nel suo codice iniziale che mi ha proposto, ottengo in parte quello che mi serve, 

                      e cioè sull'intero Template raggruppa per Settimane e mese, 

                      e fin qui tutto ok. 

                      ma mi serve raggruppare anche le barre colorate e far vedere che le attività in quel range di date vengono comunque eseguite. 

                      con il codice vba di Marius nascondendo le colonne non fa vedere graficamente le attività quando vengono eseguite.

                      Forse mi spiego male io. 

                      magari domani faccio delle simulazioni e faccio degli screen per far capire il risultato che serve. 

                      occorre partire dal codice di Marius o in alternativa rivedere le formattazioni condizionali. 

                      intanto grazie e buona serata. 

                      a domani  

                      #50233 Score: 0 | Risposta

                      gianfranco55
                      Partecipante
                        91 pts

                        ciao

                        capito

                        la macro di Marius

                        raggruppa il mese al 1 del mese

                        e perciò tu vedi le formattazioni solo del primo

                        tu le vorresti tutte

                        #50234 Score: 0 | Risposta

                        Raffaele53
                        Partecipante
                          23 pts

                          Domanda: Perchè la striscia è così lunga (sino maggio 2027)?

                          Ciao a tutti, solo un pensiero personale.
                          Ci sono tre righe in alto vuote che si possono usare
                          Riga1 = L.M.M.G.V ecc ecc
                          Riga2 = Multipli di 5colonne concatenate con Sett_1,Sett_2,Sett_3 ecc ecc
                          Riga3 = Tramite formule/macro concatenare 28-29-30-31 colonne con Gennaio ecc ecc

                          Ora la macro di Marius44, quando si sceglie in P5, copia la riga1-2-3 idonea e la trascrive in Riga14
                          Se si sceglie giorno. Ok larghezza colonne = 1
                          Se si sceglie Settimana, si restringe le colonne a 0,5
                          Se si sceglie Mese, restringe le colonne a 0,1

                          #50235 Score: 0 | Risposta

                          Dodi
                          Partecipante
                            2 pts

                            Ciao Raffaele 

                            grazie per l'intervento, 

                            il Template arriva fino al 2027 perchè ho impostato un range di campi già formattati, è solo una mia scelta, 

                            non c'è un motivo ben valido. 

                            quello è solo un Range formattato, tanto la prima data nel Template è sempre in funzione della data d'inizio della prima attività. 

                            potresti prendere in esame il secondo file che ho allegato, dove ho inserito il primo codice proposto da Marius. 

                            e potresti impostarlo come 

                            intendi gestire, secondo la tua proposta? 

                             

                            grazie 

                            #50236 Score: 0 | Risposta

                            Dodi
                            Partecipante
                              2 pts

                              Raffaele ben accetta la tua proposta e soluzione. 

                              resta sempre il fatto che poi occorre gestire la parte grafica e far comunque vedere in quale periodo vengono eseguite le attività 

                               

                              #50242 Score: 0 | Risposta

                              Marius44
                              Moderatore
                                58 pts

                                Buongiorno a tutti

                                Il suggerimento di Raffaele53 (un caro saluto) mi piace. E' sufficiente nella mia prima macro sostituire le righe con Columns(....).EntireColumn.Hidden = False

                                con Columns(....).ColumnWidth = 2.43 in cui dove ci sono i puntini occorre inserire il range ("S:ZZ" nel primo caso) o la colonna (j) mentre basta variare il valore 2.43 con 1.2 ovvero 0.7 per avere le colonne visibili ma rimpicciolite.

                                Prova e fai sapere. Ciao,

                                Mario

                                 

                                #50244 Score: 0 | Risposta

                                Raffaele53
                                Partecipante
                                  23 pts

                                  Un saluto a @marius44

                                  Questo files sul mio PC è imballato-lento dovuto a tutte le Matriciali e Formattazioni varie. Per modificare le scritte in Riga14, serve creare una struttura valida in riga1-2-3 (Gior,sett,mese) ed avrei bisogno di alcune info.
                                  Basterebbero 12 mesi o servono di più? Quante righe sarebbero sufficenti? La prima data 23-set-24 la inserisci manualmente in S11? Non capisco da dove la prendi? Tenendo validi i colori presenti in colonna E, si possono eliminare tutte quelle F.C. in area S16:ZZ??? Alcune arrivano a riga501?

                                  Allegati:
                                  You must be logged in to view attached files.
                                  #50248 Score: 0 | Risposta

                                  gianfranco55
                                  Partecipante
                                    91 pts

                                    ciao

                                    onestamente usando delle formule al posto di quella formattazione Gantt

                                    ci si riesce a venirne fuori ma è caotico.

                                    ma con tutte quelle colonne e celle non mi ci metto

                                    già così è lento e penso proprio che le formattazioni influiscano

                                     

                                    #50251 Score: 0 | Risposta

                                    dodi

                                      Ringrazio tutti per l'intervento e i vostri aiuti. 

                                      partirò dalla base del 1° codice dato da MARIUS e ristrutturo il file al fine di cercare di comprimere le colonne e raggrupparle per settimana, e mese. 

                                      la discussione la lascio aperta, e non appena riesco a creare il file rivisto, lo pubblico a servizio di tutti. e magari da cui ripartire. 

                                      non voglio fare un Gantt con tutto il VBA, non avrebbe senso, o quanto meno chiederebbe un lavoro immane. 

                                      dal suggerimento di Raffaele, mi è venuto in mente un modo, spero di riuscire a buttar giù una soluzione, al massimo per gli affinamenti richiederò il vostro aiuto. 

                                      penso di andare avanti con le F.C.  

                                      Ringrazio tutti per ora. 

                                      #52895 Score: 0 | Risposta

                                      LukeReds
                                      Partecipante
                                        19 pts

                                        ciao,

                                        in figura esempio di Gantt con la FC (ovviamente da adattare, non ho usato i tuoi dati)

                                        In F1 scrivi la data inizio progetto, in G1 e trascini a dx

                                        =SE($E$14="g";F1+1;SE($E$14="s";F1+7;DATA.MESE(F1;1)))

                                        Poi selezioni F2:Z10 e, in FC, scrivi la formula

                                        =SE(E($C2<=F$1;$E2>=F$1);1;"")

                                        In E14 scrivi g, s, m se vuoi una "granularità" giornaliera, settimanale o oesile

                                         

                                         

                                        Allegati:
                                        You must be logged in to view attached files.
                                      Login Registrati
                                      Stai vedendo 18 articoli - dal 1 a 18 (di 18 totali)
                                      Rispondi a: Template Gantt Excel
                                      Gli allegati sono permessi solo ad utenti REGISTRATI
                                      Le tue informazioni: