Jump to content



Foto

ajuda com macro/fórmula

macro



Existem 10 respostas neste tópico

#1 John Player Special    

John Player Special
  • Participante
  • 149 mensagens

Publicado 30 November 2013 - 07:51 PM

pessoal, preciso de ajuda para implementar um lance aqui.

 

é o seguinte.

 

tenho uma planilha geral, onde insiro o cnpj e nome da empresa, que prestam serviços a nós. ex (digitei o cnpj menor para poupar tempo):

 

05434834              kibon

06834330              construtora planalto

12304490              papelaria maia

50340000              supermercados klavo

 

 

o cnpj sempre é posto em ordem alfabética.

 

 

dividimos esses credores em duas categorias, que são: alimentos e serviços. assim, kibon e supermercados klavo entram em alimentos, contrutora planalto e papelaria maia entram em serviços.

 

pois bem, todos esses credores precisam estar separados numa planilha só. assim, tem nesse mesmo book excel, a planilha alimentos:

 

05434834              kibon

50340000              supermercados klavo

 

e a planilha serviços:

 

06834330              construtora planalto

12304490              papelaria maia

 

 

também ordenadas por ordem do cnpj.

 

pois bem, o que preciso é que, ao digitar um novo credor na planilha geral, digamos

05434834              kibon

06834330              construtora planalto

12304490              papelaria maia

50340000              supermercados klavo

23409436               açougue ferreira        (acrescentado)

 

essa linha inteira seja acrescentada, conforme alguma indicação minha (pode ser mais uma coluna com o número 2 ou B) diretamente na planilha alimentos. ou seja, a planilha alimentos ganharia mais uma linha

05434834              kibon

50340000              supermercados klavo

23409436               açougue ferreira

 

 

como eu poderia fazer essa regra?




#2 osvaldomp    

osvaldomp

    Office Expert

  • Colaborador
  • 625 mensagens

Publicado 30 November 2013 - 09:29 PM

Instale o código abaixo no módulo da planilha "geral", assim:
1. copie o código daqui
2. clique com o direito na guia da planilha "geral" e escolha 'Exibir código'
3. cole o código na janela em branco que vai se abrir
4. feito! 'Alt+Q' para retornar para a planilha e testar

Considerei o cnpj na coluna "A" e o nome na coluna "B".
Coloque na coluna "C" a letra "a" para os alimentos ou a letra "s" para os serviços (sem as aspas).

Funcionamento - após inserir "a" ou "s" na coluna "C", estando o cnpj e o nome preenchidos, o código copiará o registro recém criado ou para a planilha "alimentos" ou para a planilha "serviços".


Private Sub Worksheet_Change(ByVal Target As Range)
  Dim LR As Long
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 3 Then Exit Sub
      If Target.Value = "s" And Application.CountA(Range(Cells(Target.Row, 1), Cells(Target.Row, 2))) = 2 Then
        With Sheets("serviços")
          LR = .Cells(Rows.Count, 1).End(xlUp).Row
          .Cells(LR + 1, 1).Resize(, 2).Value = Cells(Target.Row, 1).Resize(, 2).Value
        End With
      ElseIf Target.Value = "a" And Application.CountA(Range(Cells(Target.Row, 1), Cells(Target.Row, 2))) = 2 Then
        With Sheets("alimentos")
          LR = .Cells(Rows.Count, 1).End(xlUp).Row
          .Cells(LR + 1, 1).Resize(, 2).Value = Cells(Target.Row, 1).Resize(, 2).Value
        End With
      End If
End Sub

 


Osvaldo

#3 John Player Special    

John Player Special
  • Participante
  • 149 mensagens

Publicado 02 December 2013 - 06:26 PM

olá.

 

não funcionou. mas talvez eu tenha feito alguma coisa errada fiz algumas alterações de nome, estou tentandoa anexar a planilha, mas sempre aparece a msg Error You aren't permitted to upload this kind of file.

 

estranho, um fórum grande desse. postei no 4shared.

se puder dar uma olhada.

 

http://www.4shared.c...RS6/Listas.html


Editado por John Player Special 02 December 2013 - 06:31 PM
''


#4 osvaldomp    

osvaldomp

    Office Expert

  • Colaborador
  • 625 mensagens

Publicado 02 December 2013 - 07:27 PM

No caso de preenchimento da coluna "C" com a letra "a" funciona normalmente.

No caso de preenchimento com a letra "s" não está funcionando porque você alterou no código para "sind".

Para resolver altere esta linha:

atual
If Target.Value = "sind" And ...

altere para
If Target.Value = "s" And ...

Se ainda assim não funcionar confirme se as macros estão habilitadas no seu Excel.

 

obs. para anexar arquivos aqui no fórum os arquivos precisam estar zipados.


Osvaldo

#5 John Player Special    

John Player Special
  • Participante
  • 149 mensagens

Publicado 03 December 2013 - 11:47 AM

agora sim, funcionou. só tenho mais três perguntas.

 

mas quando é acrescentado na outra planilha, o cnpj aparece como

1,56456E+13 5,16547E+13 1,56456E+13 5,16547E+13

 

mesmo formatando a célula como "texto", continua. pq isso acontece?

 

onde eu posso aprender esses códigos específicos para word e excel? isso é vba?

 

vejo que no excel tem a opção de "gravar macro", como se fosse um filme. isso é viável tecnicamente ou na realidade, as macros acabam sendo muito complexas para que essa função de ler o que está sendo digitado e clicado seja útil?



#6 osvaldomp    

osvaldomp

    Office Expert

  • Colaborador
  • 625 mensagens

Publicado 03 December 2013 - 05:24 PM

agora sim, funcionou. só tenho mais três perguntas.

nos ensine o que você fez para funcionar

 

 

mas quando é acrescentado na outra planilha, o cnpj aparece como

1,56456E+13 5,16547E+13 1,56456E+13 5,16547E+13

mesmo formatando a célula como "texto", continua. pq isso acontece?

experimente formatar a coluna que irá receber os cnpj's para texto antes de rodar o código

 

 

onde eu posso aprender esses códigos específicos para word e excel? isso é vba?

esses códigos fazem parte de macros; a linguagem utilizada para escrver os códigos é o VBA - Visual Basic for Applications;

há cursos de Excel/Word que incluem macros; cursos presenciais, pela Internet, por CDs/DVDs;

na Internet há vasto material grátis, pergunte ao sábio Google, vai te retornar material para vários anos de leitura

 

 

vejo que no excel tem a opção de "gravar macro", como se fosse um filme. isso é viável tecnicamente ou na realidade, as macros acabam sendo muito complexas para que essa função de ler o que está sendo digitado e clicado seja útil?

macros gravadas são aplicáveis basicamente para tarefas simples, em que não é requerida comparação, decisão, uso de variáveis;

o ideal é depurar macros gravadas para eliminar os comandos "Select", pois este comando provoca lentidão na execução;

também é possível gravar uma macro e depois depurá-la e incrementá-la com comparações, loops, introdução de variáveis, etc.;

por outro lado gravar macros é útil para se aprender a sintaxe dos comandos


Osvaldo

#7 John Player Special    

John Player Special
  • Participante
  • 149 mensagens

Publicado 04 December 2013 - 05:59 PM

foi só trocar o sind por s, que estava faltando.

 

muito obrigado por tudo.



#8 markmzz    

markmzz
  • Participante
  • 395 mensagens

Publicado 05 December 2013 - 07:17 AM

Olá JPS,

 

Aqui você tem outra maneira de tentar resolver o seu problema (utilizando somente formulas).

 

Fórmula de matriz - você precisa utilizar as teclas Ctrl+Shift+Enter e não apenas Enter para entrar com uma fórmula de matriz na célula.

 

Faça alguns testes.

 

Markmzz

Arquivos Anexados



#9 John Player Special    

John Player Special
  • Participante
  • 149 mensagens

Publicado 06 December 2013 - 05:39 PM

oi, markz. obrigado, não conhecia as fórmulas matriz.

estarei testando aqui.

 

osvaldo se eu quisesse que a letra que desse o gatilho para inserir a linha estivesse na 3 ou quinta coluna, caso eu aumente a planilha, devo alterar onde no código?


Editado por John Player Special 06 December 2013 - 05:43 PM
''


#10 osvaldomp    

osvaldomp

    Office Expert

  • Colaborador
  • 625 mensagens

Publicado 06 December 2013 - 06:09 PM

... se eu quisesse que a letra que desse o gatilho para inserir a linha estivesse na 3 ou quinta coluna, caso eu aumente a planilha, devo alterar onde no código?

 

substitua esta linha:
If Target.Column <> 3 Then Exit Sub


por esta:
If Target.Column <> 3 And Target.Column <> 5 Then


Osvaldo












Tópicos com palavra-chave: macro