Ir ao conteúdo

Excel Excel - Tenho o endereço de uma célula como colocar um valor nele


Ir à solução Resolvido por OreiaG,

Posts recomendados

Postado

Você testou o arquivo que anexei no Post #27 ?

 

Se você quiser instalar o código no arquivo aí faça assim:

a) copie o código do Post # 21

b) clique com o direito na guia da planilha Consulta a um Piloto e selecione Exibir Código

c) cole o código no módulo em branco, faça a correção (elimine o "A")

d) feche o VBA e faça os testes

 

Postado

Tive de chamar os nossos serviços secretos que resolveram rapidamente o problema.
Por mero acaso reparei que no ficheiro em que estava a testar a lista dos voos estava ainda a começar na linha 7 quando devia ser na linha 8. Funcionou na perfeição.

Muitíssimo obrigado pela paciência que teve em me aturar.

Alerto para quem um dia necessitar de usar a solução que a solução de Wendell de Menezes também funciona.
Esta solução é ligeiramente diferente porque a de OreiaG usa o VB em duas folhas para obter o que se pretende e a de Wendell de Menezes usa o VB só numa folha.
A culpa foi toda minha que inicialmente devia ter pedido ajuda mas como pedi da segunda vez.

Postado

Afinal ainda não tinha feito bem o pedido.
Assim solicitava-lhe se passava a considerar a eliminação de um voo.
Assim se tiver na folha consulta a um Piloto Não pago o voo será eliminado na folha Registo de horas na linha correspondente na coluna D de Consulta a um Piloto.

Postado
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$B$3" Then
  [A8:B506] = ""
 ElseIf Not Intersect(Target, [A8:B506,D8:D506]) Is Nothing Then
  If Application.CountA(Union(Cells(Target.Row, 1).Resize(, 2), Cells(Target.Row, 4))) < 3 Then Exit Sub
  If Cells(Target.Row, 1) = "Pago" Then
   Sheets("Registo de horas").Cells(Cells(Target.Row, 4), "Q").Resize(, 2) = Array("Pago", Cells(Target.Row, 2))
  Else: Sheets("Registo de horas").Cells(Cells(Target.Row, 4), "Q").Resize(, 2) = ""
  End If
 End If
End Sub

 

  • Obrigado 1
Postado

Afinal expliquei-me mal Ainda tentei fazer baseando-me no que me fez mas não vou lá.
O que pretendo se escrever não pago em Consulta a um Piloto é só apagar as colunas Q e R referentes à linha inscrita na coluna D.

Apareceu-me aqui uma mensagem a informar que me enviou uma mensagem privada. Onde devo consultá-la?

As minhas desculpas, porque afinal é mesmo isso que eu pretendo.
Muitíssimo obrigado.

 

Afinal pensava que funcionava mas não estou a conseguir.
Escrevo "Não pago" na coluna A na folha Consulta a um Piloto e depois vou ver à folha registo de horas e não está apagado.

Onde está o erro?
Testei com outra versão opnde tinha colocado o seu novo ficheiro e funcionou.

Postado

 

2 horas atrás, Angelo Campos disse:

Apareceu-me aqui uma mensagem a informar que me enviou uma mensagem privada.

Deve ter ocorrido algum problema/engano pois eu não lhe enviei mensagem privada.

29 minutos atrás, Angelo Campos disse:

Onde está o erro?

Anexe o seu arquivo Excel com o código instalado.

 

Postado
1 hora atrás, Angelo Campos disse:

Só funciona o Pago, o Não pago não.

 

O código só é executado, tanto para Pago como para Não Pago, se as células em A, B e D, mesma linha, estiverem preenchidas.

 

Se ao escrever Pago em A o código está colocando corretamente os dados na planilha destino, então é porque a data na coluna B está preenchida.

 

Por outro lado, se ao colocar Não Pago em A o código não limpa os dados na planilha destino então, possivelmente, é porque não existe uma data em B, ou seja, você limpou a data antes de inserir Não Pago. É assim?

 

Eu coloquei a condição descrita no primeiro item acima, que inclui o preenchimento da coluna D, pois no arquivo que você anexou antes os números eram inseridos manualmente, no entanto, nesse último arquivo vejo que há fórmulas naquela coluna, e isso requer ajustes no código.

 

Antes dos ajustes informe com precisão quais os movimentos que você pretende fazer ao inserir Pago, Não Pago e a data, assim faço os ajustes de uma vez só.

Postado

Primeiro que tudo reparo agora que não lhe expliquei que o número da linha coluna D é o que está na coluna AF após a ordenação e que por sua vez se encontra na coluna AI da folha Registo de horas.
Assim para eliminar um voo deve só ser colocado na coluna A da folha Consulta a um Piloto Não pago para depois apagar na linha referida na coluna D.
No fundo é o inverso do Pago sem preencher a coluna B com a data.
Ainda tentei repetir o que fez para Pago, mas não consegui.

Postado

Coloque este no lugar do anterior.

 

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$B$3" Then
  [A8:B506] = ""
 ElseIf Not Intersect(Target, [A8:A506]) Is Nothing Then
  If Target.Value = "Pago" Then
   Sheets("Registo de horas").Cells(Cells(Target.Row, 4), "Q").Resize(, 2) = Array("Pago", Cells(Target.Row, 2))
  ElseIf Target.Value = "Não Pago" Then
   Sheets("Registo de horas").Cells(Cells(Target.Row, 4), "Q").Resize(, 2) = ""
  End If
 End If
End Sub

 

Postado

A sintaxe da linha em que ocorre o erro está correta.

 

Tente apagar e digitar a linha novamente, e se o erro persistir anexe o arquivo aqui.

Postado
57 minutos atrás, Angelo Campos disse:


Eu escrevia Não pago e no VB estava Não Pago.

 

 

Isso não provocaria o erro que você apontou no Post #41.

Postado

Vinha pedir-lhe mais um favor.
Nesta linha de programação
ElseIf Not Intersect(Target, [A8:A507]) Is Nothing ...
em vez de analisar sempre todas as linhas, passar a analisar só até ao número de voos que o piloto já efectuou que se encontra na célula AL3.
A grande maioria dos Pilotos efetuou menos de 5 voos.
O Máximo que tenho é um com 181 voos, mas defini até 500 voos para evitar ter de estar a alterar.

 

Postado

Dá erro.

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$B$3" Then
  [A8:B506] = ""
 ElseIf Not Intersect(Target, [Range "A8:A" & [AL3])) Is Nothing Then
  If Target.Value = "Pago" Then
   Sheets("Registo de horas").Cells(Cells(Target.Row, 4), "Q").Resize(, 2) = Array("Pago", Cells(Target.Row, 2))
  ElseIf Target.Value = "Não pago" Then
   Sheets("Registo de horas").Cells(Cells(Target.Row, 4), "Q").Resize(, 2) = " "
  End If
 End If
End Sub

 

Postado

Básico: antes de postar você deveria comparar a linha que passei com a linha que você digitou.

 ElseIf Not Intersect(Target, [Range "A8:A" & [AL3])) Is Nothing Then

Faça Copiar/Colar: copie a linha do Post #46 e cole no código em substituição a existente, isso evitará digitar errado a linha que passei.

Postado

Tenho tentado que o ficheiro funcione e ainda não consegui.
Dá o erro 13 mismatch.
If Target.Value = "Pago" Then - passa a fundo vermelho
Eu se dá erro abandono esse ficheiro vou buscar outro e tento fazer tudo de novo.
Lembrei-me que a melhor solução é no ficheiro que lhe enviei colocar o VB que criou e eu depois passo a utilizá-lo.
É que não sei corrigir o erro.

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!