Ir ao conteúdo
  • Cadastre-se

Excel Trocar dados inseridos na célula a partir de valores escolhidos numa TextBox


Ir à solução Resolvido por Basole,

Posts recomendados

Olá a todos!

Gostaria de pedir uma ajuda a vocês com a seguinte questão:

1. Montei um formulário pra que seja inserido 3 informações ("Nº do Chamado", "Técnico" e "Data Cadastro"), pra que o responsável (que não sou eu) possa me enviar esse arquivo com tudo formatado sem espaços ou caracteres errados (assim não preciso corrigir sempre que pegar essa lista na ETL). 
O objetivo foi alcançado:

image.thumb.png.0019d8d16831f9d043ffb8d90bc291f3.png

 

image.png.1d2e1033ccd464d531cf4cb31d7dd4e4.png

 

Porém, me veio à cabeça que quem quer que esteja preenchendo pode acabar errando tanto o nome do técnico quanto o número do chamado e precisar editar os dados, então criei um outro formulário pra abrir ao apertar em "Editar":

image.png.410b07540ea4e61b2e379b5eb181686f.png

 

Quando eu chamo o Nº do Chamado (que será uma chave estrangeira) a TextBox de baixo já é preenchida automaticamente e assim o responsável que realizar a atualização dos dados vai ou mudar ou manter número do chamado e nome do técnico, dependendo do possível erro dele. E aí que está pegando pra mim:


Quero poder , ao apertar o botão "Atualizar", trocar as informações contidas à esquerda pelos dados que vão ser atualizados na direita, mas não consegui pensar numa forma de fazer isso, pois precisaria que as células onde elas estão inseridas fossem trocadas. 

 

As imagens abaixo representam o que eu gostaria que resultasse com o botão "Atualizar':

image.thumb.png.f46d0a73d00bb03d3d7e0da50e2f09bf.png

 

image.png.2b58bb0d5aadaa4640a14d9e3f87745d.png 

*Coloquei a Data diferente para demonstrar que caso a atualização fosse num dia diferente, ele sempre daria o dia corrente, pra que o responsável sempre saiba qual a última data na qual ele realizou qualquer procedimento - seja de cadastro ou atualização de cadastro. 

Seguem abaixo algumas características que já estão embutidas no formulário:

1. Se um dos campos de cadastro ou os 2 estiverem vazios:
image.png.1f9edd48ac98446f01f5c946daf68e23.png

 

2. Se tentarem inserir letras no campo de chamado (que só possui números):

image.png.4ce81c1a96b0868c6d1e230732458f68.png

 

3. Se tentarem inserir o mesmo número de chamado:

 

image.png.026d3cb84319401170f5911fcf84e502.png

 

Não sei se é bobo frisar, mas se não houverem dados cadastrados, não haverá o que se ser editado rs (estou deixando a lista sem dados inseridos).
Se estiver faltando alguma informação que possa auxiliar me avisem !

Obrigado desde já por qualquer iluminação que puderem oferecer !
Cordialmente,

Link para o comentário
Compartilhar em outros sites

  • Solução

Segue um exemplo genérico. A rotina procura o valor do chamado na coluna A e se encontar altera as demais colunas da linha

 

Dim r As Range
Dim sTxtB As String

sTxtB = TextBox1.Text

With Sheets("Nome_da_Sua_Planilha")

Set r = .Columns("A").Find(sTxtB, LookIn:=xlValues, lookat:=xlWhole)
    If Not r Is Nothing Then
     .Cells(r.Row, "B") = TextBox2.Text 'vlr. que será alterado
     .Cells(r.Row, "C") = TextBox3.Text 'vlr. que será alterado
    Else
     MsgBox "Chamado não Encontrado!", vbCritical, "Aviso: "
    End If
End With

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Basole Muito obrigado por sua resposta tão rápida !
E me desculpe se por acaso demorei pra passar feedback !

Quando insiro o script ele me retorna "Erro de compilação: O objeto é obrigatório" - sublinhando o 'rng'.

Pelo que entendi na rotina:
          Declaro "rng" (que é o intervalo) como string, assim como a string "Edicao" (que será o texto contido na ComboBox - que já é a lista do que eu já cadastrei - expressa por um Additem de tudo o que estiver na Coluna A, limitando a lista para apenas células preenchidas) :

image.png.5976ec87c975be14d251ff196e88ab99.png

 

Depois, pelo código, setamos "rng" como um intervalo e se houver algo em "Edicao" então:
       Substituo o próprio texto contido "ComboBox_Chamado_Old" (que está na Coluna A) para o contido em TextBox_Chamado_New;

       Substituo o que estiver na Coluna B pelo que estiver contido em ComboBox_Técnico_New;

       Substituo a data na Coluna C (para inserir a data mais recente, que é da atualização frente ao cadastro).

 

image.png.8eee49f4b4bd23adf9c89e4380eafda2.png

 

 

Segue abaixo a ilustração dos objetos, pra você entender analisar melhor onde eu errei :

image.thumb.png.84399c2383fbb797af775dd840d29464.png

Aguardo ansioso pelo seu retorno rsrsrs

Cordialmente

 

 

Link para o comentário
Compartilhar em outros sites

@Bruno_ABS não dá para "setar" uma string como objeto, então declare, como range.

 

Dim rng As Range

 

E na data do dia, em Date caso estiver na célula, apresentando  o formato americano *, ou seja mês/dia/ano, formate no código data forma:

 

Vba.Format( vba.Date, "mm/dd/yyyy")

 

Aí ficará no formato brasileiro 

 

* Coisas do Excel 🤔

 

Você pode também, acrescentar uma mensagem, após a linha da data confirmando ao usuário que as alterações foram efetivadas

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Basole Ih  é verdade amigo, expliquei aqui mesmo a descrição da lógica mas inseri uma string no lugar de range rs. Sorry!

 

O seguinte erro está aparecendo:
Será que isso está acontecendo porquê a string "Edicao" é igual ao texto contido na ComboBox, mas não referencia um endereço ?

Apenas conjecturando pra tentar entender mesmo, pois como pode ver, sou muito raso em VBA rs.
Obrigado desde já pela paciência 😊

Edit.: Encontrei a falta de atenção ! Estava chamando "Edicao" e não "rng" nos endereçamentos ¬¬"
Muito obrigado meu amigo, você foi show !

PS.: você me indicaria cursos ou materiais bacanas pra eu poder adentrar mais em VBA ?

image.png.ecf31b5aceade3c3efece2f8ce7944fe.png

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 horas atrás, Bruno_ABS disse:

......PS.: você me indicaria cursos ou materiais bacanas pra eu poder adentrar mais em VBA ?

 

Amigo curso não conheço nenhum para indicar, mas da uma olhada nestas apostilas para iniciantes

 

http://gust4vo.com/cursos/wp-content/uploads/2013/06/Apostila_VBA_Excel.pdf

http://www.faifer.com.br/apostilas/MacroExcel.pdf 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!