- Este tópico contém 11 respostas, 4 utilizadores e foi actualizado pela última vez há 10 anos, 4 meses por Emmanuel Loyard.
-
AutorArtigos
-
-
6 de Maio de 2011 às 17:52 #939AlbinoParticipante
boas
será que poderiam ajudar nesta duvida de iniciante?É o seguinte:
na folha1 tenho uma tabela com entradas até á coluna “f”.
em cada célula da coluna “g” vou atribuir um valor que pode ser de 1 a 3.
o que pretendia era que quando introduzisse o valor “1”, a linha em questão de “a” a “f” fosse copiada para a folha2 na linha vazia imediatamente abaixo.
seria do tipo.
se a célula da coluna “g” tiver valor “1”, copiar células (a:f) para folha2 na linha livre imediatamente abaixo.estou a usar uma solução com a formula (se.) do tipo
=se($e6=1;a6;””)
só que tenho de colocar a formula em todas as células e nas que têm valor diferente de “1” ficam linhas em branco que depois tenho de eliminar manualmentese houver solução, e há de certeza agradecia ajuda.
obrigado
abraço -
7 de Maio de 2011 às 15:03 #1571AnónimoInactivo
segue ficheiro com simulação do seu problema com os seguinte procedimentos:
este procedimento que deverá estar num modulo generico do livro, irá copiar as 6 células antes da célula activa à esquerda da coluna g e cola-las na folha 2 na coluna a imediatamente a seguir à ultima linha preenchida.
sub copiarparafolha2()
‘dá para fazer de muitas formas diferentes, vou tentar fazer de uma forma bem simples
range(activecell.offset(0, -1).address & “:” & activecell.offset(0, -6).address).copy
folha2.range(“a1048576”).end(xlup).offset(1).pastespecial xlpastevalues
application.cutcopymode = falseend sub
de seguida temos que fazer correr este procedimento automaticamente cada vez que colocar 1 na coluna g utilizando o evento worksheet_change da folha1, para isso é necessário nomear a coluna g com o nome “targetrange” ou outro nome para que no evento seja identificada a célula activa na coluna g, então se a cel activa estiver dentro da targetrange e o valor for igual a1, executamos o procedimento “copiarparafolha2” então o evento será este:
private sub worksheet_change(byval target as range)
if not intersect(target, range(“targetrange”)) is nothing then
on error resume next
if target.value = 1 then
copiarparafolha2
end if
end if
end sub
com os melhores cumprimentos
vg-excel-gest
vg-excel-gest.blogspot.com/
http://www.youtube.com/user/vgexcelgest2?feature=mhum
http://www.facebook.com/vgexcelgest -
7 de Maio de 2011 às 15:32 #1573AnónimoInactivo
já fiz várias tentativas e não consigo, tal com explica um post do administrador deste forum!!!
-
7 de Maio de 2011 às 16:09 #1572jorgerodAdministrador
não podes enviar com o formato .xls ou .xlsm, tens que enviar zipado.
depois de procurares o ficheiro em causa, e te aparecer o caminho no campo, clicas em image. há-de aparecer-te qualquer coisa como img. isto contém o caminho para efectuar o upload do ficheiro. se clicares em previsualizar, não o verás, apenas quando clicas em enviar é que o ficheiro, tal como o post escrito, é registado no site.
-
7 de Maio de 2011 às 16:12 #1574jorgerodAdministrador
albino,
uma outra alternativa possível, para melhorares e adaptares:
private sub worksheet_change(byval target as range)
dim rngdest as rangeapplication.cutcopymode = true
application.screenupdating = falsesheets(“folha2”).range(“a1:f100”).delete
sheets(“folha1”).select
finalrow = cells(rows.count, 1).end(xlup).row
for x = 1 to finalrow
thisvalue = cells(x, 7).value
if thisvalue = 1 then
sheets(“folha1”).range(cells(x, 1), cells(x, 6)).select
selection.copyset rngdest = worksheets(“folha2”). _
range(“a” & cstr(application.rows.count)).end(xlup).offset(1)selection.copy destination:=rngdest
else
end if
next x
application.cutcopymode = false
application.screenupdating = true
end subfica bem e diz qq coisa, ok?
-
7 de Maio de 2011 às 16:48 #1575AnónimoInactivo
finalmente consegui.
tem de ser compactado como zip não como rar.
cá vai:
[file name=ajudaexceler_07_05_11___albino-20110507.zip size=16806]https://www.exceler.org/media/kunena/attachments/legacy/files/ajudaexceler_07_05_11___albino-20110507.zip[/file]
AjudaExceler_07_05_11___Albino.zip
AjudaExceler_07_05_11___Albino-20110507.zip -
7 de Maio de 2011 às 17:12 #1576jorgerodAdministrador
acho que, no teu exemplo, o range que está a ser copiado, é o range abaixo do range pretendido. no entanto, o código está óptimo, só precisa de alguns pequenos acertos! 🙂
fica bem.
-
7 de Maio de 2011 às 17:50 #1577AnónimoInactivo
o problema está quando após digitarmos o valor 1 em vez de clicarmos enter para a direita ou clicamos seta para baixo copia a linha seguinte à linha correta.
vou tentar resolver!
obrigado pelo aviso!
-
7 de Maio de 2011 às 21:29 #1570AnónimoInactivo
resolvi da seguinte forma :
sub copiarparafolha2()
if activecell.column = 8 then ‘se for para adireita
activecell.offset(0, -1).select
end if
if activecell.column = 7 then ‘se for para baixo
if activecell.value = “” and activecell.offset(-1) = 1 then
activecell.offset(-1).select
end if
end ifif activecell.column = 7 and activecell.offset(1) = 1 then ‘se for para cima
activecell.offset(1).select
end ifif activecell.column = 6 and activecell.offset(0, 1) = 1 then ‘se for para a esquerda
activecell.offset(0, 1).select
end ifif activecell.offset(0, 1).text “registado” then
range(activecell.offset(0, -1).address & “:” & activecell.offset(0, -6).address).copy
folha2.range(“a1048576”).end(xlup).offset(1).pastespecial xlpastevalues
activecell.offset(0, 1) = “registado”
application.cutcopymode = falseend if
end subesta solução não resolve a 100% caso queiramos ir pelo evento worksheet_change.
para maior segurança e não haver falhas poderá utilizar o evento worksheet_beforedoubleclick mas para isso não pode ter o evento worksheet_change activo, coloquei uma opção na folha 1 para desactivar o evento worksheet_change e poder utilizar o evento worksheet_beforedoubleclick.
para usar o worksheet_beforedoubleclick tambem foi necessário construir um procedimento ligeiramente diferente que o utilizado no change.
a solução do jorge rodrigues não funciona correctamente no meu modelo, peço ao j. rod. que reveja também como no meu modelo podemos utilizar o evento change sem haver falhas, a principio parecia fácil mas tornou-se um quebra cabeças interessante para o evento change.
segue novo ficheiro:
[file name=ajudaexceler_07_05_11___albino-20110507-2.zip size=20235]https://www.exceler.org/media/kunena/attachments/legacy/files/ajudaexceler_07_05_11___albino-20110507-2.zip[/file]
AjudaExceler_07_05_11___Albino-20110507-2.zip -
8 de Maio de 2011 às 1:47 #1578AlbinoParticipante
boas
obrigado pelas vossas ajudas.
as duas soluções são interessantes e vou usa-las em trabalhos futuros.a solução do vg-excel-gest para o momento pareceu-me encaixar melhor nos meus propósitos.
no entanto a do jorgerod está muito interessante, o problema é que cada vez que faço alterações na folha numa célula que não seja na coluna “g” faz uma cópia para a folha2.
isso não me serve porque tenho necessidade de mexer na folha1 sem pretender copiar para folha2 cada vez que edito uma célula.
É que a folha1 funciona como base e nela ficam inscritas todas as alterações, o meu intuito é uma vez por mês copiar o que foi lançado nesse mês mas ficando o anterior registado, portanto copiar só o alterado nesse mês.
será que dá para colocar uma instrução afim de ignorar o já lançado e copiar só aquelas linhas que me interessam?
ah quando se efectua uma copia a range fica seleccionada, não há forma de isso não acontecer, deixar só seleccionado a célula abaixo onde foi introduzido o nº?desculpa lá ser chato
um abraço
obrigado -
8 de Maio de 2011 às 9:15 #940AnónimoInactivo
em primeiro lugar se não funcionou é porque não adaptou bem ao seu livro, se utilizar o meu segundo ficheiro só irá copiar mesmo quando digitar 1 na coluna g se digitar em outro local da folha não fará nada e para complementar coloquei à sua escolha o evento worksheet_beforedoubleclick que é fiável a 100% na transferência dos dados para a folha1, ou seja você pode fazer duplo clique na coluna g e se for 1 transfere os dados se não não faz absolutamente nada.
para adaptar correctamente ao seu ficheiro tem que ver em profundidade o segundo ficheiro que envie, para isto funcionar são necessários dois procedimentos que estão estão no modulo 1 e no modulo privado da folha 1 estão os eventos, estude o ficheiro que lhe enviei se não adaptar tudo como deve ser não vai funcionar.
private sub worksheet_change(byval target as range)
if folha1.range(“desactivarchange”) = “x” then
exit sub
end ifif not intersect(target, range(“targetrange”)) is nothing then ‘ esta linha é absolutamente fundamental para que só copie quando fizermos alterações na col. g
on error resume next
if target.value = 1 then
copiarparafolha2
end ifend if
end subquanto ao resto que você pede penso que será conseguido com o ficheiro que enviei, a não ser que mais tarde você faça alterações nas linhas já transferidas anteriormente e deseje transferi-las novamente mas para nós que estamos a ajudar, por vezes só podemos efectivamente dar uma ajuda definitiva quando nos colocarem à disposição um exemplo do ficheiro real, se contiver informação confidencial, tente fazer uma cópia e altere essa informação e post aqui para ver.
continuação de um bom domingo
vg-excel-gest
vg-excel-gest.blogspot.com/
http://www.youtube.com/user/vgexcelgest2?feature=mhum
http://www.facebook.com/vgexcelgest -
14 de Agosto de 2014 às 17:44 #4758Emmanuel LoyardParticipante
informações muito boas, ele me ajudou. Muito obrigado.
-
-
AutorArtigos
- Tem de iniciar sessão para responder a este tópico.