Jump to content

Recommended Posts

Posted

Bom dia

Preciso de ajuda para elaborar uma planilha.

Tenho a seguinte planilha

Cod. Cliente  ..............Risco Cliente............Valor

Nivel de risco.............    A        ............

1            .............     B ............1,00

2            .............        c ............2,00

72            .............     B ............51,00

115          .............     A ............10,00

Nivel de risco.............    H        ............

5            .............   F ............1,00

4            .............   V ............2,00

79            .............   B ............51,00

10            .............   H ............10,00

a primeira linha é um cabeçalho.

Todos os clientes tem que estar no nível de risco acima dele.

Preciso de uma formula ou macro que faça isto automáticamente, pois tenho mais de 6.000 clientes e emito o relatório 2 a 3 vezes por mês.

Grato pela ajuda

Rodrigo.

EDIT: Titulo modificado

Posted

Na verdade, o risco do cliente 72 por exemplo esta como risco "B" e na verdade ele pertence ao risco "A". Da mesma forma, o cliente 4 esta como risco "V" e na verdade ele pertence ao risco "H".

Na planilha, primeiro eu tenho o nivel de risco correto, risco "a" (linha que não tem valor na frente), depois eu tenho os clientes que deveriam pertencer a este risco.

A formula ou macro deveria ser assim mais ou menos:

Enquanto o sistema não encontrar o proximo Nível de Risco, eu copio o Nível de Risco anterior e substituo o que esta na linha que tem o codigo do cliente.

Desculpem se não estou sendo muito claro, é que estou começando na area ainda.

Posted

pelo que percebi é, se o cliente estiver debaixo do nivel A, o cliente passa a ter nível A?

vamos supor

X= 1ª linha onde começa

Y= ultima linha

C= coluna onde esteja escrito "Nível de risco"

B= coluna onde esteja o nível de risco

possível codigo

Risco="A"                                                                  'para começar com o 1º risco

                                                                                existente

For i= X to Y                                                              'percorre todas as linhas

if cells(i,C)="Nível de Risco" then Risco=cells(i,😛                 'se na 1ª coluna estiver escrito Nível de Risco, guarda na variável Risco o nível

cells(i,😞 = Risco                                                          'actualiza a coluna do Risco cliente, sempre pela ultimo nível guardado

next i

Posted

charlie, é justamente isso que eu quero, todos que estão debaixo do nível A devem ficar com nível A

Coloquei o codigo da maneira como disse...mas não deu certo

Risco = "A"

For i = 2 To 6

If Cells(i, A) = "Nivel de risco" Then Risco = Cells(i, 😛

Cells(i, 😞 = Risco

Next i

Posted

Deu certo muito obrigado.

Este relatório um dia sai com 1000linhas, outro com 500, outro com 10.000....tem alguma forma de fazer ele entender que acabou e nao continuar preenchendo?

Posted

se as colunas não tiverem nenhum espaço em branco, tens duas hipóteses

- dentro do ciclo for, acrescenta:

For i= 1 to 65000                            ' para no maximo percorrer todas as linhasd

              if cells="" then exit for      'se a célula estiver a vazio acaba o ciclo.

next i

ou

-alteras para

i=1

Do

    colocas aqui o que está dentro do ciclo for

    i=i+1

loop until cells(i,1)=""                              com isto ele vai repetindo até encontrar uma célula vazia.

ou então utiliza o topico:

http://www.portugal-a-programar.pt/index.php?showtopic=27585

que está lá definido como poder saber qual a ultima célula que está preenchida. logo podes fazer o ciclo variar entre 1 e essa ultima célula.

Posted

Apenas uma pequena nota.

Um ciclo deve-se fazer da seguinte forma, uma vez que verificando se existe um espaço em branco não é fiável. Imagina que tens uma linha de separação, ou não tens um valor.

Uma das formas mais correctas é do seguinte modo:

Dim lastRow As Long
Dim x As Long

' Determina qual é a última linha com valores.
' -------------------------------------------------------
' Esta técnica posiciona o cursor na ultima linha da
' folha e salta para a primeira usada na coluna indicada.
' (é como colocar o cursor em A65536 e pressionar CTRL+Seta Cima)
lastRow = Cells(Cells.Rows.Count, "a").End(xlUp).Row

' Faz um ciclo nas linhas usadas
For x = 1 To lastRow
    Debug.Print Cells(x, "a").Value
Next x

Quando o tópico estiver resolvido indiquem também carregando em Topic Solved 🙂

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.