› Excel e gli applicativi Microsoft Office › Template Gantt Excel
-
AutoreArticoli
-
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.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 SubFai sapere. Ciao,
Mario
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.
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
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.
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.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 SubMarius
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
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 SubAggiungo: 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
@ 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
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
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 eccOra 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,1Ciao 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
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à
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
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.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
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.
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. -
AutoreArticoli
