Sei sulla pagina 1di 22

Function gerar_rma()

Dim count_hours As Date

Dim area() As String

Sheets("RMA").Select

If Cells(11, 8).Value = "" Then

MsgBox ("Selecione o aluno desejado")

Exit Function

End If

If Cells(11, 15).Value = "" Then

MsgBox ("Selecione o período desejado")

Exit Function

End If

'contabiliza a quantidade de matérias existentes no sistema, baseado na planilha de


cadastro

Sheets("feedback").Select

'k50 indica que contabilizará 50 linhas no máximo.

countrow_area = Worksheets("feedback").range("K500").End(xlUp).Row

'agora é possivel definir o tamanho da matriz que contara as materias

ReDim area(2, countrow_area - 2) 'matriz 3 x tramanho definido de matérias

'Inicializaremos a matriz, lembrando que começa do 0 e devemos descontar o cabeçalho ou


seja -2

For i = 0 To countrow_area - 2

area(0, i) = Cells(i + 2, 11) 'id da materia

area(1, i) = Cells(i + 2, 14) ' nome da materia

area(2, i) = 0 'sera o valor de cada aula realizada referente a materia

Next

'busca o id do aluno baseado no aluno selecionado

Sheets("RMA").Select

nome_aluno = Cells(11, 8).Value


mes = Cells(11, 15).Value

Sheets("user").Select

Columns("F:F").Select

'Encontra o ID do aluno na planilha de usuários

Set cell = Selection.Find(What:=nome_aluno, After:=ActiveCell, LookIn:=xlFormulas, _

LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

MatchCase:=False, SearchFormat:=False)

id_nome = Cells(cell.Row, 1)

'com o id buscamos as aulas que o aluno teve no período

Sheets("lessons").Select

countrow = Worksheets("lessons").UsedRange.Rows.Count

count_hours = 0

count_class = 0

nota_prep = 0

nota_conteudo = 0

conteudo_incapaz = 0

nota_interpretacao = 0

interpretacao_incapaz = 0

nota_aplicacao = 0

aplicacao_incapaz = 0

'percorre toda planilha de aulas armazenando os dados desejados

For i = 1 To countrow

If Cells(i, 15).Value = id_nome Then

'value 2 ele soma tempo como tempo e nao como um número de armazenamento
(value1)
count_hours = count_hours + Cells(i, 20).Value2

count_class = count_class + 1

'armazena o id da aula

id_aula = Cells(i, 1).Value

'garante que trabalharemos sempre nesta planilha

Sheets("lessons").Select

' verifica feedback desta aula em relacao ao desempenho do aluno (4 fatores que
selecionamos)

aux_des = AlunoDes((id_aula))

'Cada variavel se alimenta da matriz gerada com os valores do feedback preenchido


retornados da funcao

nota_prep = nota_prep + aux_des(1, 0)

nota_conteudo = nota_conteudo + aux_des(1, 1)

'Avalia se terá um desconto na quantidade de aulas que foram definidas como incapaz
de avaliar

If aux_des(1, 2) = 1 Then conteudo_incapaz = conteudo_incapaz + 1

nota_interpretacao = nota_interpretacao + aux_des(1, 3)

If aux_des(1, 4) = 1 Then interpretacao_incapaz = interpretacao_incapaz + 1

nota_aplicacao = nota_aplicacao + aux_des(1, 5)

If aux_des(1, 6) = 1 Then aplicacao_incapaz = aplicacao_incapaz + 1

'garante que trabalharemos sempre nesta planilha


Sheets("lessons").Select

'encontra o valor da área id para trabalhar dentro da matriz no preenchimento da linha


3 (indice 2)

'encontrar o elemento na matriz e somar

area_id = Cells(i, 14).Value

For j = 0 To countrow_area - 2

If area(0, j) = area_id Then 'se o id for igual ele conta uma aula para a materia

area(2, j) = area(2, j) + 1

End If

Next

End If

Next

'preenche a planilha planilha 3 de suporte de dados (o gráfico é gerado com base nesses
pontos da planilha)

Sheets("Planilha3").Select

i=0

For j = 0 To countrow_area - 2

If area(2, j) <> 0 Then

Cells(14, 7 + i).Value = area(1, j)

Cells(15, 7 + i).Value = area(2, j)

i=i+1

End If

Next

'Funcao que retorna a frase do quisito preparacao para a aula

frase_prep = FrasePrep(nota_prep / count_class)

'seleciona as informacoes da planilha geral

Sheets("RMA").Select
'insere as informacoes no relatório

Sheets("RMA-2").Select

Cells(18, 6).Value = count_class

Cells(18, 10).Value = count_hours

Cells(3, 8).Value = nome_aluno

Cells(4, 9).Value = mes

Cells(20, 4).Value = frase_prep

Cells(21, 4).Value = (nota_prep / count_class) / 10

Cells(22, 4).Value = nota_conteudo

Cells(23, 4).Value = (nota_conteudo / (count_class - conteudo_incapaz)) / 10

Cells(24, 4).Value = nota_interpretacao

Cells(25, 4).Value = (nota_interpretacao / (count_class - interpretacao_incapaz)) / 10

Cells(26, 4).Value = nota_aplicacao

Cells(27, 4).Value = nota_aplicacao / (count_class - aplicacao_incapaz) / 10

End Function

'funcao que retorna a nota de preparacao do aluno em relacao a uma aula enviada

'o nome da variável que retorna deve ser o mesmo nome da funcao, pois declaro a funcao
como variavel int

Function AlunoDes(id_class As String) As String()

Dim notas() As String

ReDim notas(1, 6) 'matriz 2 x 7 nome do fator de avaliacao e notas

'Inicializaremos a matriz, lembrando que começa do 0 e devemos descontar o cabeçalho ou


seja -2

'Nome do fator - Preparacao, conteudos, interpretacao e aplicacao

notas(0, 0) = "preparacao"
notas(0, 1) = "conteudos"

notas(0, 2) = "conteudos_incapaz"

notas(0, 3) = "interpretacao"

notas(0, 4) = "interpretacao_incapaz"

notas(0, 5) = "aplicacao"

notas(0, 6) = "aplicacao_incapaz"

For i = 0 To 6

notas(1, i) = 0 ' zera as notas de todos os fatores

Next

'Seleciona a planilha de feedbacks, ja é conhecido o id da aula, basta buscar o parâmetro


necessário

Sheets("feedback").Select

'calculo de quantas linhas tem esta planilha

countrow = Worksheets("feedback").UsedRange.Rows.Count

'Percorre a planilha em busca da aula

For i = 1 To countrow

If Cells(i, 6).Value = id_class Then

'**************Este ponto é de extrema importância pois está relacionado com o


question ID, caso houver alguma alteração será necessária edicação manual deste
item!!!!!!!!!!!!!!!

' 8 significa a questao de preparacao do aluno

If Cells(i, 7).Value = 8 Then

'busca de acordo com a resposta e inputa o valor dentro da matriz no campo


preparacao

If Cells(i, 5).Value = 25 Then

notas(1, 0) = 10
End If

If Cells(i, 5).Value = 26 Then

notas(1, 0) = 5

End If

If Cells(i, 5).Value = 27 Then

notas(1, 0) = 0

End If

End If

'Avalia o dominio do aluno quanto ao conteudo

If Cells(i, 7).Value = 9 Then

If Cells(i, 5).Value = 28 Then

notas(1, 1) = 10

End If

If Cells(i, 5).Value = 29 Then

notas(1, 1) = 0

End If

If Cells(i, 5).Value = 30 Then

notas(1, 2) = 1

End If

End If

'Avalia o dominio do aluno quanto a interpretacao

If Cells(i, 7).Value = 10 Then

If Cells(i, 5).Value = 31 Then

notas(1, 3) = 10

End If
If Cells(i, 5).Value = 32 Then

notas(1, 3) = 0

End If

If Cells(i, 5).Value = 33 Then

notas(1, 4) = 1

End If

End If

'Avalia o dominio do aluno quanto a aplicacao

If Cells(i, 7).Value = 11 Then

If Cells(i, 5).Value = 34 Then

notas(1, 5) = 10

End If

If Cells(i, 5).Value = 35 Then

notas(1, 5) = 0

End If

If Cells(i, 5).Value = 36 Then

notas(1, 6) = 1

End If

End If

End If

Next
AlunoDes = notas

End Function

'funcao que busca a frase adequada para a nota recebida no quisito preparacao para a aul

Function FrasePrep(nota_prep As Single) As String

Sheets("frases").Select

'faz o teste se o valor esta dentro dos intervalos definidos em nosssa reuniao

'a expressao rnd retorna um numero aleatorio entre 0 e 1 e faz este calc retornar um
numero aleatorio entre o intervalo

If nota_prep <= 2.5 Then

num = (4 - 2) * Rnd() + 2

'busca a frase baseado no valor aleatório retornado da funcao acima, e retorna uma frase
aleatória

FrasePrep = Cells(num, 3)

Exit Function

End If

If nota_prep <= 5 Then

num = (7 - 5) * Rnd() + 5

FrasePrep = Cells(num, 3)

Exit Function

End If

If nota_prep <= 7.5 Then

num = (10 - 8) * Rnd() + 8

FrasePrep = Cells(num, 3)

Exit Function

End If

If nota_prep <= 10 Then

num = (13 - 11) * Rnd() + 11

FrasePrep = Cells(num, 3)

Exit Function
End If

End Function

Dim count_hours As Date

Dim area() As String

Sheets("RMA").Select

If Cells(11, 8).Value = "" Then

MsgBox ("Selecione o aluno desejado")

Exit Function

End If

If Cells(11, 15).Value = "" Then

MsgBox ("Selecione o período desejado")

Exit Function

End If

'contabiliza a quantidade de matérias existentes no sistema, baseado na planilha de


cadastro

Sheets("feedback").Select

'k50 indica que contabilizará 50 linhas no máximo.

countrow_area = Worksheets("feedback").range("K500").End(xlUp).Row

'agora é possivel definir o tamanho da matriz que contara as materias

ReDim area(2, countrow_area - 2) 'matriz 3 x tramanho definido de matérias

'Inicializaremos a matriz, lembrando que começa do 0 e devemos descontar o cabeçalho ou


seja -2

For i = 0 To countrow_area - 2

area(0, i) = Cells(i + 2, 11) 'id da materia

area(1, i) = Cells(i + 2, 14) ' nome da materia

area(2, i) = 0 'sera o valor de cada aula realizada referente a materia

Next
'busca o id do aluno baseado no aluno selecionado

Sheets("RMA").Select

nome_aluno = Cells(11, 8).Value

mes = Cells(11, 15).Value

Sheets("user").Select

Columns("F:F").Select

'Encontra o ID do aluno na planilha de usuários

Set cell = Selection.Find(What:=nome_aluno, After:=ActiveCell, LookIn:=xlFormulas, _

LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

MatchCase:=False, SearchFormat:=False)

id_nome = Cells(cell.Row, 1)

'com o id buscamos as aulas que o aluno teve no período

Sheets("lessons").Select

countrow = Worksheets("lessons").UsedRange.Rows.Count

count_hours = 0

count_class = 0

nota_prep = 0

nota_conteudo = 0

conteudo_incapaz = 0

nota_interpretacao = 0

interpretacao_incapaz = 0

nota_aplicacao = 0

aplicacao_incapaz = 0

'percorre toda planilha de aulas armazenando os dados desejados

For i = 1 To countrow
If Cells(i, 15).Value = id_nome Then

'value 2 ele soma tempo como tempo e nao como um número de armazenamento
(value1)

count_hours = count_hours + Cells(i, 20).Value2

count_class = count_class + 1

'armazena o id da aula

id_aula = Cells(i, 1).Value

'garante que trabalharemos sempre nesta planilha

Sheets("lessons").Select

' verifica feedback desta aula em relacao ao desempenho do aluno (4 fatores que
selecionamos)

aux_des = AlunoDes((id_aula))

'Cada variavel se alimenta da matriz gerada com os valores do feedback preenchido


retornados da funcao

nota_prep = nota_prep + aux_des(1, 0)

nota_conteudo = nota_conteudo + aux_des(1, 1)

'Avalia se terá um desconto na quantidade de aulas que foram definidas como incapaz
de avaliar

If aux_des(1, 2) = 1 Then conteudo_incapaz = conteudo_incapaz + 1

nota_interpretacao = nota_interpretacao + aux_des(1, 3)

If aux_des(1, 4) = 1 Then interpretacao_incapaz = interpretacao_incapaz + 1

nota_aplicacao = nota_aplicacao + aux_des(1, 5)

If aux_des(1, 6) = 1 Then aplicacao_incapaz = aplicacao_incapaz + 1


'garante que trabalharemos sempre nesta planilha

Sheets("lessons").Select

'encontra o valor da área id para trabalhar dentro da matriz no preenchimento da linha


3 (indice 2)

'encontrar o elemento na matriz e somar

area_id = Cells(i, 14).Value

For j = 0 To countrow_area - 2

If area(0, j) = area_id Then 'se o id for igual ele conta uma aula para a materia

area(2, j) = area(2, j) + 1

End If

Next

End If

Next

'preenche a planilha planilha 3 de suporte de dados (o gráfico é gerado com base nesses
pontos da planilha)

Sheets("Planilha3").Select

i=0

For j = 0 To countrow_area - 2

If area(2, j) <> 0 Then

Cells(14, 7 + i).Value = area(1, j)

Cells(15, 7 + i).Value = area(2, j)

i=i+1

End If

Next

'Funcao que retorna a frase do quisito preparacao para a aula

frase_prep = FrasePrep(nota_prep / count_class)


'seleciona as informacoes da planilha geral

Sheets("RMA").Select

'insere as informacoes no relatório

Sheets("RMA-2").Select

Cells(18, 6).Value = count_class

Cells(18, 10).Value = count_hours

Cells(3, 8).Value = nome_aluno

Cells(4, 9).Value = mes

Cells(20, 4).Value = frase_prep

Cells(21, 4).Value = (nota_prep / count_class) / 10

Cells(22, 4).Value = nota_conteudo

Cells(23, 4).Value = (nota_conteudo / (count_class - conteudo_incapaz)) / 10

Cells(24, 4).Value = nota_interpretacao

Cells(25, 4).Value = (nota_interpretacao / (count_class - interpretacao_incapaz)) / 10

Cells(26, 4).Value = nota_aplicacao

Cells(27, 4).Value = nota_aplicacao / (count_class - aplicacao_incapaz) / 10

End Function

'funcao que retorna a nota de preparacao do aluno em relacao a uma aula enviada

'o nome da variável que retorna deve ser o mesmo nome da funcao, pois declaro a funcao
como variavel int

Function AlunoDes(id_class As String) As String()

Dim notas() As String


ReDim notas(1, 6) 'matriz 2 x 7 nome do fator de avaliacao e notas

'Inicializaremos a matriz, lembrando que começa do 0 e devemos descontar o cabeçalho ou


seja -2

'Nome do fator - Preparacao, conteudos, interpretacao e aplicacao

notas(0, 0) = "preparacao"

notas(0, 1) = "conteudos"

notas(0, 2) = "conteudos_incapaz"

notas(0, 3) = "interpretacao"

notas(0, 4) = "interpretacao_incapaz"

notas(0, 5) = "aplicacao"

notas(0, 6) = "aplicacao_incapaz"

For i = 0 To 6

notas(1, i) = 0 ' zera as notas de todos os fatores

Next

'Seleciona a planilha de feedbacks, ja é conhecido o id da aula, basta buscar o parâmetro


necessário

Sheets("feedback").Select

'calculo de quantas linhas tem esta planilha

countrow = Worksheets("feedback").UsedRange.Rows.Count

'Percorre a planilha em busca da aula

For i = 1 To countrow

If Cells(i, 6).Value = id_class Then

'**************Este ponto é de extrema importância pois está relacionado com o


question ID, caso houver alguma alteração será necessária edicação manual deste
item!!!!!!!!!!!!!!!

' 8 significa a questao de preparacao do aluno


If Cells(i, 7).Value = 8 Then

'busca de acordo com a resposta e inputa o valor dentro da matriz no campo


preparacao

If Cells(i, 5).Value = 25 Then

notas(1, 0) = 10

End If

If Cells(i, 5).Value = 26 Then

notas(1, 0) = 5

End If

If Cells(i, 5).Value = 27 Then

notas(1, 0) = 0

End If

End If

'Avalia o dominio do aluno quanto ao conteudo

If Cells(i, 7).Value = 9 Then

If Cells(i, 5).Value = 28 Then

notas(1, 1) = 10

End If

If Cells(i, 5).Value = 29 Then

notas(1, 1) = 0

End If

If Cells(i, 5).Value = 30 Then

notas(1, 2) = 1

End If

End If

'Avalia o dominio do aluno quanto a interpretacao

If Cells(i, 7).Value = 10 Then


If Cells(i, 5).Value = 31 Then

notas(1, 3) = 10

End If

If Cells(i, 5).Value = 32 Then

notas(1, 3) = 0

End If

If Cells(i, 5).Value = 33 Then

notas(1, 4) = 1

End If

End If

'Avalia o dominio do aluno quanto a aplicacao

If Cells(i, 7).Value = 11 Then

If Cells(i, 5).Value = 34 Then

notas(1, 5) = 10

End If

If Cells(i, 5).Value = 35 Then

notas(1, 5) = 0

End If

If Cells(i, 5).Value = 36 Then

notas(1, 6) = 1

End If
End If

End If

Next

AlunoDes = notas

End Function

'funcao que busca a frase adequada para a nota recebida no quisito preparacao para a aul

Function FrasePrep(nota_prep As Single) As String

Sheets("frases").Select

'faz o teste se o valor esta dentro dos intervalos definidos em nosssa reuniao

'a expressao rnd retorna um numero aleatorio entre 0 e 1 e faz este calc retornar um
numero aleatorio entre o intervalo

If nota_prep <= 2.5 Then

num = (4 - 2) * Rnd() + 2

'busca a frase baseado no valor aleatório retornado da funcao acima, e retorna uma frase
aleatória

FrasePrep = Cells(num, 3)

Exit Function

End If

If nota_prep <= 5 Then

num = (7 - 5) * Rnd() + 5

FrasePrep = Cells(num, 3)

Exit Function

End If

If nota_prep <= 7.5 Then

num = (10 - 8) * Rnd() + 8

FrasePrep = Cells(num, 3)
Exit Function

End If

If nota_prep <= 10 Then

num = (13 - 11) * Rnd() + 11

FrasePrep = Cells(num, 3)

Exit Function

End If

End Function
Sub Atualizar_BD()

'Limpa a planilha para nao ter erros

Sheets("Planilha3").UsedRange.ClearContents

'Copiar e colar Id alunos da tabela de aulas

' criar nova aba com a planilha 3 (nao começar com ela pronta!!!!!) se iniciar e essa planilha já
existir deve deletar e criar uma nova

Sheets("lessons").Select

Columns("O:O").Select

Selection.Copy

Sheets("Planilha3").Select

Columns("A:A").Select

ActiveSheet.Paste

' remover duplicata de valores na coluna

Columns("A:A").Select

Application.CutCopyMode = False

ActiveSheet.range("A:A").RemoveDuplicates Columns:=1, Header:=xlYes

'Encontra a última linha da planilha utilizada

With Sheets("Planilha3")

countrow = .range("A" & .Rows.Count).End(xlUp).Row

End With

If countrow = 0 Or countrow = 1 Then

MsgBox ("Favor inserir as aulas realizadas na aba aulas")

Exit Sub

Else

Sheets("Planilha3").Select
i=1

'Identificar o ID do usuário baseado na planilha de banco de dados de usuários

For Each cell In Worksheets("Planilha3").range("A:A")

On Error Resume Next

result = Application.WorksheetFunction.VLookup(cell,
Worksheets("user").range("A1:AO1000"), 6, True)

If result <> "" Then

Sheets("Planilha3").Select

Cells(i, 2).Value = result

End If

If i >= countrow Then

Exit For

End If

i=i+1

Next

End If

Dim rangelist As range

rangelist = ThisWorkbook.Worksheets("Planilha3").range("A:A")

Sheets("RMA").Select

range("H11").Select

'validar os dados na célula de seleção de alunos

'Valida os dados de acordo com o número de linhas da planilha3

With Selection.Validation

.Delete ' delete previous validation

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:=("=Planilha3!$B$2:$B$" & countrow)

.IgnoreBlank = True

.InCellDropdown = True

.InputTitle = ""
.ErrorTitle = ""

.InputMessage = ""

.ErrorMessage = ""

.ShowInput = True

.ShowError = True

End With

End Sub

Potrebbero piacerti anche