Comment activer la saisie semi-automatique dans une zone de texte pendant la frappe sous Excel ?
Par défaut, Excel mémorise ce que vous saisissez dans les cellules de la feuille de calcul active et complète automatiquement le contenu lorsqu’une lettre initiale correspondante est tapée dans une nouvelle cellule. Mais comment faire pour que tous les contenus saisis dans la feuille soient proposés en saisie semi-automatique dans une zone de texte (contrôle ActiveX) ? Cet article présente une méthode VBA permettant d’activer la saisie semi-automatique dans une zone de texte dès la saisie d’une lettre initiale.
Activer la saisie semi-automatique dans une zone de texte à l’aide d’un code VBA
Activer la saisie semi-automatique dans une zone de texte à l’aide d’un code VBA
Procédez comme suit pour activer la saisie semi-automatique dans une zone de texte dès que vous saisissez une lettre initiale.
1. Insérez une zone de texte en cliquant sur Développeur > Insérer > Zone de texte (contrôle ActiveX). Voir la capture d’écran :

2. Ensuite, cliquez sur Développeur > Insérer > Zone de liste (contrôle ActiveX) pour insérer une zone de liste dans la feuille de calcul actuelle. Voir la capture d’écran :

3. Cliquez avec le bouton droit sur l’onglet de la feuille, puis sélectionnez Afficher le code dans le menu contextuel, comme illustré ci-dessous.

4. Dans la fenêtre Microsoft Visual Basic pour 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 – VBAProject. Voir la capture d’écran :
Code VBA : Activer la saisie semi-automatique dans une zone de texte lors de la frappe
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 correspondent aux noms de la zone 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 fermer la fenêtre Microsoft Visual Basic pour Applications.
6. Désactivez le mode Création en cliquant sur Développeur > Mode Création dans la feuille de calcul.
7. Passez maintenant à une autre feuille de calcul, puis revenez à la feuille précédente afin d’activer le code VBA.
Désormais, lorsque vous saisissez une lettre initiale dans la zone de texte, tous les textes commençant par cette lettre et déjà présents dans la feuille de calcul s’affichent dans la zone de liste située à droite de la zone de texte. Double-cliquez sur l’élément souhaité pour l’insérer dans la zone de texte. Voir la capture d’écran :

Remarque : Vous pouvez utiliser les touches Flèche haut ou Flèche bas pour naviguer parmi toutes les suggestions de saisie semi-automatique dans la liste, puis appuyer sur la touche Entrée pour insérer l’élément sélectionné dans la zone de texte.
Articles associés :
- Comment faire en sorte que le texte d’une zone de texte soit automatiquement sélectionné lorsqu’elle est activée dans Excel ?
- Comment effacer automatiquement le contenu d’une zone de texte en cliquant dessus dans Excel ?
- Comment concaténer le texte de plusieurs cellules dans une zone de texte sous Excel ?
- Comment désactiver la modification dans une zone de texte pour empêcher l’utilisateur de saisir du texte dans Excel ?
- Comment formater une zone de texte en pourcentage dans Excel ?
Meilleurs outils de productivité Office
Boostez vos compétences Excel avec Kutools pour Excel et découvrez une efficacité inégalée.Kutools pour Excel propose plus de 300 fonctionnalités avancées pour améliorer votre 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 rend votre travail bien plus facile
- Activez l’édition 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é de 50 % et vous fait économiser des centaines de clics de souris chaque jour !
Tous les compléments Kutools. Un seul installateur
Kutools for Office regroupe les compléments pour Excel, Word, Outlook et PowerPoint, ainsi que Office Tab Pro, ce qui en fait le choix idéal pour les équipes travaillant à travers les applications Office.
- Suite tout-en-un— Compléments Excel, Word, Outlook et PowerPoint + Office Tab Pro
- Un seul installateur, une seule licence— installation en quelques minutes (compatible MSI)
- Fonctionne mieux ensemble— productivité optimisée dans toutes les applications Office
- Essai gratuit de 30 jours avec toutes les fonctionnalités— aucune inscription, aucune carte bancaire
- Meilleur rapport qualité-prix— économisez par rapport à l’achat de compléments individuels