Planilha para registrar dados
Enviado: 09 Fev 2021 às 09:47
por JuliaMorais
RESOLVIDO
Olá pessoal, estou criando uma planilha para registrar dados de pH em um relatório. A ideia principal é que a pessoa "clique" nos botões de pH (Imagem 1) e eles sejam inseridos na tabela da Imagem 2. No total são 200 amostras, então a pessoa vai clicando e adicionando na planilha seguindo a ordem apresentada na Imagem 2.
Porém não tenho ideia de como colocar esse comando, e como fazer para ir mudando as linhas.
Se alguém puder me ajudar, obrigada

Re: Planilha para registrar dados
Enviado: 09 Fev 2021 às 10:02
por AfonsoMira
Boas, consegue disponibilizar o seu ficheiro, para o podermos ajudar melhor?
Obrigado!

Re: Planilha para registrar dados
Enviado: 09 Fev 2021 às 11:37
por JuliaMorais
Anexei a planilha que estou usando, porém fiz umas modificações. Nós temos apenas o número máximo de amostras por categoria, então criei uma aba para cada e uma lista suspensa. Então escolhendo a "categoria pH 48 amostras" os dados devem ser gravados nessa aba. Acho que assim ficará mais fácil de passar para o relatório.
O que preciso de ajuda é em como armazenar nas células o que eu cliquei. Pois se clico 48x preciso que mude de linha, coluna e preencha todos os quadros.
Re: Planilha para registrar dados
Enviado: 09 Fev 2021 às 12:33
por AfonsoMira
Então fiz o código para o botão 6.08.
Agora só precisa duplicar para os restantes, o mesmo código, alterando apenas o número dos botões.
Dica: Altere o nome de todos os botões para ficar mais organizado.
Re: Planilha para registrar dados
Enviado: 10 Fev 2021 às 00:15
por osvaldomp
Segue outra solução. Veja se aproveita.
Preparação:
1. no intervalo nomeado existente "categorias" (planilha Lista) coloque os nomes corretos das planilhas, para isso rode o código abaixo que irá elaborar na coluna A a lista com os nomes das planilhas, em seguida copie e cole em "categorias" (célula B4), menos os dois primeiros nomes. A Validação existente naquele intervalo será excluída.
Sub ListaPlanilhas()
Dim ws As Worksheet
[A:A] = ""
For Each ws In ThisWorkbook.Worksheets
Cells(Rows.Count, 1).End(3)(2) = ws.Name
Next ws
End Sub
2. para carregar o Form atual utilize o código abaixo no Módulo1, assim você poderá efetuar outras operações como ativar outra planilha, inserir dados, etc., enquanto o Form estiver carregado.
Sub CarregaForm()
UserForm1.Show vbModeless
End Sub
3. no atual módulo do Form exclua o código Private Sub ComboBox1_Change() que lá existe pois não será necessário e poderá interferir nas operações.
4. no módulo do Form cole uma cópia do código abaixo.
Option Explicit
Dim Buttons() As New BtnClass
Private Sub UserForm_Initialize()
Dim BuCont As Integer, ctl As Control
For Each ctl In UserForm1.Controls
If TypeName(ctl) = "CommandButton" Then
If ctl.Caption Like "LIMPAR*" Or ctl.Caption Like "EMITIR*" Or ctl.Caption Like "VER*" Then Exit Sub
BuCont = BuCont + 1
ReDim Preserve Buttons(1 To BuCont)
Set Buttons(BuCont).ButtonGroup = ctl
End If
Next ctl
End Sub
5. insira um Módulo de Classe, assim: no menu do editor de VBA clique em Inserir | Módulo de classe; renomeie de BtnClass (para renomear clique no menu Exibir | Janela Propriedades e no campo name cole BtnClass.
Na janela do módulo de classe cole uma cópia do código abaixo.
Option Explicit
Public WithEvents ButtonGroup As MsForms.CommandButton
Private Sub ButtonGroup_Click()
Dim LR As Long, LC As Long
If UserForm1.ComboBox1.Text = "" Then MsgBox " NO CAMPO 'Selecione a Leitura'" & vbLf & "SELECIONE A PLANILHA QUE RECEBERÁ OS DADOS": Exit Sub
With Sheets(UserForm1.ComboBox1.Text)
If .[A1] = "" Then
.[A1] = CDbl(ButtonGroup.Caption)
Else: LR = .[A:J].Find(what:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
LC = .Cells(LR, Columns.Count).End(1).Column
If LC = 10 Then
.Cells(LR + 1, 1) = CDbl(ButtonGroup.Caption)
Else: .Cells(LR, LC + 1) = CDbl(ButtonGroup.Caption)
End If
End If
End With
End Sub
Done!
funcionamento - a partir de qualquer planilha carregue o Form .
Selecione na ComboBox o nome da planilha que receberá os dados e vá clicando nos botões do Form para inserir os valores de pH. Os valores serão inseridos na planilha selecionada na ComboBox, a partir de A1, por linhas, de A até J.
Se você quiser, poderemos ajustar o código para lançar os dados diretamente na planilha Laudo, conforme o seu primeiro post.
Re: Planilha para registrar dados
Enviado: 11 Fev 2021 às 10:52
por JuliaMorais
AfonsoMira escreveu:Então fiz o código para o botão 6.08.
Agora só precisa duplicar para os restantes, o mesmo código, alterando apenas o número dos botões.
Dica: Altere o nome de todos os botões para ficar mais organizado.
Olá Afonso, muito obrigada pela ajuda! Estou com outro probleminha na tabela, será que você consegue me ajudar?
O número de amostras a serem testadas não é fixo, então coloquei valores máximos de cada categoria (qntd de células no relatório fixo). Mas pode ser que no dia sejam medidos uma menor quantidade de amostras. Sendo assim, queria que a média que está na célula (17,"B") só fosse calculada com os valores preenchidos. Esses valores são todos abaixo dessa célula (somatório de todas categorias p/ baixo). O mesmo seria feito para o Desvio na célula (17,"D). Já o valor mín e máx também devem pegar somente os valores preenchidos. Esses cálculos podem ser feitos por código no vba? Pois queria que ao clicar no botao "emitir laudo" já fossem atualizados esses valores.
Obs: Coloquei uma regra para ficar cinza todas as células que estiverem com o valor "0,00", para facilitar visualização.
Anexei o arquivo em questão
Re: Planilha para registrar dados
Enviado: 11 Fev 2021 às 10:53
por JuliaMorais
osvaldomp escreveu: ↑10 Fev 2021 às 00:15
Segue outra solução. Veja se aproveita.
Preparação:
1. no intervalo nomeado existente "categorias" (planilha Lista) coloque os nomes corretos das planilhas, para isso rode o código abaixo que irá elaborar na coluna A a lista com os nomes das planilhas, em seguida copie e cole em "categorias" (célula B4), menos os dois primeiros nomes. A Validação existente naquele intervalo será excluída.
Sub ListaPlanilhas()
Dim ws As Worksheet
[A:A] = ""
For Each ws In ThisWorkbook.Worksheets
Cells(Rows.Count, 1).End(3)(2) = ws.Name
Next ws
End Sub
2. para carregar o Form atual utilize o código abaixo no Módulo1, assim você poderá efetuar outras operações como ativar outra planilha, inserir dados, etc., enquanto o Form estiver carregado.
Sub CarregaForm()
UserForm1.Show vbModeless
End Sub
3. no atual módulo do Form exclua o código Private Sub ComboBox1_Change() que lá existe pois não será necessário e poderá interferir nas operações.
4. no módulo do Form cole uma cópia do código abaixo.
Option Explicit
Dim Buttons() As New BtnClass
Private Sub UserForm_Initialize()
Dim BuCont As Integer, ctl As Control
For Each ctl In UserForm1.Controls
If TypeName(ctl) = "CommandButton" Then
If ctl.Caption Like "LIMPAR*" Or ctl.Caption Like "EMITIR*" Or ctl.Caption Like "VER*" Then Exit Sub
BuCont = BuCont + 1
ReDim Preserve Buttons(1 To BuCont)
Set Buttons(BuCont).ButtonGroup = ctl
End If
Next ctl
End Sub
5. insira um Módulo de Classe, assim: no menu do editor de VBA clique em Inserir | Módulo de classe; renomeie de BtnClass (para renomear clique no menu Exibir | Janela Propriedades e no campo name cole BtnClass.
Na janela do módulo de classe cole uma cópia do código abaixo.
Option Explicit
Public WithEvents ButtonGroup As MsForms.CommandButton
Private Sub ButtonGroup_Click()
Dim LR As Long, LC As Long
If UserForm1.ComboBox1.Text = "" Then MsgBox " NO CAMPO 'Selecione a Leitura'" & vbLf & "SELECIONE A PLANILHA QUE RECEBERÁ OS DADOS": Exit Sub
With Sheets(UserForm1.ComboBox1.Text)
If .[A1] = "" Then
.[A1] = CDbl(ButtonGroup.Caption)
Else: LR = .[A:J].Find(what:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
LC = .Cells(LR, Columns.Count).End(1).Column
If LC = 10 Then
.Cells(LR + 1, 1) = CDbl(ButtonGroup.Caption)
Else: .Cells(LR, LC + 1) = CDbl(ButtonGroup.Caption)
End If
End If
End With
End Sub
Done!
funcionamento - a partir de qualquer planilha carregue o Form .
Selecione na ComboBox o nome da planilha que receberá os dados e vá clicando nos botões do Form para inserir os valores de pH. Os valores serão inseridos na planilha selecionada na ComboBox, a partir de A1, por linhas, de A até J.
Se você quiser, poderemos ajustar o código para lançar os dados diretamente na planilha Laudo, conforme o seu primeiro post.
Olá Osvaldo, muito obrigada pela ajuda! Estou com outro probleminha na tabela, será que você consegue me ajudar?
O número de amostras a serem testadas não é fixo, então coloquei valores máximos de cada categoria (qntd de células no relatório fixo). Mas pode ser que no dia sejam medidos uma menor quantidade de amostras. Sendo assim, queria que a média que está na célula (17,"B") só fosse calculada com os valores preenchidos. Esses valores são todos abaixo dessa célula (somatório de todas categorias p/ baixo). O mesmo seria feito para o Desvio na célula (17,"D). Já o valor mín e máx também devem pegar somente os valores preenchidos. Esses cálculos podem ser feitos por código no vba? Pois queria que ao clicar no botao "emitir laudo" já fossem atualizados esses valores.
Obs: Coloquei uma regra para ficar cinza todas as células que estiverem com o valor "0,00", para facilitar visualização.
Anexei o arquivo em questão