Ir ao conteúdo
  • Cadastre-se

Transferência dados Plan1 para Plan2 e Plan3


silvajmp0

Posts recomendados

Olá pessoal,

Sou iniciante em vba Excel, tenho um planilha que salva os dados Plan1 para Plan2 e Plan3, bom era para salvar, mas não esta dando certo e não sei aonde estou errando, mais explicações e melhor entendimento da minha necessidade em anexo.

silva_jmp :o

http://www.4shared.com/file/oyTYu8e1/MODELO_TESTE.html

Link para o comentário
Compartilhar em outros sites

testaí, Silva

Sub SalvarPedVenda()
Application.ScreenUpdating = False
Dim ws As Worksheet, LR, k, m, x, y, z, w As Long
Set ws = ThisWorkbook.Sheets("PedVenda")
k = Application.CountA(ws.Range("E20:E26"))
m = Application.WorksheetFunction.Count(ws.Range("E29:E31"))
x = (k * m) - 1
If ws.[E8] = "" Or ws.[C29] = "" Or k = 0 Then Exit Sub
With ThisWorkbook.Sheets("RelVenda")
LR = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range(.Cells(LR, 1), .Cells(LR, 1).Offset(x)) = ws.[E8]
.Range(.Cells(LR, 2), .Cells(LR, 2).Offset(x)) = ws.[J8]
.Range(.Cells(LR, 3), .Cells(LR, 3).Offset(x)) = ws.[K8]
.Range(.Cells(LR, 4), .Cells(LR, 4).Offset(x)) = ws.[E12]
.Range(.Cells(LR, 12), .Cells(LR, 12).Offset(x)) = ws.[C29]
.Range(.Cells(LR, 13), .Cells(LR, 13).Offset(x)) = ws.[C33]
Do While y < k
ws.Range("E" & 20 + y & ":J" & 20 + y).Copy
.Cells(LR + m * y, 5).Resize(m).PasteSpecial Paste:=xlPasteValues
Do While z < m
ws.Range("E" & 29 + z).Copy
.Cells(LR + w + z, 14).PasteSpecial Paste:=xlPasteValues
.Cells(LR + w + z, 14).PasteSpecial Paste:=xlPasteValues
z = z + 1
Loop
z = 0
w = w + m
y = y + 1
Loop
ws.Range("E8,J8,K8,E12:H12,J32:K32,I29,I30,E20:J26").ClearContents
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
Sheets("PedVenda").Select
Range("E12").Select
End Sub

sugestão - as suas fórmulas em 'E29:E31'usam a função AGORA(), que retorna data e hora; talvez melhor utilizar HOJE() no lugar. No entanto, penso que o ideal seria que essas fórmulas buscassem a data em 'J8', pois, se o pedido não for salvo na mesma data em que for aberto provocará divergência nas datas de vencimento das parcelas, se isso for relevante, claro.

Link para o comentário
Compartilhar em outros sites

Osvaldo, obrigado por mandar pelo clubedohardware a duvida que coloquei no outro fórum e a sugestão, bom testei deu certo, mas observei que se eu manter o número dos itens, as quantidades e valor preço unitário no relatório, se eu for fazer um controle de estoque ou somar os pedidos vai dar resposta dos valores incorretos, e possível manter o número dos itens, quantidade e valor unitário na primeira linha de cada item do produto, no caso se houver para itens, e o resto continua igual...

silva_jmp

Link para o comentário
Compartilhar em outros sites

Aê, Silva.

Desculpe pela demora.

Teste esta fórmula em 'G29', arraste para baixo:

=SE(D29="";"";SE(E(ÉNÚM(F29);F29>0;F29>=E29);"PAGAMENTO EFETUADO";SE(E(ÉNÚM(F29);F29>0;F29<E29);"PAGAMENTO PARCIAL";SE(D29>=HOJE();"DENTRO DO PRAZO";"PAGAMENTO ATRASADO"))))

A outra parte que você pediu, transcrita abaixo... tá embaçado, o tico e teco não deram conta de entender o que você deseja... tente descrever por partes, acho que tá meio embolado...

Na plan *PedVenda* gostaria de usar o próprio layout do pedido para efetuar consulta por pedido onde todas as células devem estar travadas menos as que vamos lançar os pagamentos por vencimento, acrescida na célula F29:F31 e I29:I30 que são para o desconto ou acrescimo do total e criar um botão *Alterar* para salvar as alterações somente das células F29:F31, I29:I30 lançando na plan *RelVenda* as alterações conforme as linhas dos pedido alterado e as linha da data do vencimento.

Link para o comentário
Compartilhar em outros sites

Boa noite, Silva !

Tentando contribuir..

Gostaria também que você desse um olhada na formula na célula G29, na qual, já me atende, mas gostaria de acrescentar mais uma condição que quando a célula F29 for <> E29, "PAGAMENTO PARCIAL", pois tentei colocar mais deu excesso de argumento.

A formula ficou muito longa, mais veja se atende ao seu pedido.

Baixe --->> Click aquí.

Dê retorno,

Abraços,

Link para o comentário
Compartilhar em outros sites

A formula ficou muito longa, mais veja se atende ao seu pedido.

sugestão - insira em F29:F31 um espaço, ou uma letra, ou um valor maior do que 645, veja se o resultado da sua fórmula está coerente...

Link para o comentário
Compartilhar em outros sites

Bom dia, Osvaldo !

1-) insira em F29:F31 um espaço, 2 -) ou uma letra
.

1- Formatei para contábil inserir o espaço não aconteceu nada.

2 - Também não teve alteração nenhuma.

Dê mais detalhe do q/ você/ encontrou de encoerente na formula, resaltando q/ fiz baseado na antiga formula q/ já existia na plan. Mais enfim estamos aqui para ajudar e ser ajudado.

Abraços !

Link para o comentário
Compartilhar em outros sites

Silva, das 4 pendências que você relacionou no último arquivo que postou seguem sugestões para resolver 3 delas. A última, se entendi corretamente, será um projeto grande, talvez você pudesse cogitar em fazer tudo isto em Access. Ou, se quer continuar com o Excel, separe o projeto em partes e vá colocando as partes aqui para obter ajuda.

1. resultado das fórmulas - as fórmulas em 'E29:E31' estão retornando resultado correto. O problema está no 'Vr.Parc.'. Este valor, se tiver dízima, exibe valor menor do que é, formate com 4 ou 5 casas decimais para ver, então o 'Vr. Pago' será sempre menor.

ex. 'Vr.Parc.' igual a 28,333333..., o 'Vr. Pago' será 28,33, então a fórmula retorna 'PAGAMENTO PARCIAL', porque o valor pago foi menor do que o valor a pagar.

Essa situação realmente não foi prevista.

Uma foma de resolver é arrendondar os valores em 'Vr.Parc.' Testaí:

E29

=SE($J$31="";"";SE($J$8="";"";SE($C$29=$AX$7;$J$31;SE($C$29=$AX$8;$J$31;SE($C$29=$AX$9;[COLOR="Red"]ARRED([/COLOR]$J$31/2[COLOR="Red"];2)[/COLOR];SE($C$29=$AX$10;[COLOR="Red"]ARRED([/COLOR]$J$31/3[COLOR="Red"];2)[/COLOR];""))))))

E30

=SE($J$31="";"";SE($J$8="";"";SE($C$29=$AX$9;[COLOR="Red"]ARRED([/COLOR]$J$31/2[COLOR="Red"];2)[/COLOR];SE($C$29=$AX$10;[COLOR="Red"]ARRED([/COLOR]$J$31/3[COLOR="Red"];2)[/COLOR];""))))

E31 =SE($J$31="";"";SE($J$8="";"";SE($C$29=$AX$10;[COLOR="Red"]ARRED([/COLOR]$J$31/3[COLOR="Red"];2)[/COLOR];"")))

2. data do vencimento - no Módulo1, macro 'SalvarPedVenda', alterei a linha abaixo; formate a coluna 'Q' para Data

ws.Range("E" & 29 + z).Copy

para esta

ws.Range("D" & 29 + z).Copy

3. repetição da 'Qte' e 'Preço Un.' - acrescentei no código para não repetir

4. substitua o código que está no seu arquivo por este abaixo

5. alterei também no código a linha que idenfifica a última célula preenchida, pois antes utilizava a coluna 'C' e você colocou fórmulas até 'C5000', que antes não havia; mudei para a coluna 'D'

LR = .Cells(Rows.Count, 4).End(xlUp).Row + 1

Sub SalvarPedVenda()
Application.ScreenUpdating = False
Dim ws As Worksheet, LR, [COLOR="Red"]LR1[/COLOR], k, m, x, y, z, w As Long
Set ws = ThisWorkbook.Sheets("PedVenda")
k = Application.CountA(ws.Range("E20:E26"))
m = Application.WorksheetFunction.Count(ws.Range("E29:E31"))
x = (k * m) - 1
If ws.[E8] = "" Or ws.[C29] = "" Or k = 0 Then Exit Sub
With ThisWorkbook.Sheets("RelVenda")
LR = .Cells(Rows.Count, [COLOR="Red"]4[/COLOR]).End(xlUp).Row + 1
.Range(.Cells(LR, 4), .Cells(LR, 4).Offset(x)) = ws.[E8] 'Registro
.Range(.Cells(LR, 5), .Cells(LR, 5).Offset(x)) = ws.[J8] 'Data
.Range(.Cells(LR, 6), .Cells(LR, 6).Offset(x)) = ws.[K8] 'Hora
.Range(.Cells(LR, 7), .Cells(LR, 7).Offset(x)) = ws.[E12] 'Cliente
.Range(.Cells(LR, 15), .Cells(LR, 15).Offset(x)) = ws.[C29] 'Condição de pagamento
.Range(.Cells(LR, 16), .Cells(LR, 16).Offset(x)) = ws.[C33] 'Forma de pagamento
Do While y < k
ws.Range("E" & 20 + y & ":J" & 20 + y).Copy
.Cells(LR + m * y, 8).Resize(m).PasteSpecial Paste:=xlPasteValues
Do While z < m
ws.Range("[COLOR="Red"]D[/COLOR]" & 29 + z).Copy
.Cells(LR + w + z, 17).PasteSpecial Paste:=xlPasteValues
.Cells(LR + w + z, 17).PasteSpecial Paste:=xlPasteValues
z = z + 1
Loop
z = 0
w = w + m
y = y + 1
Loop
[COLOR="Red"]LR1 = .Cells(Rows.Count, 8).End(xlUp).Row
For i = LR + 1 To LR1
If .Cells(i, 8) = .Cells(i - 1, 8) Then
.Range("K" & i, "M" & i).ClearContents
End If
Next i[/COLOR]
End With
ws.Range("C29,C33:G33,E8,J8,K8,E12:H12,J32:K32,I29,I30,E20:J26").ClearContents
Application.CutCopyMode = False
Application.ScreenUpdating = True
Sheets("PedVenda").Select
Range("E12").Select
End Sub

Iaê,Trafix.

Primeiramente peço desculpas se o meu post pareceu agressivo. Não tive essa intenção. Como você já escreveu em outro post, trocando conhecimentos todos aprendemos.

Quanto a sua fÓrmula:

1. se for inserido um conteúdo não numérico (espaço, letras, texto) em 'Vr. Pago' a fórmula interpreta que foi registrado um pagamento e retorna 'PAGAMENTO PARCIAL'.

Modestamente, entendo que a fórmula deveria ignorar o conteúdo inserido ao invés de considerá-lo como um pagamento. Só deveria considerar como pagamento um conteúdo numérico.

2. se for inserido em 'valor pago' um valor maior do que 'Vr.Parc.' a fórmula retorna 'PAGAMENTO PARCIAL'. Entendo que deveria retornar 'PAGAMENTO EFETUADO'. Claro, é improvável que alguém vá pagar mais do que deve, então o valor pago nunca seria maior do que o valor devido...

Mas, poderá haver encargos por atraso, por exemplo, e o valor a pagar ser maior do que o valor da pacela.

3. se 'Vr. Pago' estiver vazio, portanto supõem-se que não foi efetuado o pagamento, e 'Dt. Venc.' (data de vencimento) for ultrapassada, a fórmula retorna vazio. Entendo que seria razoável retornar 'PAGAMENTO ATRASADO'. Pois a data de vencimento é passado e não foi pago.

abraço

PS - @Trafix, postei a mensagem para você bem depois de postar para o Silva, mas este fórum decidiu, sem me perguntar, e colocou os 2 posts juntos.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...