Comment activer l'autocomplétion d'une zone de texte en cours de saisie dans Excel ?
Par défaut, Excel peut se souvenir de ce que vous avez saisi dans les cellules de la feuille de calcul actuelle et autocompléter ce contenu la prochaine fois que vous tapez une lettre initiale correspondante dans une nouvelle cellule. Cependant, si vous souhaitez que tout le contenu que vous avez saisi dans la feuille de calcul s'affiche en autocomplétion dans une zone de texte (contrôle ActiveX), comment procéder ? Cet article propose une méthode VBA pour vous aider à activer l'autocomplétion d'une zone de texte lorsque vous saisissez une lettre initiale.
Activer l'autocomplétion d'une zone de texte en utilisant du code VBA
Activer l'autocomplétion d'une zone de texte en utilisant du code VBA
Veuillez suivre les étapes ci-dessous pour activer l'autocomplétion d'une zone de texte lors de la saisie d'une lettre initiale dans cette zone.
1. Insérez une zone de texte en cliquant sur Développeur > Insérer > Zone de texte (contrôle ActiveX). Voir capture d'écran :
2. Ensuite, cliquez sur Développeur > Insérer > Boîte de liste (contrôle ActiveX) pour insérer une boîte de liste dans la feuille de calcul actuelle. Voir capture d'écran :
3. Faites un clic droit sur l'onglet de la feuille, puis cliquez sur Afficher le code dans le menu contextuel comme indiqué dans la capture d'écran ci-dessous.
4. Dans la fenêtre Microsoft Visual Basic for Applications, copiez et collez le code VBA ci-dessous dans la fenêtre Code. Ensuite, cliquez sur Outils > Références, puis cochez la case Microsoft Scripting Runtime dans la boîte de dialogue Références – Projet VBA. Voir capture d'écran :
Code VBA : Activer l'autocomplétion d'une zone de texte lors de la saisie
Dim xRg As Range
Dim xDic As New Dictionary
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.TextBox1.Value = Me.ListBox1.Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xVal As String
On Error Resume Next
If IsNumeric(Target.Value) Then
xVal = Str(Target.Value)
Else
xVal = Target.Value
End If
If xVal <> "" Then
If Not xDic.Exists(xVal) Then
xDic.Add xVal, xVal
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Me.ListBox1.Visible = False
End Sub
Private Sub Worksheet_Activate()
Dim I As Long
Dim xStr As String
On Error Resume Next
If xRg Is Nothing Then
Set xRg = ActiveSheet.UsedRange
End If
Me.ListBox1.Visible = False
xDic.RemoveAll
With Me.ListBox1
For I = 1 To xRg.Count
xStr = xRg(I).Value
If xStr <> "" Then
.AddItem xStr
If Not xDic.Exists(xStr) Then
xDic.Add xStr, xStr
End If
End If
Next
End With
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With Me.ListBox1
.Top = Me.TextBox1.Top
.Left = Me.TextBox1.Left + Me.TextBox1.Width
.Width = Me.TextBox1.Width
End With
TextBoxVal Me.TextBox1.Object
End Sub
Sub TextBoxVal(xTextBox As Variant)
Dim I As Long
Dim xStr As String
On Error Resume Next
Application.ScreenUpdating = False
If xRg Is Nothing Then Exit Sub
Me.ListBox1.Clear
xStr = xTextBox.Value
If xStr = "" Then
Me.ListBox1.Visible = False
Application.EnableEvents = True
Exit Sub
End If
For I = 0 To UBound(xDic.Items)
If Left(xDic.Items(I), Len(xStr)) = xStr Then
Me.ListBox1.AddItem xDic.Items(I)
End If
Next
Me.ListBox1.Visible = True
If Me.ListBox1.ListCount > 0 Then
With xTextBox
.Value = Me.ListBox1.List(0)
.SelStart = Len(xStr)
.SelLength = Len(Me.ListBox1.List(0))
End With
End If
Me.ListBox1.Activate
Me.ListBox1.Selected(0) = True
Application.ScreenUpdating = True
End Sub
Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Me.TextBox1.Value = Me.ListBox1.Value
End If
End Sub
Remarque : Dans le code, ListBox1 et Textbox1 sont les noms de la boîte de liste et de la zone de texte que vous avez insérées dans votre feuille de calcul.
5. Appuyez sur les touches Alt + Q pour quitter la fenêtre Microsoft Visual Basic for Applications.
6. Désactivez le Mode Création en cliquant sur Développeur > Mode Création dans la feuille de calcul.
7. Maintenant, passez à une autre feuille de calcul, puis revenez à la feuille précédente pour activer le code VBA.
Dès maintenant, lorsque vous entrez une lettre initiale dans la zone de texte, tous les textes commençant par cette lettre que vous avez saisis dans la feuille de calcul seront listés dans la boîte de liste située à droite de la zone de texte. Double-cliquez sur celui dont vous avez besoin pour l'insérer dans la zone de texte. Voir capture d'écran :
Remarque : Vous pouvez utiliser les touches fléchées Haut ou Bas pour naviguer parmi toutes les suggestions d'autocomplétion dans la boîte de liste, puis appuyer sur la touche Entrée pour insérer celle dont vous avez besoin dans la zone de texte.
Articles connexes :
- Comment sélectionner automatiquement le texte d'une zone de texte lorsqu'elle est sélectionnée dans Excel ?
- Comment effacer le contenu d'une zone de texte lorsqu'elle est cliquée dans Excel ?
- Comment concaténer les textes de plusieurs cellules dans une zone de texte dans Excel ?
- Comment désactiver la modification dans une zone de texte pour empêcher la saisie utilisateur dans Excel ?
- Comment formater une zone de texte en pourcentage dans Excel ?
Meilleurs outils de productivité pour Office
Boostez vos compétences Excel avec Kutools pour Excel, et découvrez une efficacité sans précédent. Kutools pour Excel propose plus de300 fonctionnalités avancées pour augmenter la productivité et gagner du temps. Cliquez ici pour obtenir la fonctionnalité dont vous avez le plus besoin...
Office Tab apporte une interface à onglets à Office, et facilite grandement votre travail
- Activez la modification et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
- Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
- Augmente votre productivité de50 %, et réduit des centaines de clics de souris pour vous chaque jour !