Elaborando um sistema de atualização de dados com Project – Permitindo que seus colaboradores usem o Excel para reportar avanços no cronograma

Neste artigo, pretendo explicar como elaborar um sistema de atualização de um cronograma com muitos envolvidos de forma semi-automática, sem necessitar de uma licença do Project Server, uma solução web ou qualquer software instalado nas máquinas dos “atualizadores” de cronograma, exceto o Excel.

Para executar este procedimento, você precisará de uma máquina com o Project, que será a máquina que emitirá e receberá as planilhas Excel que você enviará aos responsáveis para o preenchimento das mesmas. Neste texto, utilizarei a cor azul para escrever pedaços de código VB que devem ser colocados no Project.
Minha intenção não é colocar a solução completa ou pronta, mas o básico para que uma pessoa com conhecimento mínimo de gerenciamento de projetos e Visual Basic (VB) possa implementar a solução conforme suas próprias necessidades e desejos. Para isso, criei este roteiro com vários passos. Tenho o Project em inglês na minha máquina, e se alguém se disponibilizar a fazer a mesma coisa na versão em português, eu terei o maior prazer de manter as duas versões aqui :
Fase 1 – Configurando o sistema

Antes de começar, é preciso indicar ao Project aonde encontrar as bibliotecas do Excel. Vá para o editor de Visual Basic (alt+F11) e entre em “Tools / Ferramentas?” , “References / Referências?”. Ache uma linha com “Microsoft Excel XX Object Library”, marque a opção e clique em OK.

Fase 2 – Criação da exportação das planilhas

Passo 1: Criar um Filtro
Crie um filtro (filtrando qualquer coisa, o Project não deixa criar um filtro sem regras) com um nome que sempre será usado pelo código. Pode ser um filtro “Excel”, ou qualquer outro nome, mas esteja certo que você nunca utilizará este filtro para tarefas normais de controle do projeto.

Imagem 1
Imagem 1

Passo 2: Criar um mapa de exportação para o Excel

 

File, Save as (Arquivo, Salvar como) -> salve o seu projeto como uma planilha de Excel. Antes do arquivo ser criado, você entrará em um wizard que vai te ajudar a salvar os dados necessários para a planilha. Crie um mapa novo conforme o colocado abaixo (você pode colocar as informações adicionais que julgar necessário na planilha, eu só coloquei o básico do básico). Atenção para colocar no mapa o filtro que você criou no passo 1. Da mesma maneira que no passo anterior, salve o mapa com um nome que signifique que ele está reservado ao uso do Visual Basic.

Imagem 2
Imagem 2

Passo 3: Alterar o “Text 1” para ser o nome do “Responsável pela atualização”

Inserir o campo “Text 1” e formatá-lo para conter o nome do responsável pelo preenchimento. Esta exportação só faz sentido se tivermos mais de um responsável, pois senão estaríamos mandando o arquivo .mpp inteiro. J.
Passo 4: Criar o Visual Basic de exportação da planilha
Bom, aqui começamos com o código. A primeira parte do código é responsável por “varrer” todas as tarefas e identificar todos os “responsáveis por preenchimento” – ou todos os Text 1 diferentes. Fiz uma matriz Lider() que irá registrar todos os diferentes responsáveis.
Esta maneira é meio queixo-duro, pois vai verificando uma a uma se o valor já não está na matriz. Mas funciona…e afinal, eu sou engenheiro, e não programador. Se alguém tiver um algoritmo melhor, me avisa que eu substituo.
No final, você terá uma matriz chamada Lider com n valores, sendo n o número de pessoas responsáveis pelo preenchimento (text 1) e cada valor da matriz sendo o nome.


Dim K, T, X As Long
Dim Lider() As String
Dim Vale As Boolean

ReDim Lider(0)
Lider(0) = ActiveProject.Tasks(1).Text1 A primeira é o nome do primeiro responsável
For T = 1 To ActiveProject.Tasks.Count Executa para todas as tarefas do cronograma ativo
Vale = False
For X = 0 To UBound(Lider)
If ActiveProject.Tasks(T).Text1 = Lider(X) Then
Vale = True
X = UBound(Lider)
End If
Next X
If Not Vale Then
ReDim Preserve Lider(UBound(Lider) + 1)
Lider(UBound(Lider)) = ActiveProject.Tasks(T).Text1
End If
Next T
Agora que sabemos quantos líderes existem, é preciso exportar as planilhas. Coloque no mesmo código VB:

Dim ExportName As String

For K = 0 To UBound(Lider) Para todos os líderes
ExportName = “C:\” & ActiveProject.Name & “-” & Lider(K) & “.xls” Dá nome a planilha que será salva
FilterApply “All Tasks” Retira o filtro atual
FilterEdit Name:=”Excel “, TaskFilter:=True, Create:=True, OverwriteExisting:=True, FieldName:=”Start”, Test:=”is less than or equal to”, Value:=CStr(Format(Now() + 7, “DD/MM/YYYY”)), ShowInMenu:=False, ShowSummaryTasks:=False Substituir o nome do filtro pelo nome que você colocou no passo 2; Esta linha apaga o filtro existente e cria uma regra de mostrar todas as tarefas iniciadas no dia agora+7 (próxima semana).

FilterEdit Name:=”Excel “, TaskFilter:=True, FieldName:=””, NewFieldName:=”% Complete”, Test:=”does not equal”, Value:=”100%”, Operation:=”And”, ShowSummaryTasks:=False Apenas tarefas não concluídas

FilterEdit Name:=”Excel “, TaskFilter:=True, FieldName:=””, NewFieldName:=”Text1″, Test:=”equals”, Value:=Lider(K), Operation:=”And”, ShowSummaryTasks:=True Do responsável Lider(k)

FilterEdit Name:=”Excel”, TaskFilter:=True, FieldName:=””, NewFieldName:=”ExternalTask”, Test:=”equals”, Value:=False, Operation:=”And”, ShowSummaryTasks:=True Monstrando as tarefas “sumário”

FilterApply Name:=”Excel” aplica o Filtro

FileSaveAs Name:=ExportName, FormatID:=”MSProject.XLS5″, map:=”Map 1″ Troque o nome do mapa para o mapa Desejado

Next K

Você pode, antes de finalizar o laço For/Next, colocar uma rotina para abrir a planilha e fazer algumas modificações de layout, cor e personalização que desejares. Assim as planilhas já saem prontas do forno! Também recomendo que as planilhas já saiam do Project bloqueadas da forma correta.

Fase 3 – Criação da importação

Uma vez que você tenha recebido as planilhas com os avanços atualizados, você irá querer importar as atualizações automaticamente. O código abaixo mostra como fazer isso.

O código escrito abaixo não tem tratamento de erros, como “o que fazer para atualizar uma tarefa que apagaram no Project” ou “como saber que uma tarefa estava ou não na planilha (pode ter sido apagada, ou criada posteriormente à exportação)”. Mas já é um início.

Dim Nome As String

Nome = ActiveProject.Name

ActiveProject.SaveAs ActiveProject.Path & “/” & ActiveProject.Name & “_backup em ” & Format(Now(), “yyyy mm dd hh mm”) & “.mpp” Faz um backup do Project JJJJ

Dim Planilha As Excel.Application

Set Planilha = New Excel.Application Abre uma instância do Excel e solicita para que você abra uma planilha (indique aonde está a planilha alterada)

Dim fd As FileDialog

Planilha.Visible = True

Set fd = Planilha.Application.FileDialog(msoFileDialogOpen)

fd.Show

Planilha.Workbooks.Open fd.SelectedItems.Item(1), False, False Abre a planilha

Dim T As Long

T = 2 Começa da segunda linha para ignorar o cabeçalho

With Planilha.ActiveSheet

While .Cells(T, 1) <> “” Corre toda a planilha Excel

If ((ActiveProject.Tasks.UniqueID(CLng(.Cells(T, 1))).Summary = False) And (ActiveProject.Tasks.UniqueID(CLng(.Cells(T, 1))).ExternalTask = False)) Then Ignora as tarefas “sumárias” (já que quem deve calcular isso é o Project) e “externas” – caso você tenha dependência de cronogramas externos, isto é de suma importância

ActiveProject.Tasks.UniqueID(CLng(.Cells(T, 1))).PercentComplete = CLng(.Cells(T, 3) * 100) Atualiza o andamento da tarefa. Como o valor percentual do Project é um inteiro de 1 a 100, você tem que multiplicar por 100. Levei horas para descobrir isso.

End If
T = T + 1 Próxima tarefa
Wend
Planilha.Quit
Set Planilha = Nothing
End With

ActiveProject.SaveAs ActiveProject.Path & “/” & Nome, pjMPP Sobreescreve o projeto original com as atualizações
Realmente espero que vocês consigam entender as mensagens que tentei passar. De qualquer maneira, estarei à disposição de vocês para críticas, comentários e sugestões.
Abraço,
Guilherme Silva, PMP.

Autor: Guilherme

Meu nome é Guilherme Silva, estou com 28 anos, tenho um filho que recentemente comemorou seu primeiro aniversário. Casado, morando em Porto Alegre, cursei engenharia mecânica, fiz MBA em gerenciamento de projetos e hoje faço pós-graduação em economia. Sou certificado PMP pelo PMI. Trabalho atualmente como consultor em gerenciamento de projetos pela empresa Conduta ( www.conduta-ti.com.br ), prestando serviços para o site Terra ( www.terra.com.br ). Contatos para qualquer finalidade, podem ser feitos através de meu e-mail guilherme@cerneprojetos.com.br. Outra maneira de entrar em contato comigo é através do site linkedin. Meu perfil está disponível através do link abaixo: http://www.linkedin.com/in/guilhermessilva

  • Antonio Carvalho

    Prezado Guilherme,
    Muito interessante e pretendo utilizar a tua criação na primeira oportunidade.
    Obrigado e abraços.
    Antonio Augusto C. de Carvalho
    e-Plan

  • George

    Gulherme,

    Você pode disponibilizar esta planilha que você criou, pois estou tendo dificuldades em fazê-la.

    Obrigado.

  • George,

    Te enviei um e-mail perguntando qual a dificuldade que estás encontrando. Me avisa se tu não recebeu.

    Atenciosamente,
    Guilherm

  • Olá Guilherme a proposta é interessante sim. Inclusive me surgiu uma outra idéia para resolver um certo problema que tenho. Caso eu consiga coloco aqui a solução.
    abraço e parabéns pela iniciativa.

  • Marcelo Cunha

    Prezado Guilherme
    gostaria que você me explicasse melhor sobre este procedimento,pois encontrei dificuldade de fazer…Eu sou novo na àrea de planejamento e quero estar aprimorando meus conhecimentos neste àrea..
    POde me explicar por e-mail?????

  • Fabio Sander

    Como importar do excel para o Project.

  • Fabio Sander

    Project Curso parte II

  • Perfeito Guilherme, era isso que eu precisava. Estava tendo muito trabalho em copiar os dados de volta.
    Vou testar e qualquer dúvida eu entro em contato.

  • Eduardo

    Bom dia Guilherme. Por favor entre em contato, quero saber se posso contratá-lo para prestar uma pequena consultoria para mim. Eduardo.