web-dev-qa-db-fra.com

Validation des données Excel avec suggestions / saisie semi-automatique

Toutes mes excuses pour mon faible niveau de compréhension d'Excel, peut-être que ce que je cherche à faire n'est pas possible.

J'ai une liste de 120 entrées que je souhaite utiliser comme validation des données. Mais au lieu que les gens aient à faire défiler les 120 options, ce serait bien s'ils pouvaient commencer à taper et voir les options qui pourraient correspondre à ce qu'ils sont prêts à écrire. Un peu comme dans la saisie semi-automatique, j'ai trouvé cette astuce .

Je voudrais avoir plus d'options au début de la frappe.

Par exemple, cela ferait partie de la liste:

Awareness  
Education  
Budget  
Budget Planning  
Enterprise Budget 

Lorsque je tape "B", je voudrais que les trois dernières options apparaissent et que je clique sur l'une d'entre elles. Je ne sais pas s'il existe un moyen d'inclure vlookup ici ...

Idéalement, la chose parfaite serait d'avoir plusieurs "balises" dans une cellule, mais je crains que ce soit absolument impossible avec Excel.

Merci beaucoup pour toute contribution et désolé si je ne me suis pas expliqué correctement.

16
gcv

Si vous ne voulez pas descendre le chemin VBA, il y a cette astuce d'une question précédente.

Excel 2010: comment utiliser la saisie semi-automatique dans la liste de validation

Cela ajoute un volume ennuyeux en haut de vos feuilles et une maintenance potentielle (si vous avez besoin de plus d'options, en ajoutant des noms de personnes à partir d'une liste de personnel, de nouveaux projets, etc.) mais fonctionne tout de même.

4
Trigger-Cut

Il y a une solution de contournement compliquée à http://www.ozgrid.com/Excel/autocomplete-validation.htm qui fonctionne essentiellement comme ceci:

  1. Activez "Autocomplete pour les valeurs de cellule" sur Tools - Options > Edit;
  2. Recréez la liste des éléments valides sur la cellule immédiatement au-dessus de celle avec les critères de validation;
  3. Masquez les lignes avec la liste des éléments valides.
2
Waldir Leoncio

ExtendOffice.com propose une solution VBA qui a fonctionné pour moi dans Excel 2016. Voici ma description des étapes. J'ai inclus des détails supplémentaires pour le rendre plus facile. J'ai également légèrement modifié le code VBA. Si cela ne fonctionne pas pour vous, réessayez les étapes ou consultez les instructions sur la page ExtendOffice.

  1. Ajoutez la validation des données à une cellule (ou plage de cellules). Autoriser = Liste. Source = [la plage avec les valeurs souhaitées pour la saisie semi-automatique/déroulante]. Cliquez sur OK. Vous devriez maintenant avoir un menu déroulant mais avec une faible fonctionnalité de saisie automatique.

    enter image description here

  2. Avec une cellule contenant votre validation de données nouvellement ajoutée, insérez une zone de liste déroulante ActiveX (PAS une zone de liste déroulante de contrôle de formulaire). Cela se fait à partir du ruban Developer. Si vous ne disposez pas du ruban développeur, vous devrez l'ajouter à partir du menu des options Excel.

    enter image description here

  3. Dans l'onglet Développeur de la section Contrôles, cliquez sur "Mode Création". Sélectionnez la zone de liste déroulante que vous venez d'insérer. Ensuite, dans la même section de ruban, cliquez sur "Propriétés". Dans la fenêtre Propriétés, modifiez le nom de la zone de liste modifiable en "TempComboBox".

    enter image description here

  4. Appuyez sur ALT + F11 pour accéder à Visual Basic Editor. Sur le côté gauche, double-cliquez sur la feuille de calcul avec votre validation de données pour ouvrir le code de cette feuille. Copiez et collez le code suivant sur la feuille. REMARQUE: j'ai légèrement modifié le code pour qu'il fonctionne même avec Option Explicit activé en haut de la feuille.

    Option Explicit
    
    Private Sub Worksheet_SelectionChange(ByVal target As Range)
    'Update by Extendoffice: 2018/9/21
    ' Update by Chris Brackett 2018-11-30
    
    Dim xWs As Worksheet
    Set xWs = Application.ActiveSheet
    
    On Error Resume Next
    
    Dim xCombox As OLEObject
    Set xCombox = xWs.OLEObjects("TempCombo")
    
    ' Added this to auto select all text when activating the combox box.
    xCombox.SetFocus
    
    With xCombox
        .ListFillRange = vbNullString
        .LinkedCell = vbNullString
        .Visible = False
    End With
    
    
    Dim xStr As String
    Dim xArr
    
    
    If target.Validation.Type = xlValidateList Then
        ' The target cell contains Data Validation.
    
        target.Validation.InCellDropdown = False
    
    
        ' Cancel the "SelectionChange" event.
        Dim Cancel As Boolean
        Cancel = True
    
    
        xStr = target.Validation.Formula1
        xStr = Right(xStr, Len(xStr) - 1)
    
        If xStr = vbNullString Then Exit Sub
    
        With xCombox
            .Visible = True
            .Left = target.Left
            .Top = target.Top
            .Width = target.Width + 5
            .Height = target.Height + 5
            .ListFillRange = xStr
    
            If .ListFillRange = vbNullString Then
                xArr = Split(xStr, ",")
                Me.TempCombo.List = xArr
            End If
    
            .LinkedCell = target.Address
    
        End With
    
        xCombox.Activate
        Me.TempCombo.DropDown
    
    End If
    End Sub
    
    Private Sub TempCombo_KeyDown( _
                    ByVal KeyCode As MSForms.ReturnInteger, _
                    ByVal Shift As Integer)
        Select Case KeyCode
            Case 9  ' Tab key
                Application.ActiveCell.Offset(0, 1).Activate
            Case 13 ' Pause key
                Application.ActiveCell.Offset(1, 0).Activate
        End Select
    End Sub
    
  5. Assurez-vous que la "bibliothèque d'objets Microsoft Forms 2.0" est référencée. Dans Visual Basic Editor, accédez à Outils> Références, cochez la case en regard de cette bibliothèque (si ce n'est déjà fait) et cliquez sur OK. Pour vérifier que cela a fonctionné, accédez à Debug> Compile VBA Project.

  6. Enfin, enregistrez votre projet et cliquez dans une cellule avec la validation de données que vous avez ajoutée. Vous devriez voir une zone de liste déroulante avec une liste déroulante de suggestions qui se met à jour avec chaque lettre que vous tapez.

enter image description here

enter image description here

2
ChrisB

Voici une solution pour créer une liste déroulante de saisie semi-automatique avec VBA:


Tout d'abord, vous devez insérer une zone de liste modifiable dans la feuille de calcul et modifier ses propriétés, puis exécuter le code VBA pour activer la saisie semi-automatique.

  1. Accédez à la feuille de calcul qui contient la liste déroulante que vous souhaitez qu'elle soit complétée automatiquement.

  2. Avant d'insérer la zone de liste déroulante, vous devez activer l'onglet Développeur dans le ruban.

a). Dans Excel 2010 et 2013, cliquez sur Fichier> Options. Et dans la boîte de dialogue Options, cliquez sur Personnaliser le ruban dans le volet droit, cochez la case Développeur, puis cliquez sur le bouton OK.

b). Dans Outlook 2007, cliquez sur le bouton Office> Options Excel. Dans la boîte de dialogue Options Excel, cliquez sur Populaire dans la barre de droite, puis cochez l'onglet Afficher développeur dans la zone du ruban et enfin cliquez sur le bouton OK.

  1. Cliquez ensuite sur Développeur> Insérer> Zone de liste déroulante sous Contrôles ActiveX.

  2. Dessinez la zone de liste modifiable dans la feuille de calcul actuellement ouverte et faites un clic droit dessus. Sélectionnez Propriétés dans le menu contextuel.

  3. Désactivez le mode Conception en cliquant sur Développeur> Mode Conception.

  4. Cliquez avec le bouton droit sur l'onglet de la feuille de calcul actuellement ouverte et cliquez sur Afficher le code.

  5. Assurez-vous que l'éditeur de code de feuille de calcul actuel est ouvert, puis copiez-collez le code VBA ci-dessous dedans.

Code emprunté à extendoffice.com

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Update by Extendoffice: 2018/9/21
    Dim xCombox As OLEObject
    Dim xStr As String
    Dim xWs As Worksheet
    Dim xArr



    Set xWs = Application.ActiveSheet
    On Error Resume Next
    Set xCombox = xWs.OLEObjects("TempCombo")
    With xCombox
        .ListFillRange = ""
        .LinkedCell = ""
        .Visible = False
    End With
    If Target.Validation.Type = 3 Then
        Target.Validation.InCellDropdown = False
        Cancel = True
        xStr = Target.Validation.Formula1
        xStr = Right(xStr, Len(xStr) - 1)
        If xStr = "" Then Exit Sub
        With xCombox
            .Visible = True
            .Left = Target.Left
            .Top = Target.Top
            .Width = Target.Width + 5
            .Height = Target.Height + 5
            .ListFillRange = xStr
            If .ListFillRange = "" Then
                xArr = Split(xStr, ",")
                Me.TempCombo.List = xArr
            End If
            .LinkedCell = Target.Address
        End With
        xCombox.Activate
        Me.TempCombo.DropDown
    End If
End Sub

Private Sub TempCombo_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
        Case 9
            Application.ActiveCell.Offset(0, 1).Activate
        Case 13
            Application.ActiveCell.Offset(1, 0).Activate
    End Select
End Sub
  1. Cliquez sur Fichier> Fermer et revenir à Microsoft Excel pour fermer la fenêtre Microsoft Visual Basic pour Application.

  2. Maintenant, cliquez simplement sur la cellule avec la liste déroulante, vous pouvez voir que la liste déroulante est affichée sous forme de zone de liste déroulante, puis tapez la première lettre dans la zone, le mot correspondant sera complété automatiquement.

Remarque: ce code VBA n'est pas appliqué aux cellules fusionnées.

Source: Comment effectuer la saisie semi-automatique lors de la saisie dans la liste déroulante Excel?

2
alimonali

Aucune des solutions mentionnées ci-dessus n'a fonctionné. Celui qui semblait fonctionner ne fournissait la fonctionnalité que pour une seule cellule

Récemment, j'ai dû entrer beaucoup de noms et sans suggestions, c'était une énorme douleur. J'ai eu la chance d'avoir ce complément de saisie semi-automatique Excel pour activer la saisie semi-automatique. L'inconvénient est que vous devez activer la macro (mais vous pouvez toujours la désactiver plus tard)

1
codingpuss