Liste déroulante avec saisie semi automatique

Y compris Power BI, Power Query et toute autre question en lien avec Excel
d
david79230
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 4 novembre 2015
Version d'Excel : 2007

Message par david79230 » 19 juin 2017, 10:59

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
Heures en dépassement 2014-2016.xls
(76 Kio) Téléchargé 36 fois
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 19 juin 2017, 12:08

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.
david79230_Heures en dépassement 2014-2016.xls
(74.5 Kio) Téléchargé 60 fois
c
ceuzin
Membre dévoué
Membre dévoué
Messages : 569
Appréciations reçues : 24
Inscrit le : 29 octobre 2011
Version d'Excel : 2002

Message par ceuzin » 19 juin 2017, 20:15

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
SaisieIntuitive2014-2016.xls
(86.5 Kio) Téléchargé 122 fois
d
david79230
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 4 novembre 2015
Version d'Excel : 2007

Message par david79230 » 20 juin 2017, 11:22

Bonjour,

ca marche nickel merci a vous deux.

Je vais essayer la saisie intuitive google pour un autre fichier

Merci encore
d
david79230
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 4 novembre 2015
Version d'Excel : 2007

Message par david79230 » 20 juin 2017, 11:46

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?
:D
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message