Notifications
Clear all

Introduzir linha entre valores

21 Posts
2 Usuários
0 Reactions
2,815 Visualizações
(@exit_light)
Posts: 27
Eminent Member
Topic starter
 

Precisava de ajuda para fazer um botão que permitisse criar uma linha da seguinte forma:

Tendo uma coluna B na sheet2, por exemplo, com o seguintes valores:

20
53
62
74
92
110

Quando, por exemplo, eu introduzir o valor 70 na célula A1 da sheet 1 queria que introduzisse uma linha na sheet 2 neste caso entre o 62 e 74 ficando:

20
53
62
70
74
92
110

 
Postado : 09/05/2013 5:14 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

vá na sheet2 célula A1 e coloque e arraster para baixo até onde desejar
=menor(sheet1!$a:$A;lin())

se seu excel for em ingles, use small:
=small(sheet1!$a:$A,row())

Para isso, vc precisará necessariamente ter todos os valores em ambas as tabelas de ambas as sheets.
perceba q a sheet2 estará classificando a sheet1. Ou seja, vc nao digitará sempre na célula A1, vc digitará sempre na célula abaixo à ultima célula preenchida na sheet1. e o unmero d elinhas com fórmulas na sheet2 terá q ser sempre maior ou igual ao numero de itens na sheet1

 
Postado : 09/05/2013 6:13 am
(@exit_light)
Posts: 27
Eminent Member
Topic starter
 

mas isso não responde ao meu problema :?

 
Postado : 09/05/2013 6:46 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

mas isso não responde ao meu problema :?

Exti_light, apesar da dica do colega Fernando não ter suprido a sua necessidade, você tem de levar em conta que estamos em um Forum onde toda ajuda é voluntária, e a maioria dedica alguns minutos livres para postar alguma ajuda, então eu pediria por gentileza que da proxima vez que uma ajuda não lhe favorecer, você fosse um pouco mais amigavel em sua resposta, evitando ser tão direto como foi, muitos poderão interpretar como uma imposisão ou até cobrança.
Espero que não me leve a mau, é só um conselho e continue visitanmdo nosso forum.

Quanto ao que entendi sobre sua questão veja se o arq anexo resolve.
A rotina só enviará para Plan2 se o valor for digitado em A1 da Plan1 e ao invez de adicionar uma linha entre os numeros é adiciona ao final e depois classificada a mesma.

Obs : Aproveitei uma das rotinas que o colega Fernando tinha utilizado em um outro exemplo e adaptei, grato Fernando pela contribuição.

[]s

 
Postado : 09/05/2013 7:46 am
(@exit_light)
Posts: 27
Eminent Member
Topic starter
 

Muito obrigado!
Eu não estava a ser ingrato, estava só dizendo que aquilo não era o que pretendia. Não me interprete mal. Agradeço toda a ajuda!

Isso era bem o que queria! :D
Só gostava também de associar a função para só acontecer quando carregar num botão. Como não está como macro como faço isso? E como faço para que dê erro caso o valor já exista?

 
Postado : 09/05/2013 8:46 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Exit, sem problemas, foi mais um comentário, nem todos os foruns agem como nós aqui do Planilhando, geralmente já teriam te bloqueado.

Agora veja bem, da mesma forma que você respondeu a ajuda do Colega Fernando : "mas isso não responde ao meu problema", eu poderia tambem simplesmente responder somente : "mas sua duvida já foi resolvida", uma vez que você solicitou que quando digitasse em A1 este valor deveria ir pára Plan2 em uma relação lá existente.
E você fez uma obs no post anterior : "Isso era bem o que queria!", mas adicionou novas solicitações, o correto seria você fechar o tópico já que resolveu conforme solicitou e abrir um outro com a nova solicitação, nossa, estou parecendo um chatro mesmo, mas tudo isto é porque pretendemos manter o Forum organizado, e com os Tópicos com assunto coerentes com a duvida ajuda na Pesquisa daquele que buscam por questão parecida.

Ok, vamos deixar de lado tudo isto e vamos pro finalmente, eu não entendi o motivo de associar uma rotina a um botão se irá digitar e verificar somente uma Celula, mas de qq forma com alguns ajustes cheguei ao exemplo abaixo, veja se é isto.

Verifica se valor já existe e lança

[]s

 
Postado : 09/05/2013 11:08 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

cara, bacana seu código... :)

 
Postado : 09/05/2013 8:06 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

cara, bacana seu código... :)

Grato Fernando, mas não posso dizer que é meu código, pois peguei uma das Functions que você fez em um exemplo para a MMEssias (viewtopic.php?f=10&t=7720) e uma outra referente a Duplicados que o Reinaldo havia postado em outro tópico, fiz algumas adaptações, coloquei tudo no liquidificador e pronto, foi só experimentar, rsrsrsr

[]s

 
Postado : 09/05/2013 8:47 pm
(@exit_light)
Posts: 27
Eminent Member
Topic starter
 

Sim, você tem toda a razão em querer manter o fórum organizado! Mas penso que se fosse abrir outro tópico seria mais confuso. Numa próxima situação terei atenção a isso.

Quanto ao seu código, parece muito bom! Mas penso que a verificação do número não está a funcionar. Tente lançar o número "2", por exemplo. Diz que já existe. Acho que a função está a tratar os números da coluna individualmente. Quero dizer, se tiver na lista o número "92" a função não está a deixar lançar o número 9 nem o número 2 :

 
Postado : 10/05/2013 2:35 am
(@exit_light)
Posts: 27
Eminent Member
Topic starter
 

Será que posso pedir só mais uma pequena solicitação sobre esse mesmo assunto ou devo abrir novo tópico? (Você vai me matar...). É que eu estou a adaptar isso ao meu problema. E só vendo as coisas é que estou a lembrar de novas necessidades. Mas penso que com mais isso, ficaria mesmo perfeito.

Eu gostava que os números fossem tratados como texto. Isto porque gostava de poder introduzir, por exemplo, o número "030377". E só agora percebi que a única forma de aparecer o número "0" antes seria ter todos os números tratados como texto.
E só como texto a lista ficaria como ideal para o que pretendo, já que gostaria que, por exemplo, os números ficassem organizados da seguinte forma:

...
0560750
0560751
056075190
056075199
0560752
...

Como texto resolveria tudo isso.

Mas uma vez, peço desculpa por não estar a dizer logo de uma vez quais os objetivos daquilo que pretendia.
Muito obrigado por todas as respostas e ajuda!

 
Postado : 10/05/2013 2:59 am
(@exit_light)
Posts: 27
Eminent Member
Topic starter
 

Mas penso que para esse último ponto eu posso apenas editar as células em causa como texto. Penso que não é necessário alterar nada do código.

 
Postado : 10/05/2013 3:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Mas penso que para esse último ponto eu posso apenas editar as células em causa como texto. Penso que não é necessário alterar nada do código.

Exit, sem problemas de continuar neste tópico, ainda estamos tratando praticamante da mesma questão.

Você tem razão quanto as observação quanto a localizar os numeros, eu não havia me atentado a isto uma vez que não realizaei varios testes, mas é coisa simples, você tambem pode manter com a sua formatação como texto.
E precisamos fazer alteração no código, mas somente na instrução abaixo :
Set F = myRange.Find(NumeroEmA1)
trocando-a pela :
Set F = myRange.Find(What:=NumeroEmA1, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)

Desta vez deixei com todos os argumentos que a Função FIND possui, se olhar na ajuda do VBA terá detalhes sobre as opções, e como não havia definido o tipo do Find ele localiza qualquer valor pertencente a uma cadeia de numeros ou texto, ou seja como padrão ele assume a opção xlPart que irá procurar parte do valor procurado em um contexto inteiro, então utilizando a opção xlWhole irá procurar pelo numero inteiro.

Faça somente esta substituição e realize novos testes e qq coisa retorne.

[]s

 
Postado : 10/05/2013 6:11 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia senhores,

veja se atende.

Mauro, dei uma adaptada no seu código, acredito que ficou bem bacana, dá uma olhada e me diz o que acha?

Valeu galera,

 
Postado : 10/05/2013 6:32 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fernando, ficou muito bom, alias você não fez adaptação nos códigos que postei, você fez de uma outra forma onde chegamos ao mesmo resultado como se estivessemos utilizando formulas, é por isto que amo o VBA, as possibilidades de se implementar determinada ação em várias outras é impressionante.

[]s

 
Postado : 10/05/2013 6:53 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Muito Bom! :D
Mas estou detetando um problema! Eu acrescentei dados em frente de cada linha da linha de números.
Vejam aqui um exemplo em anexo:

E, quando introduzo, por exemplo, o valor 020112 ele deveria ser introduzido sem nenhum valor em frente.
Mas está apenas a reorganizar a coluna de números e ignorar o resto da linha :s

exit, se o layout do arquivo que postou é definitivo, ou seja, os Dados lançados na Plan2 só Temos o Cabeçalho na Coluna "B", a rotina atual Classifica somente pela Coluna "B" ignorando as demais, ainda mais que temos a Coluna "C" vazia, então precisamos orientar para que seja feita a classificação por todas as Colunas, de "B" até "H", e se for fazer manualmente perceberá que será exibido se quer considerar os Numericos armazenados como texto como sendo Valores Numericos.

Então substitua toda a rotina : Public Sub LancaValor(ByVal sValA1 As String)

pela a abaixo :

Public Sub LancaValor(ByVal sValA1 As String)
    Dim shtPlan2    As Excel.Worksheet
    Dim sCell       As String
    Dim sLin        As String

    'criando o objeto do tipo planilha
    Set shtPlan2 = ThisWorkbook.Worksheets("Plan2")

     With shtPlan2
        'Retornando o endereço da próxima célula abaixo da ultima preenchida da coluna B (por isso o numero 2 ali)
        sCell = .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0).Address
        'Lança o Valor
        .Range(sCell).Value = "'" & sValA1
        
        'Conta e Armazena a Ultima Linha Preenchida, baseando-se na coluna "B"
        sLin = .Cells(.Rows.Count, 2).End(xlUp).Row
    End With

    'classificando a tabela, forçando o excel a entender que esta tabela
    'NÃO tem cabeçalho e que os dados numericos são textos
    With shtPlan2.Sort
        .SetRange Range("B2:H" & sLin)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    'Sempre que criar um objeto, deve-se destrui-lo ao fim do código
    Set shtPlan2 = Nothing
    
End Sub

Refaça todos os testes e qq duvida retorne.

[]s

 
Postado : 10/05/2013 7:24 pm
Página 1 / 2