Notifications
Clear all

Gráfico com Variavel

21 Posts
3 Usuários
0 Reactions
2,150 Visualizações
(@guilhermm)
Posts: 11
Active Member
Topic starter
 

Pessoal me ajude por favor... preciso construir gráficos baseados em uma planilha que é aumenta tanto de linhas como de colunas, assim precisei montar uma variavel para calcular linhas e colunas, só que na hora de montar o gráfico via VBA, não consigo escrever o range com a variavel. me ajudem por favor !

segue o código

IDENTIFICANDO TABELAS
lin_col = 1
col_col = 1
lin_set = 1
col_set = col_col + 1

While Cells(1, col_col) <> ""
col_col = col_col + 1
Wend
While Cells(lin_col, 1) <> ""
lin_col = lin_col + 1
Wend
'gráfico de média.col
Sheets("Relatório").Select
Cells(1, 1000).Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = "Média.Col"
'assim que tenho tentado montar
ActiveChart.SeriesCollection(1).Values = "=Relatório!" & Range(Cells(2, col_col - 1), Cells(lin_col - 1, col_col - 1))
'seria esse o range atual, mas para frente ele mudaria 'K2:K4"
'assim ele da certo, mas preciso que seja sem o range fechado
ActiveChart.SeriesCollection(1).XValues = "=Relatório!B2:B4"
ActiveChart.Location where:=xlLocationAsNewSheet, Name:="Nota Méd.Col"
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Text = "Nota Média Por Colaborador"
ActiveChart.Axes(xlValue).Select
ActiveChart.Axes(xlValue).MaximumScale = 10
ActiveChart.SeriesCollection(1).Select
ActiveChart.SetElement (msoElementDataLabelOutSideEnd)
ActiveChart.ClearToMatchStyle
ActiveChart.ChartStyle = 26
ActiveChart.ClearToMatchStyle

 
Postado : 07/04/2014 10:44 am
(@gtsalikis)
Posts: 2373
Noble Member
 

eu não entendi o que vc quer, mas...

se a planilha tiver apenas os dados do gráfico, verifique o comando used.range

 
Postado : 07/04/2014 10:58 am
(@guilhermm)
Posts: 11
Active Member
Topic starter
 

antes de tudo , muito obrigado pela resposta !

Seguinte, tenho uma tabela de avaliação de desempenho, que a cada nota dada aumenta uma coluna e a cada colaborador cadastrado aumenta uma linha, então o primeiro passo para gerara o grafico é medir numero de linhas e colunas certo.

logo após eu preciso pegar uma série de colunas especificar que hoje podem estar em "A" por exemplo e amanha podem estar em "B", por isso preciso usar o contador para verificar onde esta as colunas que eu preciso.

o meu empasse é na linha (ActiveChart.SeriesCollection(1).Values) que pede que seja escrito da seguinte forma "=(planilha_da_tabela)!A1:A2" onde preciso que A1 e A2 sejam as variaveis que coloquei.

então estou tentando fazer assim
"=(planilha_da_tabela)! & Range(Cells(2, col_col - 1), Cells(lin_col - 1, col_col - 1))
o que deveria retornar o range, mas da erro.

preciso colocar essas variaveis para dizer o range.
expliquei melhor ?

 
Postado : 07/04/2014 11:11 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Você já tentou criar um intervalo nomeado e dinâmico depois usa-lo via VBA?

Att

 
Postado : 07/04/2014 11:20 am
(@guilhermm)
Posts: 11
Active Member
Topic starter
 

Boa tarde Alexandre,

Não, como poderia fazer isso tendo linhas e colunas variaveis ?

Att

 
Postado : 07/04/2014 11:27 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Só pela analise da rotina fica um pouco dificil ajustar, teria de recriar a situação e analisar.

Realise pesquisa no forum sobre range dinamico e encontrara aalguns sobre o assunto, dentre eles o abaixo:
Intervalo Dinâmico usando DESLOC() [Resolvido]
viewtopic.php?f=20&t=98

Se não conseguir, para facilitar aqueles que estão disposto a ajudar procure anexar um modelo básico compactado.

[]s

 
Postado : 07/04/2014 11:35 am
(@guilhermm)
Posts: 11
Active Member
Topic starter
 

Boa Tarde Mauro,

Creio que o DESLOC, não seria uma alternativa, tenho uma a tabela é montada atraves de cadastros que sao feitos via formulario. então ela funciona como um DB.
tudo que eu precisaria era adicionar o range através do contador que coloquei.

ja tentei cells(x;y).address e não da,
ja tentei range(cells(x,y),cells(a,b)).address e nao da,
ja tentei direto range(cells(x,y),cells(a,b)) nao da
ja tentei até imputar o nome que o excel sugestiona para uma celula e retornar o valor do texto para o scrip
cells(1,1).value = "=Sheets!range(cells(x,y),cells(A,b))"
sendo que nesse ultimo caso ele escreve igual o formato pedido pelo excel, mas na hora de retornar (cells(1,1).text) ele da erro.

só preciso transformar isso :
ActiveChart.SeriesCollection(1).XValues = "=Relatório!B2:B4"
em isso :
ActiveChart.SeriesCollection(1).XValues = "=Relatório! & range(cells(2,2),cells(4,2))
onde o "2" e "4" que referenciariam linhas e colunas, eu pudesse trocas pelas minhas variaveis (lin_col/col_col)

Devo não estar me fazendo entender, desculpas e muito obrigado pela atenção de todos.
facilitou ou complicou ? kkkkk

 
Postado : 07/04/2014 11:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Considerando que o cabeçalho está na 1º linha

Sub Selecionar()
Dim Rws As Long, Col As Integer, r As Range, fRng As Range

    Set r = Range("A1")
    Rws = Cells.Find(What:="*", After:=r, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Col = Cells.Find(What:="*", After:=r, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column


    Set fRng = Range(Cells(2, 1), Cells(Rws, Col))

    fRng.Select

End Sub

Att

 
Postado : 07/04/2014 11:54 am
(@guilhermm)
Posts: 11
Active Member
Topic starter
 

Valeu a força Alexandre, mas ainda não é isso, creio que não to me fazendo entender =/
como poderia ser mais especifico ?

 
Postado : 07/04/2014 12:00 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Isso?
ActiveChart.SeriesCollection(1).XValues = sheets("Relatório").range(cells(2,2),cells(4,2))

 
Postado : 07/04/2014 12:10 pm
(@guilhermm)
Posts: 11
Active Member
Topic starter
 

EXATAMENTE ISSO !!

Mas quando coloco pra rodar a Macro, ele da o erro 1004
O Método Cell do Range '_Global' Falhou

por isso peço a ajuda de voces =DDDD

 
Postado : 07/04/2014 12:14 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Quando der o erro, veja quais os valores estão nas tuas variáveis de linhas e colunas.

Esse erro provavelmente ocorre porque vc está com uma única célula, digamos que seria:

Range(Cells(1, 1), Cells(1, 1)) (veja que ali só tem uma célula)

Se for assim, o comando está correto, mas os valores que vc pega nas variáveis não estão.

 
Postado : 07/04/2014 12:25 pm
(@guilhermm)
Posts: 11
Active Member
Topic starter
 

Ja verifiquei isso, e tambem não é ...

referenciando direto ( sem as variaveis ) ficou assim:
ActiveChart.SeriesCollection(1).Values = Sheets("Relatório").Range(Cells(2, 12), Cells(4, 12))

tem um range correto, a escrita esta correta, porém da este erro...
caso eu referencie assim :
"=Relatório!K2:K4"
ele da certo !
por isso que eu to tão revoltado... pior que essa parte é crucial pro restante da escrita, todo o projeto ta parado por conta desta linha -.-'

 
Postado : 07/04/2014 12:30 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Sem ver o arquivo fica mais difícil, mas, se vc disse que do modo: "=Relatório!K2:K4

Dá certo, porque não usa funções do Excel, combinando Worksheet.Function com essa fórmula:

=INDIRETO("Relatório!"&ENDEREÇO(2;12)&":"&ENDEREÇO(4;12))

 
Postado : 07/04/2014 12:39 pm
(@guilhermm)
Posts: 11
Active Member
Topic starter
 

Posso tentar, como escreveria isso em VBA ? com o FormulaR1C1 ?

 
Postado : 07/04/2014 12:43 pm
Página 1 / 2