recherche dans une liste a partir des premieres lettres

matou59

XLDnaute Junior
Bonjour,
Je joins un fichier zip qui expliquera mieux ce que je vodrais faire
A partir d'une liste de villes, rechercher une ville en donnant la 1ere lettre de son nom ou les suivantes
Quelle methode serait la plus simple pour moi car je ne connais pas visual basic mais en m'expliquant peut etre que je comprendrai...

merci

Cordialement
 

Pièces jointes

  • recherche_ville.zip
    28.9 KB · Affichages: 166

matou59

XLDnaute Junior
Re : recherche dans une liste a partir des premieres lettres

bonjour hasco
je suis désolé mais je ne comprend pas grand chose avec le fichier que vous m'avez envoyé.
En plus je n'arrive pas a extraire le fichier macro complementaire.
Excusez moi mais je suis vraiment largué quand on me parle de VB

Il y a peut etre un autre moyen de m'expliquer ou carément de faire cette application en utilisant mon fichier
merci
 
G

Guest

Guest
Re : recherche dans une liste a partir des premieres lettres

Re,

Désolé mais il n'y a pas de moyen 'simple' sans vba (et même avec) pour faire ce que tu demandes. Et vba ne s'explique pas en 2 phrases et quelques minutes. De plus il n'est pas dans la politique de la maison de faire des applications clefs en main.

A+
 

matou59

XLDnaute Junior
Re : recherche dans une liste a partir des premieres lettres

Hasco je n'ai pas demandé a ce qu'on résolve mon probleme en me donnant "bétement" la solution.
Non, j'ai choisi ce petit exemple simplement pour connaitre la maniére dont il faut s'y prendre.
Votre reponse en m'envoyant votre fichier est certainement tres tres bien mais trop complexe pour moi.
En y joignant mon fichier j'ai pensé que ce serait plus simple pour vous de resoudre le probleme mais bien entendu avec qq explications.
Je me doute bien qu'il faille passer par VB pour resoudre cela et je sais bien que vous n'allez pas m'apprendre le VB il y a des stages pour cela (bien qu'a 60 ans c'est un peu tard) ,, mais j'aime bien aller déchiffrer les instructions VB ou tout a moins j'essaie.
Et c'est comme cela que j'apprend...(c'est mon dada en retraite) en commencant par un probleme simple on arrive a resoudre des problemes plus complexes.
Je ne vous en voudrai pas pour autant si vous voulez en rester là.
Merci quand meme.
 

matou59

XLDnaute Junior
Re : recherche dans une liste a partir des premieres lettres

Je ne vois pourtant malheureusement pas plus simple que ça comme genre de probleme a moins que je me suis mal fait comprendre.
En expliquant simplement : a partir d'une liste de nom triée par ordre alphabétique il faut pouvoir aller choisir dans une liste deroulante tous les noms commencant par une lettre que l'on aura demandée
Par exemple je cherche DUPONT, je vais taper D et une liste deroulante me proposera tous les noms commencant pas D et je pourrai ensuite cliquer sur le nom desiré.
Par la suite on pourrai augmenter la difficulté en tapant les 2 premieres lettres pour avoir une liste plus restreinte
merci bonne journée
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : recherche dans une liste a partir des premieres lettres

Bonjour matou59, salut Hasco :)

C'est un très joli problème que celui-là.

Je trouve qu'il n'est pas trop difficile à résoudre.

Et ma solution pas trop difficile à comprendre.

Voyez le fichier joint avec ce code de la feuille liste (clic droit sur l'onglet et Visualiser le code) :

Code:
Option Explicit '1)

Private Sub Worksheet_SelectionChange(ByVal Target As Range) '2)
Liste ActiveCell '3)
End Sub

Private Sub Worksheet_Change(ByVal Target As Range) '4)
Liste Target.Cells(1, 1) '5)
End Sub

Sub Liste(Target As Range) '6)
Static t As Single '7)
Dim test1 As Byte, test2 As Long, n As Long, CP As Variant
Dim txt As String, deb As Range, fin As Range
If Abs(Timer - t) < 0.1 Then Exit Sub '8)
With Sheets("villes")
  test1 = InStr("1-2-3", Len(Target)) '9)
  test2 = Application.CountIf(.[E2:E65536], Target & "*") '10)
  If Not Intersect(Target, [A2:A65536]) Is Nothing Then '11)
    t = Timer '12)
    Target.Activate '13)
    n = Application.CountIf(.[E2:E65536], Target) '14
    If n = 1 Then CP = Application.VLookup(Target, .[E2:F65536], 2, 0) '15)
    Target.Offset(, 1) = CP '16)
    If n > 1 Then MsgBox "Plusieurs villes portent ce nom, recherchez le code postal...", 48 '17)
    If test1 * test2 Then SendKeys "%{DOWN}" '18)
  End If
  txt = IIf(test1 * test2, Target & "*", "*") '19)
  With .[E2:E65536]
    Set deb = .Find(txt, LookIn:=xlValues, LookAt:=xlWhole) '20)
    Set fin = .Find(txt, SearchDirection:=xlPrevious) '21)
  End With
  .Range(deb, fin).Name = "Liste" '22)
End With
t = Timer '12)
End Sub

Il y a des commentaires pour toutes les lignes du code.

Les listes déroulantes s'ouvrent automatiquement pour 1, 2 ou 3 caractères entrés en colonne A.

A+
 

Pièces jointes

  • recherche_ville(1).zip
    38.2 KB · Affichages: 223
  • recherche_ville(1).zip
    38.2 KB · Affichages: 227
  • recherche_ville(1).zip
    38.2 KB · Affichages: 224
G

Guest

Guest
Re : recherche dans une liste a partir des premieres lettres

Salut Job,

Pour toi, j'en suis sûr ce n'est pas trop difficile mais pour quelqu'un qui semble ne rien maîtriser de vba c'est autre chose.

A+
 

MJ13

XLDnaute Barbatruc
Re : recherche dans une liste a partir des premieres lettres

Bonjour Matou, Ges, Job, Bertrand

Je connaîs l'utilitaire de Ges qui est très bien :).

L'approche de Job et Bertrand me paraissent intéressantes en VBA et en formule (tu vois Bertrand, tu n'es pas si nul :eek:).

Mais si, avec ces 2 dernières versions, je met une liste plus longue d'environ 38000 communes, il me retrouve au début les bonnes communes puis des communes en dehors de la demande. Comment y remédier ?

Merci d'avance :).
 

laetitia90

XLDnaute Barbatruc
Re : recherche dans une liste a partir des premieres lettres

bonjour tous
un exemple en passant par un userform

en complement on faire un peu mieux recherche par nom et par code postal
c'est le premier caractere selectionne qui determine la recherche si numerique recherche sur colonne F ou colonne E

rajouter dim z as byte
le code change trés peu

Code:
On Error Resume Next
Application.ScreenUpdating = False
If Not IsNumeric(Left(Tbx1, 1)) Then z = 1 Else z = 2
With Sheets("villes")
t = .Range("e3:f" & .Range("e65536").End(xlUp).Row)
Lbx1.Clear
x = 1
For i = 1 To UBound(t)
If Left(t(i, z), Len(Tbx1)) = Left(Tbx1, Len(Tbx1)) Then
ect...
 

Pièces jointes

  • Copie de recherche_ville.zip
    45.2 KB · Affichages: 174
Dernière édition:

job75

XLDnaute Barbatruc
Re : recherche dans une liste a partir des premieres lettres

Bonjour Bertrand, Michel,

(...) il me retrouve au début les bonnes communes puis des communes en dehors de la demande.

Si la liste des villes est triée alphabétiquement, il ne devrait pourtant pas y avoir de problème (commentaire 21 de mon code).

Edit : mes hommages laetitia, ça fait boule de neige, tout le monde se réveille :)

A+
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : recherche dans une liste a partir des premieres lettres

Re , Bonjour Laetitia

Merci à tous, je reviendrai plus tard mais surement pas aujourd'hui.

Mais pensez toujours à faire un test en grandeur réelle ::eek:.

Bonne journée :)
 

Discussions similaires