Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
#4776
Bom dia.

Gostaria de ter duas células distintas, preenchidas com porcentagens, em uma planilha e que a soma seja sempre 100%. Sempre que eu digitasse um valor na primeira célula, a segunda se adaptaria para que a soma das duas seja 100%. O mesmo funcionaria se eu digitasse um valor na segunda célula.

Ex.:
Sendo as duas células A1 e A2, quando eu digitasse "40%" em A1, A2 receberia o valor de "60%". Se, em seguida digitasse em A2 o valor "20%", A1 receberia automaticamente o valor "80%".

A minha tentativa de criar esse procedimento no VBA foi:
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("a1:a2")) Is Nothing Then Exit Sub
        If Target.Address = "$a$1" Then
            Application.EnableEvents = False
            Range("a2").Value = 1 - Target.Value
            Application.EnableEvents = True
            If Target.Address = "$a$2" Then
                Application.EnableEvents = False
                Range("a1").Value = 1 - Target.Value
                Application.EnableEvents = True
                End If
            End If
                
End Sub
Gostaria também, se puderem, que me explicassem o que fiz de errado e o que é correto para que não erre mais em situação parecida.

Obrigado.
#4777
Agora vai funcionar:
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("a1:a2")) Is Nothing Then Exit Sub
        If Target.Address = "$A$1" Then
            Application.EnableEvents = False
            Range("a2").Value = 1 - Target.Value
            Application.EnableEvents = True
        End If
        If Target.Address = "$A$2" Then
            Application.EnableEvents = False
            Range("a1").Value = 1 - Target.Value
            Application.EnableEvents = True
        End If
End Sub
#4780
Estava pronto para voltar aqui e dizer que, mesmo assim, não havia funcionado. Não havia qualquer mudança quando digitava valores em qualquer uma das células. Resolvi então olhar, letra a letra, a diferença entre os códigos.
Descobri que, se o Target.Address for "$a$1" o código não funciona. Mas se ele for "$A$1", funciona. Achei estranho pois, no meu entendimento, o VBA do Excel não fazia distinção entre maiúsculas e minúsculas. Nesse caso ele fez.

Muito obrigado pela ajuda e pela rapidez. ;)
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord