Notifications
Clear all

GRÁFICO PIZZA COM REFERÊNCIAS VARIÁVEIS

6 Posts
2 Usuários
0 Reactions
1,600 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá pessoal estou com uma dúvida cruel. Preciso fazer um gráfico de pizza através do vba, mas existe alguns limitadores. Na tabela de dados, o gráfico é feito apenas depois de filtrar a tabela. E esses valores mudam de acordo com a vontade do usuário. Para resolver esse problema de áreas variáveis eu imaginei que nomear as áreas cada vez que o usuário escolhe uma referência diferente iria resolver o meu problema, porém quando executo o comando ele não cria o gráfico. Já procurei questões semelhantes mas não encontrei. Abaixo segue o código do comando, a planilha eu não anexei pq o site está dando problema.


Private Sub CMDPROCESSARGRAFICOCONTA_Click()
    Dim DATEI As Double
    Dim DATEF As Double
    DATEI = DTINICIALGRAFICOCONTA.Value
    DATEF = DTFINALGRAFICOCONTA.Value
    If OPTPAGARGRAFICOCONTA.Value = True Then
        If ActiveSheet.FilterMode Then
            ActiveSheet.ShowAllData
        End If
        Sheets("FLUXO").Select
        Range("B3").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$3:$G$100").AutoFilter Field:=2, Criteria1:=">=" & CLng(CDate(DATEI)), Operator:=xlAnd, Criteria1:="<=" & CLng(CDate(DATEF))
        ActiveSheet.Range("$A$3:$G$100").AutoFilter Field:=6, Criteria1:="EM ABERTO"
        Range("E4").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, "E4").Name = "VALOR"
        Range("G4").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, "G4").Name = "NOME"
        Sheets("PLAN2").Select
        Range("A1").Select
        ActiveSheet.Shapes.AddChart.Select
        With ActiveChart
            .ChartType = xlPie
            .SeriesCollection(1).XValues = Sheets("PLAN1").Range("NOME")
            .SeriesCollection(1).Values = Sheets("PLAN1").Range("VALOR")
        End With
        Selection.ShowValue = True
        Range("R12").Select
    Else
        If ActiveSheet.FilterMode Then
            ActiveSheet.ShowAllData
        End If
        Sheets("PLAN1").Select
        Range("B3").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$3:$G$100").AutoFilter Field:=2, Criteria1:=">=" & CLng(CDate(DATEI)), Operator:=xlAnd, Criteria1:="<=" & CLng(CDate(DATEF))
        ActiveSheet.Range("$A$3:$G$100").AutoFilter Field:=6, Criteria1:="FECHADO"
        Range("E4").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, "E4").Name = "VALOR"
        Range("G4").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, "G4").Name = "NOME"
        Sheets("PLAN2").Select
        Range("A1").Select
        ActiveSheet.Shapes.AddChart.Select
        With ActiveChart
            .ChartType = xlPie
            .SeriesCollection(1).XValues = Sheets("PLAN1").Range("NOME")
            .SeriesCollection(1).Values = Sheets("PLAN1").Range("VALOR")
        End With
        Selection.ShowValue = True
        Range("R12").Select
    End If
End Sub

 
Postado : 12/02/2012 4:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia carnio89

Eu sei que vc pediu para fazer com VBA, mas dê uma olhadinha na solução com fómulas que eu sugeri para o Ricardo Alves no tópico abaixo.

viewtopic.php?f=18&t=3301

Dê retorno.

Abraço.

 
Postado : 13/02/2012 6:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Patropi verifiquei o seu tópico, e ele meu uma idéia para outra seção do meu programinha. Mas nesse caso preciso que seja em vba. Na verdade, se você observar o meu código aparecerá uma instrução WITH, nela tem a propriedade seriescollection(1).xvalues = referência é justamente nesta referência que sempre dá erro. E o gráfico não é feito. Precisava que o Range fosse modificado a cada definição do usuário. Em anexo segue o programinha.

 
Postado : 13/02/2012 5:00 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ninguém conseguiu resolver meu problema?

 
Postado : 07/03/2012 6:11 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite!!

E quanto a postagem do patropi, não te serve se for via formula?

 
Postado : 07/03/2012 6:24 pm
(@mauriciostrev)
Posts: 1
New Member
 

Olá cranio89

tente mudar a opção with, utilizando ela da seguinte maneira:

With Worksheets("PLAN1")
ActiveChart.SeriesCollection(1).XValues = .Range("NOME")
ActiveChart.SeriesCollection(1).Values = .Range("VALOR")
End With

Eu tive o mesmo problema que você, fazendo dessa forma eu resolvi, a única diferença no meu é que eu utilizei o .Range com o .Cells :
.Range(.Cells(1, 2), .Cells(NumberOfPoints, 2))

 
Postado : 22/03/2012 1:00 pm