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
  • Avatar do usuário
#70509
Boas pessoal, eu tenho uma lista suspensa com condicional que cria outra lista suspensa com dados, teria como esses dados da segunda lista não se repetirem? Vi que daria para fazer com a função Único, mas meu Excel é 2013, e não tem essa função.

Imagem
Você não está autorizado a ver ou baixar esse anexo.
Editado pela última vez por AndreSpecker em 06 Mai 2022 às 16:36, em um total de 3 vezes.
#70525
@AndreSpecker, boa noite.
Vi que está utilizando Macros para fazer algumas rotinas, insira em algum módulo a macro abaixo, ela vai gerar uma lista única na sua aba Tabelas na coluna D, com isso só redirecionar sua lista para essa coluna.
Código: Selecionar todos
Public Sub ListaUnica()
    Dim lLinha As Long
    Dim lLista As Long
    Dim Existe As Boolean
    
    lLinha = 2
    lLista = 1
    Existe = fase
    Do Until Plan1.Cells(lLinha, 2) = ""
        Do Until Plan3.Cells(lLista, 4) = ""
            If Plan3.Cells(lLista, 4) = Plan1.Cells(lLinha, 4) Then
                Existe = True
                Exit Do
            End If
        lLista = lLista + 1
        Loop
        If Existe = False Then
            Plan3.Cells(lLista, 4) = Plan1.Cells(lLinha, 4)
        End If
    lLinha = lLinha + 1
    lLista = 1
    Existe = False
    Loop
End Sub
#70600
Experimente o código abaixo no lugar do existente no módulo da planilha Pesquisa.
O código atual está contido no código abaixo.
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim k As Long, LR As Long
  Application.ScreenUpdating = False
  If Target.Address = "$C$1" Then
   [C2].Validation.Delete: [C2] = ""
   If Target.Value <> "" Then
    With Sheets("Dados")
     .[W:W].Clear
     LR = .Cells(Rows.Count, 2).End(3).Row
     k = .[A1:L1].Find([C1]).Column
     .Range(.Cells(2, k), .Cells(LR, k)).Copy .[W1]
     .Range("W1:W" & LR - 1).RemoveDuplicates Columns:=1, Header:=xlNo
     .Range("W1:W" & .Cells(Rows.Count, 23).End(3).Row).Sort Key1:=.[W1], Order1:=xlAscending
     [C2].Validation.Add Type:=xlValidateList, Formula1:="=Dados!W1:W" & .Cells(Rows.Count, 23).End(3).Row
     [C2].NumberFormat = IIf(k = 5, "dd/mm/yyyy", "General")
     [C2].Activate
    End With
   End If
  ElseIf Target.Address = "$C$2" Then
   If [C4] <> "" Then Range("C4:M" & Cells(Rows.Count, 3).End(3).Row).ClearContents
    If Target.Value <> "" Then
     Sheets("Dados").Range("B1:L800").AdvancedFilter Action:=xlFilterCopy, _
      CriteriaRange:=Range("C1:C2"), CopyToRange:=Range("C4"), Unique:=False
    Call ColoriPesquisa
   End If
 End If
End Sub
#
obs.
1. antes de testar desfaça a mesclagem em C2:E2 da planilha Pesquisa. Células mescladas são desnecessárias, inúteis e podem provocar erros em macros e em fórmulas.
2. o código utiliza a coluna W da planilha Dados como coluna auxiliar
#70610
@osvaldomp poderias dar uma checada, eu fiz umas alterações na planilha, e alterou algumas colunas, tentei com o codigo abaixo, mas talvez tenha que alterar algum dado que não estou acertando, poderias verificar?
Os dados na coluna W não estão sendo "criados"
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim k As Long, LR As Long
  Application.ScreenUpdating = False
  If Target.Address = "$E$1" Then
   [E2].Validation.Delete: [E2] = ""
   If Target.Value <> "" Then
    With Sheets("Dados")
     .[W:W].Clear
     LR = .Cells(Rows.Count, 2).End(3).Row
     k = .[A1:O1].Find([E1]).Column
     .Range(.Cells(2, k), .Cells(LR, k)).Copy .[W1]
     .Range("W1:W" & LR - 1).RemoveDuplicates Columns:=1, Header:=xlNo
     .Range("W1:W" & .Cells(Rows.Count, 23).End(3).Row).Sort Key1:=.[W1], Order1:=xlAscending
     [E2].Validation.Add Type:=xlValidateList, Formula1:="=Dados!W1:W" & .Cells(Rows.Count, 23).End(3).Row
     [E2].NumberFormat = IIf(k = 5, "dd/mm/yyyy", "General")
     [E2].Activate
    End With
   End If
  ElseIf Target.Address = "$E$2" Then
   If [E4] <> "" Then Range("E4:R" & Cells(Rows.Count, 3).End(3).Row).ClearContents
    If Target.Value <> "" Then
     Sheets("Dados").Range("B1:O800").AdvancedFilter Action:=xlFilterCopy, _
      CriteriaRange:=Range("E1:E2"), CopyToRange:=Range("E4"), Unique:=False
    Call ColoriPesquisa
   End If
 End If
End Sub
Imagem
#70615
Disponibilize o novo arquivo Excel com o código que passei (sem qualquer alteração) e informe com exatidão quais as mudanças que você fez nas planilhas com relação ao arquivo anteriormente disponibilizado.
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