Lista de validação de dados Excel com autocompletar VBA

Objetivo: Demonstrar como criar uma lista de validação de dados no Excel com o recurso de autocompletar, ou seja, ao serem digitadas as letras a lista seleciona os nomes que iniciam com aquelas letras na lista utilizando VBA.Lista autocompletar Excel

Neste artigo você verá passo-a-passo como criar uma lista com validação de dados com o recurso autocompletar.

Caso não esteja familiarizado com o recurso de validação de dados veja este artigo: http://guiadoexcel.com.br/validacao-de-dados-excel.


Criando a lista

1. Crie uma lista de dados que serão selecionados. No nosso caso é uma lista de produtos.

Lista autocompletar Excel 2

2. Clique no local aonde serão inseridas as validações de dados com listas;

3. Clique na guia Dados->Validação de Dados;

4. Selecione a opção Permitir: Listas e em Fonte defina aonde está a sua lista de dados. A lista pode ser selecionada ou digitado o nome do intervalo, no nosso caso temos um intervalo nomeado Lista.

Lista autocompletar Excel 3

5. A nossa validação de dados já está pronta, você já consegue selecionar os itens na lista a partir da sua lista de validação, porém, ainda não temos o recurso autocompletar, que iremos inserir agora.


Recurso autocompletar

1. Clique na guia Desenvolvedor, para habilitá-la siga as instruções: http://guiadoexcel.com.br/habilitando-a-guia-desenvolvedor-e-copiando-procedimentos-vba-sub-da-internet;

2. Clique no botão Modo de Design e no botão Inserir selecione a opção Caixa de Combinação (Controle ActiveX).

Lista autocompletar Excel 4

3. Desenhe uma caixa de combinação no Excel em qualquer lugar da planilha;

Lista autocompletar Excel 5

4. Clique no comboBox criada e na guia Desenvolvedor clique em Propriedades;

5. Na janela que segue altere a propriedade (Name) para TempCombo, conforme a imagem;

Lista autocompletar Excel 6

6. Clique nesta lista em Font e altere as suas propriedades de fonte e tamanho;

Lista autocompletar Excel 7

7. Altere a propriedade ListRows conforme a quantidade de itens a serem listados de uma vez, sem rolar a barra, por exemplo 8;

8. Feche a janela Propriedades e clique no botão Modo de Design na guia Desenvolvedor, desmarcando-o.


Inserindo o código VBA

1. Clique na guia Desenvolvedor e no botão Visual Basic;

2. Na árvore de itens do VBA selecione a planilha aonde está a lista de validação de dados e dê um duplo clique, abrindo a área do código;

Lista autocompletar Excel 8

3. Cole o seguinte código VBA na parte de código fonte da planilha:

Option Explicit

'Baseado em código da www.contextures.com
Private Sub TempCombo_KeyDown(ByVal _
        KeyCode As MSForms.ReturnInteger, _
        ByVal Shift As Integer)
        
    'Ocultar caixa de combinação e mover a próxima célula com Enter e Tab
    Select Case KeyCode
        Case 9
            ActiveCell.Offset(0, 1).Activate
        Case 13
            ActiveCell.Offset(1, 0).Activate
        Case Else
            'Nada
    End Select

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim str As String
    Dim cboTemp As OLEObject
    Dim ws As Worksheet
    Dim wsList As Worksheet

    Set ws = ActiveSheet
    Set wsList = Sheets(Me.Name)
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    
    If Application.CutCopyMode Then
      'Permite copiar e colar na planilha
      GoTo errHandler
    End If
    
    Set cboTemp = ws.OLEObjects("TempCombo")
      On Error Resume Next
      With cboTemp
        .Top = 10
        .Left = 10
        .Width = 0
        .ListFillRange = ""
        .LinkedCell = ""
        .Visible = False
        .Value = ""
      End With
    
    On Error GoTo errHandler
      If Target.Validation.Type = 3 Then
        Application.EnableEvents = False
        str = Target.Validation.Formula1
        str = Right(str, Len(str) - 1)
        With cboTemp
            .Visible = True
            .Left = Target.Left
            .Top = Target.Top
            .Width = Target.Width + 15
            .Height = Target.Height + 5
            .ListFillRange = str
            .LinkedCell = Target.Address
        End With
        cboTemp.Activate
        
        'Abrir a lista suspensa automaticamente
        Me.TempCombo.DropDown
        End If

errHandler:
  Application.ScreenUpdating = True
  Application.EnableEvents = True
  Exit Sub

End Sub

3. Clique no botão Fechar do VBA, no canto superior direito, e retorne á pasta de trabalho do Excel.


Conclusão e testes

1. Clique sobre o local aonde há a validação de dados e verifique se a lista é apresentada ao clicar, em seguida digite algumas letras para verificar se a lista é filtrada automaticamente;[saiba_mais]

Lista autocompletar Excel 9

2. Se a lista estiver abrindo e filtrando automaticamente conforme é digitado você fez tudo certo e está funcionando corretamente;

Cursos do Guia do Excel - Destaque-se no mercado de trabalho

3. Baixe o nosso exemplo clicando no botão Download ao final do artigo para verificar como funciona.

Baixe a planilha

Abraço

Marcos Rieper