×
Ir ao conteúdo
  • Cadastre-se

Martti

Membro Pleno
  • Posts

    30
  • Cadastrado em

  • Última visita

Reputação

8

Informações gerais

  • Cidade e Estado
    Rio Preto/SP
  • Sexo
    Masculino
  1. @AfonsoMira Boas! Muitíssimo obrigado mais uma vez por compartilhar seu conhecimento. Resolveu plenamente meu problema!
  2. Salve amigos! Mais uma vez recorro ao vasto conhecimento dos integrantes desse forum. Recebi uma planilha de um departamento e estou com problemas com a busca e referência. Na Plan2 existem 4 colunas, K, Q, BD e BC. A coluna K tem o nome de ROUTER1 e a coluna Q, ROUTER2, coluna BC, PASS1 e coluna BD, PASS2 A TABELAB de referência está na Plan3("REF") com 3 colunas e 668 linhas Se a coluna K tiver informação, faz um PROCV na 2ª coluna da TABELAB e retorna o valor na coluna BC e na 3ª coluna da TABELAB e retorna o valor na coluna BD. Se a coluna K estiver vazia, o valor a ser considerado é o da mesma linha na coluna Q, faz um PROCV na 2ª coluna da TABELAB e retorna o valor na coluna BC e na 3ª coluna da TABELAB e retorna o valor na coluna BD. Resumindo, havendo K & i, BC & i e BD & i serão preenchidos Não havendo K & i, Q & i passa a ser referência, BC & i e BD & i serão preenchidos. O código abaixo não funciona. Quem puder compartilhar conhecimento para acertar o código, agradeço desde já. Sub PASS_TEST() '*********************************************************** Dim ROUTER1, ROUTER2, TABELAB As Range Dim ultLinha As Integer Dim resultado_procv As Variant Dim i As Integer Application.ScreenUpdating = False ultLinha = Sheets("Plan2").Cells(Cells.Rows.Count, 1).End(xlUp).Row Set TABELAB = Sheets("REF").Range("a2:c668") Set ROUTER1 = Sheets("Plan2").Range("K" & ultLinha) Set ROUTER2 = Sheets("Plan2").Range("Q" & ultLinha) Sheets("Plan2").Select For i = 2 To ultLinha If ROUTER1 <> "" Then ROUTER1 = Sheets("Plan2").Range("K" & i).Value resultado_procv = Application.VLookup(ROUTER1, TABELAB, 2, False) Sheets("Plan2").Range("BD" & i).Value = resultado_procv ElseIf ROUTER1 = "" Then ROUTER1 = Sheets("Plan2").Range("Q" & ultLinha).Value resultado_procv = Application.VLookup(Bairro2, TABELAB, 2, False) Sheets("Plan2").Range("BD" & i).Value = resultado_procv End If Next i i = i + 1 End Sub
  3. @Midori Parabéns pela solução do problema, melhor impossível. Vou me debruçar sobre o código para adquirir mais conhecimento. Muito obrigado por compartilhar seu tempo e seu conhecimento. Sua ajuda foi por demais importante...👍🙋‍♂️🥇
  4. @MidoriIsso mesmo, o status se modifica ou não a partir da atualização da linha. Na verdade, acredito que preciso eliminar o status FINALIZADO. A proxima data de calibração será estipulada no momento da realização da mesma***, onde cada chefe de setor saberá se será em até 30, 60 ou 90 dias. Como no exemplo acima, quando a importação dos dados atualizar a 3ª calibração, preencherá tb a 4ª calibração com uma data estipulada***, o status passará a "vencerá em xx dias" Por isso penso em tirar o status FINALIZADO, ficando só VENCIDO HÁ XX DIAS, VENCE HOJE, VENCERÁ EM XX DIAS, porque quando a calibração é feita, a proxima calibração é preenchida***, reiniciando a contagem. Como no exemplo, quando a 3ª calibração foi feita, o status anterior era "VENCIDO HÁ 1 DIAS" (HOJE() - 22/03/2022). Quando a planilha foi atualizada e a data da 3ª calibração foi inserida, a data da 4ª calibração tb foi inserida(23/04/2022), então, hoje, 24/03, executando o código, este buscará a última célula preenchida da linha, o status mudará "VENCERÁ EM 29 DIAS". Como no exemplo, se não houve a 3ª calibração para a linha 2, o status permanecerá "VENCIDO HÁ XX DIAS" até que o código identifique alguma data na 3ª calibração, que passará a ser a última célula com data na linha 2. Assim penso em somente 3 status, à medida que as calibrações forem sendo atualizadas. Coloco-me à disposição para esclarecimentos. Obrigado pelo seu tempo. ***defini essa mudança com a chefia por me parecer mais objetiva, visto a volatilidade das datas. No meu analfabetismo em variáveis, pensei neste conceito: Sub Status() Dim Linha As Double Linha = 1 Dim ColunaStatus As Double Dim ColunaData As Double Dim ultimalinha As Long Dim lin As Long ultimalinha = Range("A" & Rows.count).End(xlUp).Row For lin = 2 To ultimalinha ColunaStatus = 9 ColunaData = Range("J" & lin).End(xlToRight).Column With Plan1 Do Linha = Linha + 1 . . . . . . End Sub
  5. @Midori Isso mesmo, excelente entendimento! Sempre que as datas forem atualizadas(importadas), a mudança de status deve ser feita pela ultima celula preenchida na linha + 1( penultima e ultima). Se a ultima celula preenchida for <>"", então: If ultima<Hoje = Status =Vencida à & Hoje-ultima & dias If ultima=Hoje = Status = Vence Hoje If ultima>Hoje = Status = Vencerá em & ultima-Hoje & dias Else OK (preciso melhorar isso, aceito sugestões) Um detalhe é que as maquinas tem períodos de calibração diferentes, não sendo possível fixar que calibração 2 será calibração 1 + 30 (ou 60, 90) dias. O status mudará sempre que houver acréscimo de calibração. Agradeço pelo seu tempo.
  6. @Midori Desculpe a falha calibracao.zip
  7. @Midori Obrigado pela atenção. No VBE tem um módulo com o código que eu utilizava anteriormente. Em virtude de mudanças administrativas, a planilha teve que ser alterada. O código compara a coluna J com a coluna K e atualiza o status na coluna I. Na medida que as calibrações são efetuadas, os registros avançam nas colunas, então, no exemplo, a proxima calibração(colunaL) deverá ser comparada com a coluna anterior(coluna K) e assim por diante. Sim, poderia usar formulas e até formatação condicional por cores, mas obrigatoriamente tem que ser em VBA. Grato pelo seu tempo.
  8. Salve amigos! Mais uma vez recorro ao vasto conhecimento dos integrantes desse forum. Em anexo uma planilha de agendamento de calibração de instrumentos. O código é adaptado de uma outra planilha, mas com um range de 2 colunas Preciso que localize a última célula preenchida da linha e execute o código. Os dados da coluna 1ª Calibração até 10ª Calibração são importados de outra planilha, Só preciso atualizar o status à cada importação, porém o período de calibração de cada máquina é diferente e são incrementais. Consegui resolver para a primeira coluna, mas meu conhecimento me limita a este ponto. Quem puder ajudar, agradeço desde já. Abs calibracao.zip
  9. Amigos, resolvi quase a totalidade do problema mas necessito de ajuda para melhorar o código abaixo para aparecer a ListRow de 10 linhas? Private Sub ComboBox11_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim arrIn As Variant, arrOut As Variant Dim i As Long, j As Long arrIn = Plan6.Range("log") ReDim arrOut(1 To UBound(arrIn), 1 To 1) For i = 1 To UBound(arrIn) If arrIn(i, 1) Like "*" & ComboBox11.Text & "*" Then j = j + 1 arrOut(j, 1) = arrIn(i, 1) End If Next ComboBox11.List = arrOut End Sub
  10. Salve amigos! Mais uma vez recorro ao vasto conhecimento dos integrantes desse forum. Tenho uma ComboBox no formulário que é populado por um identificador alfanumérico que é uma sequência de outras TextBox. Como são várias origens, este identificador possui 15 caracteres, porém em sequências diferentes. Por exempo, RBP1578F2TRN830, GRU18CNF1235745, etc. O identificador pode começar com letra ou número. Nexta ComboBox, preciso da função autocompletar por qualquer parte do texto da RowSource, não pelas iniciais, pois pesquisando uma sequência de letras ou números em qualquer posição eu reduzo muito o universo da pesquisa. Exempo: Pedro, José e Manoel. Se eu digitar a letra "e" aparecem 3 nomes, mas digitando a letra "s" aparece só José. Quando era planilha eu conseguia com o código abaixo, mas no formulário já vai além do meu conhecimento. Desde já agradeço a ajuda de todos. '--------------------------------------------------------------------------------------- ' Module : UserForm1 ' Author : MVP, Sergio Alejandro Campos ' Date : 19/02/2016 ' Purpose : Búsqueda "as type" '--------------------------------------------------------------------------------------- '1)Al iniciar Private Sub UserForm_Initialize() Me.Height = 181 End Sub '2)Al escribir texto en el TextBox Private Sub TextBox1_Change() TextBox1.Text = UCase(TextBox1.Text) TextBox1.SelStart = Len(TextBox1) If Me.TextBox1.Value = "" Or Me.TextBox1.Value = " " Then Me.Height = 181 Else Me.Height = 181 Dim rng As Range, e Set Lista = Range("lstProdutos") With Me .ListBox1.Clear For Each i In Lista.Value If (i <> "") * (i Like "*" & .TextBox1.Value & "*") Then .ListBox1.AddItem i End If Next i End With End If End Sub '3)Aceptar el valor elegido y capturarlo en la celda activa Private Sub CommandButton2_Click() Cuenta = Me.ListBox1.ListCount For i = 0 To Cuenta - 1 If Me.ListBox1.Selected(i) = True Then ActiveCell.Value = Me.ListBox1.List(i) End If Next i Unload Me End Sub '4)Cerrar el formulario Private Sub CommandButton1_Click() Unload Me End Sub Private Sub Listbox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) With Me.ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then ActiveCell.Value = .List(i, 0) Exit For End If Next End With Unload Me End Sub -----Modulo-------- Private Sub Listbox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) With Me.ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then Me.TextBox1.Value = .List(i, 0) Exit For End If Next End With End Sub
  11. @Basolemais uma vez, muito obrigado. Minha necessidade se resume no evento duplo clique copiar a ID (coluna A, números de ordem sequenciais, ID 1começa na linha 6) da linha selecionada para a célula AP3 da Plan2 e abrir a Plan 2, que já tem uma área definida de impressão com um espelho de formulário. Alimentando manualmente a célula AP3 com, o formulário é preenchido por PROCV e impressão com um botão por macro de print preview. Minha ignorância está em escrever um código que copie o valor da ID da linha selecionada na Plan1 para a célula AP3 da Plan2 através do duplo clique, feche a Plan1 e abra a Plan2 preenchida para conferência. Agradeço antecipadamente por compratilhar seu tempo e seu conhecimento.
  12. @Basole após o evento duplo clique, o valor da ID da coluna A da linha selecionada será copiado para a célula AP3 da Plan2. Esse valor na célula AP3 da Plan2 é referência de PROCV para preenchimento de outras células que compõem um modelo de 2ª via, com área de impressão definida. Então, uma vez o valor copiado para a Plan2, essa seria preenchida por PROCV e imediatamente abriria um print preview para conferência. Se não me fiz entender é por falta de lapidação no VBA...🙋‍♂️
  13. @Basolemuito obrigado mais uma vez, excelente contibuição!!! Agregando valor ao código, seria possível, depois de copiar a informação, abrir um print preview da Plan2? Agradeço desde já.
  14. Após um duplo clique em qualquer célula preenchida da Plan1(A:AH), preciso que a ID da linha(coluna A) seja copiada para a célula AP3 da Plan2, que assim preencherá um modelo de formulário por PROCV baseado na ID. Traduzindo, duplo clique aleatório na célula X20, o valor da ID na A20 será copiado para a Plan2 na célula AP3. A referência para copiar e colar no VBA será sempre a célula da coluna A da linha selecionada para a Plan2 na célula AP3. Grato pela atenção.
  15. @Basole, muito obrigado mais uma vez por compartilhar seu conhecimento! Tenho certeza que será útil não só a mim como a outros usuários de Excel.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!