Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
#52719
Olá pessoal,

Preciso de uma ajuda, pois realizo uma operação que em sheets diferente funciona, porém na mesma eu não estou conseguindo.
Basicamente é a fórmula Se e Prov, porém em comando vba.

Para facilitar, gerei uma planilha de exemplo onde deixei na coluna V e W as fórmula que estou tentando aplicar em vba na coluna R.


A nível de aprendizado, deixei dois botões, na planilha.

Referencia: onde ele preenche conforme a ficha informada na R1 e
Geral: onde ele preenche em toda coluna R seguindo os critérios.

Agradeço quem possa ajudar.
Você não está autorizado a ver ou baixar esse anexo.
#52722
xmiguelx escreveu:Basicamente é a fórmula Se e Prov, porém em comando vba.
Você quer que o código coloque na coluna R a fórmula ou o resultado da fórmula ?

Para facilitar, gerei uma planilha de exemplo onde deixei na coluna V e W as fórmula que estou tentando aplicar em vba na coluna R.
Como você pretende colocar duas fórmulas na mesma célula ? Colunas V e W na coluna R, não entendi :?

Geral: onde ele preenche em toda coluna R seguindo os critérios.
Não há macro vinculada ao botão GERAL ;) .
#52725
Olá Osvaldo, segue abaixo retorno para suas perguntas:
osvaldomp escreveu:
xmiguelx escreveu:Basicamente é a fórmula Se e Prov, porém em comando vba.
Você quer que o código coloque na coluna R a fórmula ou o resultado da fórmula ?
@xmiguelx: Somente o Resultado.

Para facilitar, gerei uma planilha de exemplo onde deixei na coluna V e W as fórmula que estou tentando aplicar em vba na coluna R.
Como você pretende colocar duas fórmulas na mesma célula ? Colunas V e W na coluna R, não entendi :?
@xmiguelx: Somente o Resultado que será conforme o botão que for apertado.

Geral: onde ele preenche em toda coluna R seguindo os critérios.
Não há macro vinculada ao botão GERAL ;) .
@xmiguelx: Não, porque estava tentando fazer primeiro a Macro do Botão Referencia. Inclusive a Macro do botão de Referencia não está funcionando conforme eu esperava.
#52732
Olá, Miguel.
Veja se o código abaixo atende. Vincule os dois botões à macro formada por esse código.
Código: Selecionar todos
Sub InsereResultados()
 Dim LR As Long
  LR = Cells(Rows.Count, 2).End(3).Row
  If ActiveSheet.Buttons(Application.Caller).Caption = "REFERENCIA" Then
   Range("R4:R" & LR).Formula = "=IF(AND(tbl_lançtos[@[TIPO DE LANÇTO]]=""ESTORNO DE PROVISÃO"",tbl_lançtos[@[Nº DA FICHA]]=$R$1),VLOOKUP(S4,D:F,3,0),""N/AA"")"
  Else: Range("R4:R" & LR).Formula = "=IF(tbl_lançtos[@[TIPO DE LANÇTO]]=""ESTORNO DE PROVISÃO"",VLOOKUP(S4,D:F,3,0),""N/AA"")"
  End If
  Range("R4:R" & LR).Value = Range("R4:R" & LR).Value
End Sub
obs. é recomendável instalar o código acima em um módulo comum (no editor de VBA menu Inserir / Módulo) e não no módulo da planilha, onde está o código atual
#52735
Olá Osvaldo,

Aplicando á fórmula igual você passou funcionou sim, e obrigado pela dica.

Porém a nível de aprendizado estive fazendo várias pesquisas e consegui fazer dois comandos, o de referencia que é apenas para ficha informada está funcionando rápido, porem o comando Geral onde ele repassa sobre todas as fichas está muito lento.


REFERENCIA
Código: Selecionar todos
Sub referencia()
   Dim Cont As Long
   Dim Res As Variant
   
   With Sheets("02 - DESENVOLVIMENTO")
      For Cont = 4 To .Range("B30000").End(xlUp).Row
         If .Range("R1") = .Range("B" & Cont).Value And _
            .Range("M" & Cont).Value = "ESTORNO DE PROVISÃO" Then
            Res = Application.Match(.Range("S" & Cont).Value, .Range("d1:d30000"), 0)
               If Not IsError(Res) Then
                  .Range("R" & Cont).Value = .Range("F" & Res).Value
               Else
                  .Range("R" & Cont).Value = "N/AA"
               End If
         End If
      Next Cont
   End With
End Sub

GERAL
Código: Selecionar todos
Sub GERAL()
   Dim Cont As Long
   Dim Res As Variant
   
   Application.ScreenUpdating = False
   Application.DisplayStatusBar = False
   Application.Calculation = xlCalculationManual
   
   With Sheets("02 - DESENVOLVIMENTO")
      For Cont = 4 To .Range("B30000").End(xlUp).Row
         If .Range("M" & Cont).Value = "ESTORNO DE PROVISÃO" Then
            Res = Application.Match(.Range("S" & Cont).Value, .Range("d1:d30000"), 0)
               If Not IsError(Res) Then
                  .Range("R" & Cont).Value = .Range("F" & Res).Value
               Else
                  .Range("R" & Cont).Value = "N/AA"
               End If
               Else
                        .Range("R" & Cont).Value = "N/AA"
         
         End If
      Next Cont
   End With
   
   Application.Calculation = xlCalculationAutomatic
   Application.DisplayStatusBar = True
   Application.ScreenUpdating = True
   
End Sub
#52736
Olá, Miguel.

1. tomando por base a nomenclatura utilizada pela MS para o Office, o que eu sugeri é um código escrito em linguagem VBA, não é uma fórmula
2. o seu código referencia está rodando rápido porque ele não executa tudo o que deveria. Limpe a coluna R e rode aquele código. Note que somente foi preenchido o intervalo R3077:R3085, isso porque está faltando um comando Else no If externo para inserir "N/AA". Inclua também Application.ScreenUpdating
3. para diminuir o tamanho do código você poderia juntar os dois Ifs em um apenas, utilizando o conectivo And, não sei se alteraria o tempo de execução
4. uma forma de diminuir o tempo de execução dos dois códigos é restringir o intervalo de busca da função Match ao intervalo que contém dados, pois a tabela contém dados até a linha 3093 e no entanto a função busca até a linha 30.000; para restringir você pode utilizar uma variável que represente a última linha com dados, por exemplo veja a variável LR no código que eu sugeri, e aí coloque:
For Cont = 4 To LR
e também
.Range("D4:D" & LR)
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord