Página 1 de 1
Melhoria Macro Parcelamento
Enviado: 29 Set 2020 às 18:52
por SandroLima
Boa noite, usuários e colaboradores do fórum.
Gostaria de pedir ajuda de vcs para fazer um "upgrade" em uma macro que possuo de "Parcelamento".
A macro de parcelamento está inserida no botão "Parcelamento Atual" e funciona perfeitamente.
A macro com as mudanças que estou tentando implementar associei ao botão "Parcelamento Modificado"
Consegui com que ela funcionasse parcialmente apenas...
O que gostaria que a macro modificada fizesse de novidade:
1) Que na InputBox que pergunta o Nº de Registro para o qual se deseja fazer o parcelamento que ela já trouxesse a informação do registro cuja linha da tabela está selecionada.
Por exemplo a linha em que se encontra o paciente "Basílio" é a de registro número 10 e que então a inputbox trouxesse essa informação caso qualquer célula dessa linha estivesse selecionada. E que o número informado na Inputbox estivesse selecionado (destacado) para facilitar a alteração caso necessário.
2) Não sei se isso é possível mas também é desejado que caso o valor da célula que contem o número de parcelas seja "" (vazio) ou "-" que na mesma inputbox ele tenha o campo para inserir a quantidade de parcelas. Caso isso não seja possível que ele abra então uma segunda inputbox para informar a quantidade de parcelas.
A primeira Inputbox continua sendo a que pergunta o nº do Registro a ser alterado.
3) As novas linhas inseridas deverão ser sempre acima daquela que deu origem ao parcelamento.
Na sequencia... Parcela 1 de 3, Parcela 2 de 3, parcela 3 de 3...
Assim como na macro atual.. porém ela só funciona quando a linha que origina o parcelamento encontra-se no topo da tabela.
Poderiam me ajudar com isso?
Segue a planilha anexa para testes.
Nela estão as duas Macros.
A macro "Parcelamento Atual" funciona adequadamente mas apenas quando o registro em questão encontra-se na primeira linha da tabela.
E a Macro "Parcelamento Modificado" que tentei fazer o esboço funciona parcialmente.
Obrigado a quem puder colaborar.
Re: Melhoria Macro Parcelamento
Enviado: 02 Out 2020 às 15:10
por SandroLima
Boa tarde...
Alguém tem sugestões para ajudar na melhoria?
Re: Melhoria Macro Parcelamento
Enviado: 06 Out 2020 às 14:45
por SandroLima
Boa tarde.
Alguém sabe se é possível esse tipo de melhoria? Poderiam me ajudar?
Re: Melhoria Macro Parcelamento
Enviado: 08 Out 2020 às 12:06
por babdallas
Faça o seguinte por favor: explique com detalhes e exemplos como deve ser a inserção dos dados de parcelamento e de onde os dados são provenientes.
Baseado na sua explicação, prefiro fazer uma macro do zero para que atenda a sua necessidade do que ficar adaptando a antiga.
Re: Melhoria Macro Parcelamento
Enviado: 10 Out 2020 às 15:22
por SandroLima
Boa tarde, babdallas.
Vamos lá.
A Macro atual me atende bem mas queria deixá-la ainda melhor.
Ela faz o passo a passo que preciso a partir da 1ª linha da tabela:
- Insere a quantidade de linhas conforme o valor da coluna [Qtde Parcelas]
- Copia os dados da linha primária ou linha base para as demais linhas inseridas
- Faz a distinção das novas linhas inseridas na coluna [Competência] inserindo valores com a discriminação da parcela (Parcela 1 de 5, Parcela 2 de 5 e assim sucessivamente...)
O grande porém da macro é que ela só funciona se a linha que eu quero realizar o parcelamento estiver na 1ª posição do corpo da tabela.
A macro com as mudanças que estou tentando implementar associei ao botão "Parcelamento Modificado"
Iniciei o código dela baseado em uma outra macro que possuo para outra finalidade.
Com a nova macro eu gostaria:
1) Fosse aberta uma InputBox na qual será inserido o Nº do Registro da linha para a qual se deseja apontar a Macro
2) Que na InputBox já venha nativo o valor do Registro da linha que está selecionada.
Em nosso exemplo prático suponhamos que qualquer célula da linha com o Nº da coluna {Registro] igual a "10" (linha para qual desejo realizar o parcelamento) esteja selecionada.
Por exemplo estou com a célula com o valor "Suzana Gonçaves Braga" (G15) ou com o valor "2000" (J15) selecionadas... enfim qualquer célula da linha de Registro 10 que é a que desejo para realizar o parcelamento.
Ao clicar no botão da Macro ela abre uma InputBox já trazendo o valor "10" (que é a linha cuja alguma célula está selecionada e para a qual desejo fazer o parcelamento).
O valor dentro da Inpubox já deve vir preenchido com o valor "10" de maneira que possa ser editável ao digitar outro valor sem a necessidade de apagar o valor usando o backspace (valor selecionado pelo cursor).
Esqueci o termo que se fala agora... o 10 já viria selecionado para eu possa digitar outro valor (caso queira) sem a necessidade de apertar o backspace e apagar o "10" antes de digitar outro valor. Apenas para facilitar a alteração casso desejada.
3) Se for possível é desejado que caso o valor da célula na coluna [Qtde Parcelas] seja "" (vazio) ou "-" que na mesma inputbox ele tenha o campo para inserir a quantidade de parcelas.
Caso isso não seja possível que ele abra então uma segunda inputbox para que seja informada a quantidade de parcelas.
4) A linha que deu origem ao parcelamento deve ser deslocada para o Topo da Tabela (vide Planilha "RESULTADO DESEJADO INICIAL")
As novas linhas inseridas deverão ser sempre acima daquela que deu origem ao parcelamento.
Na sequencia... Parcela 1 de 3, Parcela 2 de 3, parcela 3 de 3...
Inseri a Planilha "RESULTADO DESEJADO FINAL" para mostrar o resultado desejado
Segue a planilha anexa com o resultado desejado para testes.
Re: Melhoria Macro Parcelamento
Enviado: 20 Out 2020 às 17:05
por SandroLima
Boa tarde, pessoal.
Alguém tem sugestões de melhoria para a macro?
Re: Melhoria Macro Parcelamento
Enviado: 20 Out 2020 às 20:48
por Raygsson
A sua demanda esta muito grande, muita gente nem vai ler.
Tenta abrir tópicos menores, fazer os ajustes por partes.
Talvez assim consiga ajuda.
Att,
Raygsson
Re: Melhoria Macro Parcelamento
Enviado: 29 Out 2020 às 11:55
por SandroLima
Bom dia.
Alguém poderia me ajudar a melhorar a macro?
Re: Melhoria Macro Parcelamento
Enviado: 29 Out 2020 às 12:56
por AfonsoMira
Boas estive a dar uma olha e por enquanto apenas consegui fazer com que o input box traga o valor "Padrão".
Código:
Código: Selecionar todosSub Parcelamento_Modificado()
Dim Plan As Worksheet
Dim Tabela As ListObject
Dim Col_Zero As Long, Col_Reg As Long
Dim NRegistro As Integer
Dim CodRecibo As Variant, Matriz() As Variant, Erro As Variant
Dim Counter As Long, Linha As Long, ColRecibo As Long
Dim valor As Double
Dim X As Long
Dim valorPadrao As Long
Set Plan = Wsh_AtivDiarias
Set Tabela = Plan.ListObjects("TB_AtivDiarias")
Matriz = Tabela.DataBodyRange.Value
Col_Zero = Tabela.DataBodyRange.Range("A1").Column - 1
Col_Reg = Tabela.ListColumns("Registro").DataBodyRange.Column - Col_Zero
If IsNumeric(Cells(ActiveCell.Row, 2)) Then
valorPadrao = Cells(ActiveCell.Row, 2).Value
End If
Application.EnableEvents = False
Application.ScreenUpdating = False
Do
On Error GoTo ErroLocaliza
NRegistro = InputBox("Informe o Nº do Registro para realizar o parcelamento", "PARCELAMENTO", valorPadrao)
For Linha = LBound(Matriz, 1) To UBound(Matriz, 1)
If Matriz(Linha, Col_Reg) = NRegistro Then 'Se o registro existir...
Tabela.ListColumns("Competência").DataBodyRange.Cells(1, 1).Value = "Parcela " & 1 & " de " & _
Tabela.ListColumns("Qtde Parcelas").DataBodyRange.Cells(1, 1).Value
On Error Resume Next
For X = 2 To Tabela.ListColumns("Qtde Parcelas").DataBodyRange.Cells(1, 1).Value
Tabela.ListRows.Add (1), alwaysinsert:=True
Tabela.ListRows(2).Range.Copy
Tabela.ListRows(1).Range.PasteSpecial xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
Tabela.ListColumns("Registro").DataBodyRange.Cells(1, 1).Value = _
Tabela.ListColumns("Registro").DataBodyRange.Cells(1, 1).Value + 1
Tabela.ListColumns("Competência").DataBodyRange.Cells(1, 1).Value = "Parcela " & X & " de " & _
Tabela.ListColumns("Qtde Parcelas").DataBodyRange.Cells(1, 1).Value
If Tabela.ListColumns("Item").DataBodyRange.Cells(1, 1).Value = "Paciente" Then
Tabela.ListColumns("Status Recibo / NF").DataBodyRange.Cells(1, 1).Value = ""
Else
End If
Next
Counter = Counter + 1
Exit For
End If
Next Linha
If Linha = 0 Or Linha = UBound(Matriz, 1) + 1 Then
MsgBox "Registro não encontrado" & vbCrLf & vbCrLf & NRegistro
Else
Erase Matriz
Wsh_AtivDiarias.Activate
Exit Do
End If
Loop
Set Tabela = Nothing
Set Plan = Nothing
If 1 = 2 Then
ErroLocaliza:
Erro = Err
MsgBox "Ocorreu o erro " & Erro & ". Verifique!"
Application.ScreenUpdating = True
End If
End Sub
Vou tentar fazer as outras questões que colocou.

Re: Melhoria Macro Parcelamento
Enviado: 29 Out 2020 às 14:19
por AfonsoMira
Boas veja se é este o resultado que deseja.
Corri a macro e fiz a comparação com o ficheiro que envio na aba "RESULTADO DESEJADO FINAL" e ficou igualzinho.
Código:
Código: Selecionar todosSub parcelar()
Dim valorPadrao As Long
Dim i As Long
Dim Tabela As ListObject
Dim NRegistro As Long
Dim maximo As Double
Dim UltimaLinha As Long
Dim Linha As Long
Dim qtd_parcela As Integer
Dim linhaTabela As Long
Dim x As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
End With
Set Tabela = ActiveSheet.ListObjects("TB_AtivDiarias234")
If IsNumeric(Cells(ActiveCell.Row, 2)) Then
valorPadrao = Cells(ActiveCell.Row, 2).Value
End If
NRegistro = InputBox("Informe o Nº do Registro para realizar o parcelamento", "PARCELAMENTO", valorPadrao)
If NRegistro = 0 Then
MsgBox "Insira um valor!", vbOKOnly
Exit Sub
End If
UltimaLinha = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
Linha = 0
For i = 12 To UltimaLinha
If Cells(i, 2).Value = NRegistro Then
Linha = i
i = i + UltimaLinha
End If
Next i
If Linha = 0 Then
MsgBox ("Nº de Registro não encontrado!")
Exit Sub
End If
If Cells(Linha, 11).Value = "" Or Cells(Linha, 11).Value = "-" Then
qtd_parcela = InputBox("Informe a quantiade de parcelas", "PARCELAS", 1)
Cells(Linha, 11).Value = qtd_parcela
End If
Cells(Linha, 13).Value = "Parcela " & 1 & " de " & Cells(Linha, 11).Value
linhaTabela = Linha - 11
For x = 2 To Cells(Linha, 11).Value
Tabela.ListRows.Add (1), alwaysinsert:=True
Tabela.ListRows(linhaTabela + 1).Range.Copy
Tabela.ListRows(1).Range.PasteSpecial xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
maximo = WorksheetFunction.Max(Range("B12:B9999"))
Tabela.ListColumns("Registro").DataBodyRange.Cells(1, 1).Value = maximo + 1
Tabela.ListColumns("Competência").DataBodyRange.Cells(1, 1).Value = "Parcela " & x & " de " & Cells(Linha + 1, 11).Value
If Tabela.ListColumns("Item").DataBodyRange.Cells(1, 1).Value = "Paciente" Then
Tabela.ListColumns("Status Recibo / NF").DataBodyRange.Cells(1, 1).Value = ""
Else
End If
linhaTabela = linhaTabela + 1
Next x
With Application
.ScreenUpdating = True
.EnableEvents = True
.DisplayAlerts = True
.CutCopyMode = False
End With
End Sub
Re: Melhoria Macro Parcelamento
Enviado: 19 Nov 2020 às 09:17
por SandroLima
Bom dia, AfonsoMira.
Desculpe pela demora em retornar... precisei me ausentar por um período e depois estive testando o código.
Fiz umas junções e adequações do primeiro com o segundo código que enviou e atendeu o que necessitava.
Muito obrigado pela grande ajuda.
Onde coloco o tópico por resolvido agora?
Tenha uma excelente semana.