VÁRIAS DÚVIDAS EM V...
 
Notifications
Clear all

VÁRIAS DÚVIDAS EM VBA/MACROS

23 Posts
2 Usuários
0 Reactions
3,919 Visualizações
(@beto-stanley)
Posts: 14
Active Member
Topic starter
 

É o seguinte, estou tentando ajudar minha irmã para ela ter um controle melhor em sua lanchonete.

Estou precisando criar 3 macros diferentes, e para você entender melhor o que vou explicar, estou anexando 3 arquivos do Excel: MESAS, CADASTRO PRODUTOS e VENDAS ACUMULADAS.

Você vai ver que no arquivo MESAS tem várias abas cada uma para cada mesa ou balcão, e também verá que quando você coloca um código (1 a 10) na coluna A, vai aparecer a descrição do produto e seu valor unitário nas colunas C e D respectivamente. E quando colocamos a quantidade na coluna B, vai aparecer o valor total do item na coluna E, a data na coluna F e a respectiva mesa na coluna G, e dessa forma vai aparecendo o valor total da mesa na coluna H.
Eis abaixo o que quero nas macros:

MACRO 1, quero que, ao apertar o botão “ZERAR MESA” ela:
- copie tudo o que tiver nessa mesa (célula A2 até G100)
- cole especial como VALORES na primeira linha vazia da planilha do arquivo VENDAS ACUMULADAS.
- apague tudo o que tiver nessa mesa que foi zerada (célula A2 até B100)

MACRO 2, quero que, ao apertar o botão “DESFAZER” ela:
- na planilha do arquivo VENDAS ACUMULADAS copie as últimas células das colunas A e B (cód. E quant.) referente a última mesa ou balcão que foi zerada.
- cole esses valores nas colunas A e B (cód. E quant.) nas células das colunas A e B da aba da respectiva mesa da planilha do arquivo MESAS.
- apague as últimas células das colunas A até G referente a essa última mesa que foi zerada.

Exemplo:
Você vai ver que na planilha VENDAS ACUMULADAS que, a última mesa que foi zerada é a MESA3, que vai da célula A16 até G19. Ou seja, eu estou na aba MESA3 e apertei o botão “ZERAR MESA” e isso gerou esses dados nas células que mencionei agora.
Mas aí eu percebo que não queria zerar essa mesa agora, então eu aperto o botão “DESFAZER” e ele copia os dados das células A16 até B19 da planilha do arquivo VENDAS ACUMULADAS, cola esses dados nas células nas células A2 até B5 da aba MESA3 da planilha do arquivo MESAS e, logo depois apaga as células A16 até G19 referente a última MESA3 na planilha do arquivo VENDAS ACUMULADAS.

Exemplo ilustrado:

Aba MESA3 da planilha do arquivo MESAS, após apertar o botão “ZERAR MESA”:

cod. quant. descrição valor unit. valor total DATA MESA TOTAL MESA
0,00

Planilha do arquivo VENDAS ACUMULADAS, após o apertar o botão “ZERAR MESA”:

cod. quant. descrição valor unit. valor total DATA MESA/BALCÃO
1 2 coca lata 2,00 4,00 02/02/12 MESA1
10 3 pizza 3,10 9,30 02/02/12 MESA1
3 1 coca garafinha 1,50 1,50 02/02/12 MESA1
2 3 coca 600ml pet 2,90 8,70 02/02/12 MESA4
5 1 salgado 2,40 2,40 02/02/12 MESA4
9 1 suco natural 3,00 3,00 02/02/12 MESA4
1 4 coca lata 2,00 8,00 02/02/12 MESA4
10 3 pizza 3,10 9,30 02/02/12 MESA2
5 1 salgado 2,40 2,40 02/02/12 MESA2
1 1 coca lata 2,00 2,00 02/02/12 MESA2
6 4 trident 1,00 4,00 02/02/12 MESA2
7 1 suco 2,80 2,80 02/02/12 MESA2
5 3 salgado 2,40 7,20 02/02/12 BALCÃO2
3 1 coca garafinha 1,50 1,50 02/02/12 BALCÃO2
1 2 coca lata 2,00 4,00 02/02/12 MESA3
5 3 salgado 2,40 7,20 02/02/12 MESA3
10 1 pizza 3,10 3,10 02/02/12 MESA3
6 1 trident 1,00 1,00 02/02/12 MESA3

Aba MESA3 da planilha do arquivo MESAS, após apertar o botão “DESFAZER”:

cod. quant. descrição valor unit. valor total DATA MESA TOTAL MESA
1 2 coca lata 2,00 4,00 02/02/12 MESA3 15,30
5 3 salgado 2,40 7,20 02/02/12 MESA3
10 1 pizza 3,10 3,10 02/02/12 MESA3
6 1 trident 1,00 1,00 02/02/12 MESA3

Planilha do arquivo VENDAS ACUMULADAS, após o apertar o botão “DESFAZER”:

cod. quant. descrição valor unit. valor total DATA MESA/BALCÃO
1 2 coca lata 2,00 4,00 02/02/12 MESA1
10 3 pizza 3,10 9,30 02/02/12 MESA1
3 1 coca garafinha 1,50 1,50 02/02/12 MESA1
2 3 coca 600ml pet 2,90 8,70 02/02/12 MESA4
5 1 salgado 2,40 2,40 02/02/12 MESA4
9 1 suco natural 3,00 3,00 02/02/12 MESA4
1 4 coca lata 2,00 8,00 02/02/12 MESA4
10 3 pizza 3,10 9,30 02/02/12 MESA2
5 1 salgado 2,40 2,40 02/02/12 MESA2
1 1 coca lata 2,00 2,00 02/02/12 MESA2
6 4 trident 1,00 4,00 02/02/12 MESA2
7 1 suco 2,80 2,80 02/02/12 MESA2
5 3 salgado 2,40 7,20 02/02/12 BALCÃO2
3 1 coca garafinha 1,50 1,50 02/02/12 BALCÃO2

E assim por diante, se eu for agora na aba BALCÃO2 e apertar o botão DESFAZER, ele fará a mesma coisa com os dados do BALCÃO2.

Obs: essa macro “DESFAZER” só poderá fazer isso se a MESA3 for a última mesa que eu zerei. Por exemplo, se no exemplo acima eu apertar o botão “DESFAZER” nas mesas 1, 4 ou 2 ele não irá fazer esse processo e dará uma mensagem no MSGBOX “essa operação não é possível nesse momento”.

MACRO 3, quero que, ao apertar o um dos botões da parte MOVER PARA MESA, ela:
- copie os dados das células A2 até B100, da mesa onde estou
- cole esses dados nas mesmas células da planilha da mesa de destino que foi escolhida, se essa mesa estiver vazia
- apague os dados das céluas A2 até B100 da mesa de origem
- caso a mesa de escolhida para destino esteja ocupada, ou seja, já tenha dados nela, então deve aparecer mensagem: “mesa ocupada, escolha outra mesa”

Bom, é isso.
Espero que eu tenha conseguido explicar o que eu queria pra você e que você possa me ajudar.

 
Postado : 02/02/2012 9:03 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 


MACRO 1 (sugestão)

Movi a a guia ACUMULADO do arquivo VENDAS ACUMULADAS para o arquivo MESAS.

Atribuir a Macro abaixo para o botão ZERAR MESA (em Módulo), efetuar o teste, verificar e reportar em caso de resultado inadequado.
Em princípio, para simplificar o processo, eu manteria as guias juntas e, quando e se necessário, separaria.

Sub ZerarMesa()

i = Range("A1048576").End(xlUp).Row
j = Sheets("ACUMULADO").Range("A1048576").End(xlUp).Row + 1
m = ActiveSheet.Index

Range("A2:G" & i).Copy

Sheets("ACUMULADO").Activate
Range("A" & j).Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

Sheets(m).Activate
Range("A2:B" & i).ClearContents
Range("A2").Activate

End Sub

 
Postado : 03/02/2012 6:43 pm
(@beto-stanley)
Posts: 14
Active Member
Topic starter
 

Edson, deu certinho cara!!!
E o botão "DESFAZER" e mover para outra mesa, você conseguiu?
Grande abraço e obrigado mais uma vez!

 
Postado : 04/02/2012 3:29 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Beto

Para agradecer ao Edson clique na mãozinha que fica na parte superior lado direito da resposta dele, ao lado da ferramenta Citar.

Abraço.

 
Postado : 04/02/2012 3:41 pm
(@beto-stanley)
Posts: 14
Active Member
Topic starter
 

ALGUÉM ME AJUDA AÍ POR FAVOR!!!!

FALTAM SÓ AS 2 ÚLTIMAS MACROS!!!

OBRIGADOOOO!!!

 
Postado : 06/02/2012 2:32 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 


Beto,

atenção.

Macro2:

o processo é bem semelhante, no entanto, precisa esclarecer alguns pontos:

1. Os botões 'DESFAZER' estão nas guias de cada MESA, que não necessariamente corresponderia à última mesa zerada.
Exemplo: Zeramos a MESA4, vou para a guia MESA3 e quero DESFAZER. O que deve acontecer ao clicar em DESFAZER? Espero ter sido claro quanto a esta 1ª dúvida.

2. A mesma MESA poderá ser ZERADA duas vezes seguidas? O que deve ocorrer ao clicar em DESFAZER se for possível a ocorrência citada anteriormente, inclusive o que for considerado na dúvida 1?

Grato.

 
Postado : 06/02/2012 4:56 pm
(@beto-stanley)
Posts: 14
Active Member
Topic starter
 

Boa noite Edson!

Primeiramente, muito obrigado pela atenção.

Bom, vamos la:

1. Se eu zerar a mesa 4 e for para a guia mesa 3 e quiser zerar, então deve aparecer uma mensagem de erro "essa operação está inabilitada nesse momento" ou algo do tipo. Ou seja, não deve ser possível ocorrer a ação do botão desfazer se não estiver na guia da última mesa que foi zerada.

2. A mesma mesa pode ser zerada 2 vezes seguida e já entendi qual seria o problema que você está pensando, por isso pensei em criar mais uma coluna na guia MESAS ao lado da coluna de data, com a função AGORA() e formatá-la para aparecer somente hora, minutos e segundos. Assim, se a mesma mesa for zerada uma em seguida da outra, elas terão horários diferentes e assim o ao apertar o botão desfazer, ele só iria copiar os dados referente ao último horário e também apagar esses dados posteriormente.

Espero que tenha conseguido explicar.

Muito obrigado mais uma vez!!!

 
Postado : 07/02/2012 6:56 pm
(@beto-stanley)
Posts: 14
Active Member
Topic starter
 


Beto,

atenção.

Macro2:

o processo é bem semelhante, no entanto, precisa esclarecer alguns pontos:

1. Os botões 'DESFAZER' estão nas guias de cada MESA, que não necessariamente corresponderia à última mesa zerada.
Exemplo: Zeramos a MESA4, vou para a guia MESA3 e quero DESFAZER. O que deve acontecer ao clicar em DESFAZER? Espero ter sido claro quanto a esta 1ª dúvida.

2. A mesma MESA poderá ser ZERADA duas vezes seguidas? O que deve ocorrer ao clicar em DESFAZER se for possível a ocorrência citada anteriormente, inclusive o que for considerado na dúvida 1?

Grato.

Boa noite Edson!

Primeiramente, muito obrigado pela atenção.

Bom, vamos la:

1. Se eu zerar a mesa 4 e for para a guia mesa 3 e quiser zerar, então deve aparecer uma mensagem de erro "essa operação está inabilitada nesse momento" ou algo do tipo. Ou seja, não deve ser possível ocorrer a ação do botão desfazer se não estiver na guia da última mesa que foi zerada.

2. A mesma mesa pode ser zerada 2 vezes seguida e já entendi qual seria o problema que você está pensando, por isso pensei em criar mais uma coluna na guia MESAS ao lado da coluna de data, com a função AGORA() e formatá-la para aparecer somente hora, minutos e segundos. Assim, se a mesma mesa for zerada uma em seguida da outra, elas terão horários diferentes e assim o ao apertar o botão desfazer, ele só iria copiar os dados referente ao último horário e também apagar esses dados posteriormente.

Espero que tenha conseguido explicar.

Muito obrigado mais uma vez!!!

 
Postado : 07/02/2012 6:58 pm
(@beto-stanley)
Posts: 14
Active Member
Topic starter
 

Edson...

POR FAVOR ME AJUDAAAAAAAAAAA!!!! rs...

 
Postado : 12/02/2012 9:41 am
(@beto-stanley)
Posts: 14
Active Member
Topic starter
 

Caramba, ninguém vai me ajudar mesmo??? rs...

 
Postado : 23/02/2012 6:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 


Alberto, atenção:

- O Botão DESFAZER só será exibido quando esta operação puder ser executada, dentro das condições que você indicou.

- Caso uma mesa seja ZERADA duas vezes seguidas, será analisado o horário e, caso necessário, desfeito apenas o último lançamento.

De qualquer forma, faça muitos testes, em diversas situações, para verificar se o retorno é o esperado.

Em caso de problemas na execução ou no resultado, reporte para que seja ajustado.

 
Postado : 09/03/2012 9:42 pm
(@beto-stanley)
Posts: 14
Active Member
Topic starter
 

Edson, ficou perfeito!!!

MUITO OBRIGADO MESMO!!!

Agora só falta a MACRO 3 para mudança de mesa, conforme eu descrevi!

Grande abraço e mais uma vez obrigado!

 
Postado : 10/03/2012 12:55 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 


Alberto,

incluí o arquivo CADASTRO PRODUTOS dentro de MESAS, pois o vínculo estava atrapalhando bastante.

Durante os testes, perdi as fórmulas e refiz em seguida. Bom revisar.

Faça muitos testes e reporte caso algo não seja retornado como esperado.

Recomendo mais uma vez que tente varrer todas as situações possíveis para evitar erros que possam passar despercebidos futuramente.

 
Postado : 10/03/2012 2:32 pm
(@beto-stanley)
Posts: 14
Active Member
Topic starter
 

Edson, realmente você é um GÊNIO!!!

PARABÉNS!!!

Só mais uma coisa:

Eu alterei a planilha colocando mais mesas e balcão, então ficou assim:

12 mesas
4 balcões
1 interno (para consumo interno dos funcionários)

Só que na hora que fiz as alterações acho que desconfigurei alguma coisa, pois agora o botão DESFAZER não está funcionando direito.

Também não sei como colocar as macros para as outras mesas, balcões e interno.

Não precisa atribuir as macros nos botões, pode deixar que eu mesmo faço isso, senão vai dar muito trabalho pra você. Só queria que, FAZENDO UM GRANDISSÍSSIMO FAVOR, fizesse as outras macros para eu pode atribuir aos botões e arrumar o botão desfazer.

Muitíssimo obrigado mais uma vez e um grande abraço!

 
Postado : 10/03/2012 9:01 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 


Todas as guias precisam ter o código abaixo:
(Botão direito sobre o nome da guia/Exibir código/Colar)
Certifique-se de que a forma é a 8, se não, substitua o número em cada um dos códigos pelo número que pode ser verificado na Caixa de Nomes.

Private Sub Worksheet_Activate()
Dim ws As Worksheet

Set ws = Sheets("ACUMULADO")

lin = ws.Range("A1048576").End(xlUp).Row
mesa = ws.Cells(lin, 7)
guia = ActiveSheet.Name

ActiveSheet.Shapes(8).Visible = False

If mesa <> guia Then
ActiveSheet.Shapes(8).Visible = False
Else
ActiveSheet.Shapes(8).Visible = True
End If

End Sub


Quanto às outras mesas e balcões, nos Módulos, inclua os códigos conforme abaixo, alterando o nome da macro e do texto atribuído a n:

Sub Mesa6()
n = "MESA6"

Call Transferir(n)

End Sub

 
Postado : 11/03/2012 8:12 am
Página 1 / 2