Notifications
Clear all

Loop para Parcelas e Datas

9 Posts
2 Usuários
0 Reactions
1,602 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa Noite,

Galera, por favor vejam se podem me ajudar!

Gostaria de incluir um botão em uma sheet e ela fizesse um loop na outra sheet colocando tanto de parcelas e acrescentando um mês a cada linha também.

Montei um exemplo (anexo), porém não sei por onde começar a fazer o loop.

Será que alguém pode me ajudar ?

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 21/10/2014 9:17 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Ajala, segue exemplo de código, na exata disposição dos dados do seu anexo.

Clique com o bitão direito sobre o nome da guia/ Exibir código

Cole a rotina abaixo.

Faça testes e verifique se o resultado é o esperado.

Sub Expandir()

Set wss = Sheets("Plan1")

d = wss.Cells(3, 3) ' data 1ª parcela
i = 1 ' nº 1ª parcela
n = wss.Cells(4, 3) 'total de parcelas
v = wss.Cells(5, 3) / n 'valor parcela

lin = 5

Do While i <= n
Cells(lin, 2) = d
Cells(lin, 3) = i
Cells(lin, 4) = "de"
Cells(lin, 5) = n
Cells(lin, 6) = v

d = d + 30
i = i + 1
lin = lin + 1

Loop

End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 22/10/2014 10:25 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite Edson

A tua macro funcionou perfeitamente, apenas percebi que deverá alterar o lin = 5 para lin = 6 para evitar que o Valor Total seja sobreposto pela primeira parcela.

Me desculpe a intromissão, mas é que eu gostei da macro e ao testar percebi este problema.

Um abraço.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 22/10/2014 5:42 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Edson, muito obrigado.

Funcionou sim, mas acho que não dei todas as coordenadas. Essas informações vão alimentar um banco, sendo assim preciso que os proximo vão abaixo do ultimo.

Mas como fixamos o "lin" em 2 ele sempre sobrepõe os dados já preenchidos, tentei fazer ele contar ir adicionando abaixo mas não deu.

Da uma olhada.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 22/10/2014 9:37 pm
Reinaldo
(@rlm)
Posts: 246
Estimable Member
 

Experimente

Sub Expandir()

Dim WSSaida As Worksheet, wSS As Worksheet
Dim FinalRow As Long, Lin As Long
Dim d As Date, i As Integer, n As Integer, v As Currency
Set wSS = Worksheets("Resumo")
Set WSSaida = Worksheets("BD_SAIDAS")

d = wSS.Cells(11, 3) ' data 1ª parcela
i = 1 ' nº 1ª parcela
n = wSS.Cells(14, 5) 'total de parcelas
v = wSS.Cells(13, 3) / n 'valor parcela

WSSaida.Activate
FinalRow = WSSaida.Cells(Application.Rows.Count, 16).End(xlUp).Row

'WSSaida.Cells(FinalRow, 16).Select

Lin = Range("P1048576").End(xlUp).Row + 1

Do While i <= n
    Cells(Lin, 16) = d
    Cells(Lin, 20) = i
    Cells(Lin, 21) = "de"
    Cells(Lin, 22) = n
    Cells(Lin, 18) = v

d = DateAdd("m", 1, d) 'd + 30
i = i + 1
Lin = Lin + 1
Loop

End Sub

Reinaldo

 
Postado : 22/10/2014 10:07 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo bom dia,

O vba entra em loop "infinito", acredito que seja porque estamos adicionando +1:

Lin = Range("P1048576").End(xlUp).Row + 1

Quando fixamos essa variável em uma célula ele faz todo o processo e para depois quando esta desta forma ele fica continuo.

:?

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 23/10/2014 3:46 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Testando seu modelo, funcionou perfeitamente com a rotina que o Reinaldo adaptou, a única alteração que fiz foi trocar :
P1048576 por P65536 devido ao meu excel ser 2003.

Uma obs, provavelmente devido ao ctrl+c e ctrl+v na rotina estas linhas fazem a mesma ação, só alterando o +1 que é necessário para pegar a última celula vazia, sem ela estará subscrevendo o último registro anterior com o primeiro.

FinalRow = WSSaida.Cells(Application.Rows.Count, 16).End(xlUp).Row
Lin = Range("P65536").End(xlUp).Row + 1

Troque :
FinalRow = WSSaida.Cells(Application.Rows.Count, 16).End(xlUp).Row por :
Lin = WSSaida.Cells(Application.Rows.Count, 16).End(xlUp).Row + 1
e apague a "Lin = Range("P65536").End(xlUp).Row + 1"
Ficando assim :

    Sub Expandir()

    Dim WSSaida As Worksheet, wSS As Worksheet
    'Dim FinalRow As Long
    Dim Lin As Long
    Dim d As Date, i As Integer, n As Integer, v As Currency
    Set wSS = Worksheets("Resumo")
    Set WSSaida = Worksheets("BD_SAIDAS")

    d = wSS.Cells(11, 3) ' data 1ª parcela
    i = 1 ' nº 1ª parcela
    n = wSS.Cells(14, 5) 'total de parcelas
    v = wSS.Cells(13, 3) / n 'valor parcela

    WSSaida.Activate
    Lin = WSSaida.Cells(Application.Rows.Count, 16).End(xlUp).Row + 1

    Do While i <= n
            Cells(Lin, 16) = d
            Cells(Lin, 20) = i
            Cells(Lin, 21) = "de"
            Cells(Lin, 22) = n
            Cells(Lin, 18) = v
    
        d = DateAdd("m", 1, d) 'd + 30
        i = i + 1
        Lin = Lin + 1
    Loop

    End Sub

Mas não entendi o que quer dizer com :

Quando fixamos essa variável em uma célula ele faz todo o processo e para depois quando esta desta forma ele fica continuo

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 23/10/2014 6:33 am
Reinaldo
(@rlm)
Posts: 246
Estimable Member
 

Ajala, o loop é determinado pela linha --> Do while i<n, a variável Lin é utilizada apenas para não sobrescrever os registros existentes; conforme sua demanda.

Se "entra em loop infinito" (no modelo que enviou e testei, assim como o Mauro Coutinho funcionou normalmente), certifique-se do valor de "n" esteja corretamente definido.

Reinaldo

 
Postado : 23/10/2014 7:00 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito obrigado pessoal, o "cabaço" aqui estava fazendo somente testes e não apliquei em um botão e fiz merda.

Esta funcionando perfeitamente.

Obrigado mesmo.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 23/10/2014 7:40 am