Liste déroulante avec saisie semi automatique
Bonjour à tous,
je suis bloqué par un problème qui est expliqué dans le titre.
Dans le fichier joint, je souhaiterais que sur la feuille test je puisse avoir une saisie semi auto sur Nom/Prénom.
Actuellement, j'ai sur une liste déroulante simple mais ce serait plus rapide de pouvoir taper quelques caractères.
je viens de chercher sur plusieurs forums et à chaque fois que j'essaye d'incorporer la fonction DECALER ca ne fonctionne pas.
Merci de votre aide
Bonjour,
Solution macro que j'ai eu l'occasion de réaliser il y a peu de temps...
Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tx$, i%, j%
If Target.Address = "$F$3" Then
ThisWorkbook.Names.Add "ListA", "=Liste"
If Target.Value <> "" Then
tx = Target & "*"
With [Liste]
For i = 1 To .Rows.Count
If .Cells(i, 1) Like tx Then Exit For
Next i
If i <= .Rows.Count Then
Do While .Cells(i + j, 1) Like tx
j = j + 1
Loop
ThisWorkbook.Names.Add "ListA", "=OFFSET(Liste," & i - 1 & ",," & j & ")"
Application.EnableEvents = False
If j = 1 Then Target = .Cells(i, 1)
Application.EnableEvents = True
Exit Sub
End If
End With
End If
End If
End Sub
La macro est très proche de la solution formule. Dans les 2 cas tu nommes la liste de base (ici nommée Liste), de préférence en dynamique si elle peut varier. La liste doit être triée par ordre alpha. Tu décoches dans la validation la case Quand des données non valides sont tapées. Dans la version macro, tu crées un 2e nom (ici ListA) que tu définis au départ =Liste. Et en validation tu mets =ListA. La macro définit les éléments de Liste correspondant à ta frappe initiale et redéfinit ListA avec une formule DECALER...
En formule, c'est la même formule DECALER que tu tapes comme validation. C'est donc quasi identique...
Petit avantage pour la macro : si un seul item correspond à ta frappe initiale, elle l'affecte avant que tu aies besoin de le sélectionner dans la liste résiduelle (ce que la formule ne peut faire !)
Par contre il conviendrait de normaliser ta liste sous la forme : NOM Prénom. Elle comporte des anomalies à cet égard.
Possibilités supplémentaires qui peuvent s'ajouter : Tri de la liste en cas d'ajout ou modification (déclenchement manuel ou automatique). [autre petite macro à faire]
Décochage des cases à cocher lors de changement en F3 : ça c'est à ajouter dans la macro.
Cordialement.
Bonsoir,
Vraie saisie intuitive type Google.
Private Sub ComboBox1_Change()
If Me.ComboBox1 <> "" Then
Set d1 = CreateObject("Scripting.Dictionary")
clé = UCase(Me.ComboBox1) & "*"
For Each c In Sheets("liste employé").[Liste]
If UCase(c) Like clé Then d1(c.Value) = ""
Next c
Me.ComboBox1.List = d1.keys
Me.ComboBox1.DropDown
[F3] = Me.ComboBox1
End If
End Sub
Private Sub ComboBox1_DropButtonClick()
ComboBox1.List = Sheets("liste employé").Range("liste").Value
End Sub
Pour une recherche par le prénom : clé = "*" & UCase(Me.ComboBox1) & "*"
Ceuzin
Bonjour,
ca marche nickel merci a vous deux.
Je vais essayer la saisie intuitive google pour un autre fichier
Merci encore
Donc je viens d'essayer la saisie intuitive et c'est ce qu'il me fallait.
C'est parfait sauf que je n'arrive pas à récupérer la valeur de la combobox .
Je souhaiterais que la valeur soit retournée dans une variable en string.
Comment faire?